使用thunderbird-lightning从URL获取日历

时间:2013-03-14 11:36:05

标签: thunderbird icalendar thunderbird-lightning

总结即将发生的事情:

  • 如何通过链接发送日历?
  • 为什么首次保存在我的本地PC上时日历完全正常工作,并且直接从网上获取时虽然导入时没有消息但无法修改日历?
  • 如何找到修改失败的原因?

完整说明:

我正在开发一个生成ICS日历的应用程序。该日历通过URL分发给用户。到目前为止,我发现用户可以通过Calendar tab - >导入日历。 New Calendar - > On the Network。然后提供生成日历的URL并在向导之后生成新日历。这很好,即使我想找到一种方法允许用户导入日历(如果是这种情况,自动触发向导)只需单击我的链接。我尝试在邮件中嵌入链接,但是当单击它时会触发浏览器(如果它是以HTTP协议提供的,或者在提供WebDAV协议时出错)。你知道如何建立一个可以实现我目标的链接吗?

然而,真正的问题是另一个问题。当我按照描述(Calendar tab - > New Calendar - > On the Network)导入日历,然后我尝试修改任何事件数据时,收到MODIFICATION_FAILED消息,并且错误控制台只显示

Timestamp: 03/14/2013 12:20:08 PM
Error: An error occurred when writing to the calendar Test! Error code: MODIFICATION_FAILED. Description: 
Source File: resource://calendar/modules/calUtils.jsm -> file:///home/mdavi/.thunderbird/sdq097yy.default/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calCalendarManager.js
Line: 976

如何找到此错误的原因?此外,我尝试将生成的日历(或从我的链接下载)导出到ICS文件,然后通过File - >打开此类文件。 Open - > Calendar File ...无需修改导出文件中的任何内容,这样我甚至可以修改事件数据。所以为什么?我生成的ICS文件非常简单,如下所示:

BEGIN:VCALENDAR
PRODID:-//Events Calendar//iCal4j //EN
METHOD:PUBLISH
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:...
SUMMARY:...
DTSTART:...
DTEND:...
DESCRIPTION:...
LOCATION:...
URL:...
END:VEVENT
END:VCALENDAR

VEVENT的所有属性都很好。

1 个答案:

答案 0 :(得分:3)

我不确定您是否计划允许用户远程更改日历上的活动,或者您是否希望他们将日历数据导入到自己的日历中。我假设你正在做第一个,并选择了“iCalendar”类型。首先是一些解释,类型之间存在明显差异:

  • iCalendar :此模式使用的WebDAV最初不是用于日历数据,而是用于传输文件。要保存日历数据,请下载,修改.ics文件,然后重新上传
  • CalDAV :这是WebDAV的扩展,专门用于日历。还有其他查询可以确定服务器支持的内容。可以专门查询每个事件,因此客户端不必上传整个文件。

如果您使用的是iCalendar类型,则您的Web应用程序必须支持更多查询:

  • PUT /path/to/calendar.ics:此查询用于将文件保存到服务器。如果您不支持此方法,则会抛出MODIFICATION_FAILED。
  • PROPFIND /path/to/calendar.ics:这可能是可选的,但有助于减少网络负载并避免数据丢失。完成ETag query以查明文件是否已更改。然后,如果文件未更改,则此ETag将在If标头中仅用于PUT。

如果您想提供CalDAV访问,我建议您使用现有的一个开源CalDAV服务器,并为其编写一个使用您的数据的后端。

不幸的是,Lightning没有办法让Link触发器自动订阅,但是当它发生时,它可能会通过webcal://webcals://方案。我不知道它们是否标准,但它们至少是常用的。

选择文件>打开>日历文件,您正在使用file:// URI订阅本地日历。如果删除该文件,您将丢失日历。如果您想要将事件导入内部日历,则需要创建本地日历,然后使用“事件和任务”菜单从文件导入事件。没有下载它就无法使用远程文件。

有关更多调试,您可以在选项>中打开高级配置编辑器。高级>一般>配置编辑器,然后启用偏好设置calendar.debug.logcalendar.debug.log.verbose。较新版本的Lightning可能有更多调试信息,前缀为[calICSCalendar]