2013-03-14 121 views
2

总结什么是未来:获取日历从URL雷鸟雷击

  • 我如何通过派遣一个链接日历?
  • 为什么日历在第一次保存在我的本地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的所有属性均格式良好。

回答

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标题中用于只有在文件没有改变的情况下才放弃。

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

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

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

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

+0

我喜欢你的详细解释!有几个信息我不知道,我现在要进一步调查。我应该首先开始研究iCalendar域名,但这项任务直接由我们公司的首席执行官给予我,所以它似乎很紧迫。目前,我只是上传你的答案,然后我会尝试一个想法,弹出在我的脑海中,阅读你的答案,并可能很快接受答案! – ThanksForAllTheFish 2013-03-15 09:16:11