Получение календаря по URL с помощью Thunderbird-Lightning

Подводя итог, что грядет:

  • Как я могу отправить календарь по ссылке?
  • Почему календарь полностью работает при первом сохранении на локальном ПК и не может быть изменен, если он взят непосредственно из Интернета, хотя он импортируется без сообщений?
  • Как я могу найти причину неудачной модификации?

Полное объяснение:

Я разрабатываю приложение, которое производит календарь 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 ответ

Решение

Я не уверен, что вы планируете разрешить пользователям удаленно изменять события в вашем календаре или хотите, чтобы они импортировали данные календаря в свои собственные календари. Я предполагаю, что вы делаете первым и выбрали тип "iCalendar". Прежде всего некоторые объяснения, есть четкие различия между типами:

  • iCalendar: в этом режиме используется WebDAV, который изначально предназначен не для данных календаря, а для передачи файлов. Для сохранения данных календаря файл.ics загружается, изменяется, а затем снова загружается.
  • CalDAV: это расширение для WebDAV, которое сделано специально для календаря. Существуют дополнительные запросы, чтобы выяснить, что поддерживает сервер. Каждое событие может быть запрошено специально, поэтому клиенту не нужно загружать весь файл.

Если вы используете тип iCalendar, ваше веб-приложение должно поддерживать еще несколько запросов:

  • PUT /path/to/calendar.ics: Этот запрос сделан для сохранения файла на сервере. Если вы не поддерживаете этот метод, будет сгенерировано MODIFICATION_FAILED.
  • PROPFIND /path/to/calendar.icsЭто, вероятно, необязательно, но поможет снизить нагрузку на сеть и избежать потери данных. Запрос ETag выполняется, чтобы выяснить, изменился ли файл. Этот ETag затем используется в If заголовок только PUT, если файл не изменился.

Если вы хотите предоставить доступ к CalDAV, я предлагаю вам взять один из существующих серверов CalDAV с открытым исходным кодом и написать на него бэкэнд, который использует ваши данные.

К сожалению, у Lightning нет способа заставить ссылку автоматически инициировать подписку, но когда это произойдет, это, вероятно, произойдет через webcal:// а также webcals:// схем. Я не знаю, являются ли они стандартными, но они, по крайней мере, обычно используются.

При выборе "Файл"> "Открыть"> "Файл календаря" вы подписываетесь на локальный календарь, используя file:// URI. Если вы удалите файл, вы потеряете свой календарь. Если вместо этого вы хотите импортировать события во внутренний календарь, вам нужно создать локальный календарь, а затем использовать меню "События и задачи" для импорта событий из файла. Невозможно сделать это с удаленным файлом без его загрузки.

Для дополнительной отладки вы можете открыть расширенный редактор настроек в меню "Параметры"> "Дополнительно"> "Общие"> "Редактор конфигурации", а затем включить настройки. calendar.debug.log а также calendar.debug.log.verbose, Более новые версии Lightning могут иметь больше отладочной информации с префиксом [calICSCalendar],

Другие вопросы по тегам