使用thunderbird lightning从URL获取日历

使用thunderbird lightning从URL获取日历,thunderbird,icalendar,thunderbird-lightning,Thunderbird,Icalendar,Thunderbird Lightning,总结即将发生的事情: 如何通过链接发送日历 为什么日历第一次保存在我的本地PC上时就可以完全工作,而直接从web获取时却无法修改,尽管它是在没有消息的情况下导入的 如何找到修改失败的原因 完整解释: 我正在开发一个生成ICS日历的应用程序。此日历通过URL发送给用户。到目前为止,我发现用户可以通过网络上的日历选项卡导入日历。然后,提供生成日历的URL并遵循向导将创建新日历。尽管我想找到一种方法,允许用户只需单击我的链接就可以导入日历(如果是这样的话,会自动触发向导),但这样做效果很好。我尝试

总结即将发生的事情:

  • 如何通过链接发送日历
  • 为什么日历第一次保存在我的本地PC上时就可以完全工作,而直接从web获取时却无法修改,尽管它是在没有消息的情况下导入的
  • 如何找到修改失败的原因
完整解释:

我正在开发一个生成ICS日历的应用程序。此日历通过URL发送给用户。到目前为止,我发现用户可以通过网络上的
日历选项卡导入日历。然后,提供生成日历的URL并遵循向导将创建新日历。尽管我想找到一种方法,允许用户只需单击我的链接就可以导入日历(如果是这样的话,会自动触发向导),但这样做效果很好。我尝试将链接嵌入邮件中,但单击后会触发浏览器(如果它是在HTTP协议中提供的,或者是在WebDAV协议中提供的错误)。你知道有什么方法可以产生一个链接来实现我的目标吗?

然而,真正的问题是另一个。当我按照所述导入日历(
日历选项卡
->
新日历
->
在网络上
)并尝试修改任何事件数据时,我会收到一条
修改失败
消息,错误控制台会简单地显示出来

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文件,然后通过
文件
->
打开
->
日历文件…
打开该文件,而不修改导出文件中的任何内容,这样我甚至可以修改事件数据。那为什么呢?我生成的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的所有属性都是格式良好的。

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

  • iCalendar:此模式使用WebDAV,它最初不是用于日历数据,而是用于传输文件。要保存日历数据,请下载、修改并再次上载.ics文件
  • CalDAV:这是WebDAV的扩展,专门用于日历。还需要进行其他查询,以确定服务器支持什么。可以专门查询每个事件,因此客户端不必上载整个文件
如果您使用的是iCalendar类型,您的web应用程序必须支持更多的查询:

  • PUT/path/to/calendar.ics
    :此查询用于将文件保存到服务器。如果不支持此方法,将抛出修改失败
  • PROPFIND/path/to/calendar.ics
    :这可能是可选的,但有助于减少网络负载和避免数据丢失。将执行一次检查,以确定文件是否已更改。然后在
    If
    标题中使用此ETag,以仅在文件未更改时放置
如果您想提供CalDAV访问,我建议您使用一个现有的开源CalDAV服务器,并为其编写一个使用您的数据的后端

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

选择文件>打开>日历文件时,您要做的是使用
文件://
URI订阅本地日历。如果删除该文件,您将丢失日历。如果要将事件导入内部日历,则需要创建本地日历,然后使用“事件和任务”菜单从文件导入事件。如果不下载远程文件,就无法实现这一点


要进行更多调试,可以在选项>高级>常规>配置编辑器中打开高级配置编辑器,然后启用首选项
calendar.debug.log
calendar.debug.log.verbose
。较新版本的Lightning可能会有更多以
[CalicCalendar]

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

  • iCalendar:此模式使用WebDAV,它最初不是用于日历数据,而是用于传输文件。要保存日历数据,请下载、修改并再次上载.ics文件
  • CalDAV:这是WebDAV的扩展,专门用于日历。还需要进行其他查询,以确定服务器支持什么。可以专门查询每个事件,因此客户端不必上载整个文件
如果您使用的是iCalendar类型,您的web应用程序必须支持更多的查询:

  • PUT/path/to/calendar.ics
    :此查询用于将文件保存到服务器。如果不支持此方法,将抛出修改失败
  • PROPFIND/path/to/calendar.ics
    :这可能是可选的,但有助于减少网络负载和避免数据丢失。将执行一次检查,以确定文件是否已更改。然后在
    If
    标题中使用此ETag,以仅放置