ICalendar (ICS) - только компоненты VEVENT хорошо работают с outlook / googleCalendar - PullRequest
0 голосов
/ 11 сентября 2018

У меня проблемы с генерацией файлов Icalendar (* .ICS) Я использую библиотеку Ical.NET и язык C #.

Код очень прост, например, это VEVENT:

  public override void HandleComponent(Ical.Net.Calendar root, CalendarData data)
  {
            var icalEvent = new Ical.Net.Event();
            icalEvent.Start = new CalDateTime(data.Poczatek);
            icalEvent.End = new CalDateTime(data.Koniec);
            icalEvent.Location = data.Lokalizacja;
            icalEvent.Description = data.Opis;
            icalEvent.Summary = data.Nazwa;
            root.Events.Add(icalEvent);
  }

VJOURNEY и VTODO имеют очень похожий код <- сначала я создаю компонент, а затем добавляю его в объект календаря. </p>

Тогда я сгенерировал файл из этого кода:

var serializer = new CalendarSerializer(calendar);
var icsContent = serializer.SerializeToString();
return icsContent;

и структура файлов ics выглядит так:

BEGIN:VCALENDAR
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 2.2//EN
VERSION:2.0
BEGIN:VJOURNAL
ATTENDEE;CN=a;RSVP=TRUE;ROLE=REQ-PARTICIPANT:mailto:a@wp.pl
ATTENDEE;CN=a2;RSVP=TRUE;ROLE=REQ-PARTICIPANT:mailto:a2@wp.pl
DESCRIPTION:trele morele
DTSTAMP:20180913T072413Z
DTSTART:20180912T130700
ORGANIZER;CN=Administrator:mailto:Administrator@wp.pl
SEQUENCE:1
SUMMARY:qwerty22
UID:97032fa5-f554-4f10-9c4d-4fdda38148c7
END:VJOURNAL
END:VCALENDAR

точно так же как в спецификации сказано: https://www.kanzaki.com/docs/ical/vjournal.html

Проблема:

Как Outlook 2016, так и GoogleCalender правильно обрабатывают только компоненты VEVENT в файле ICalendar. Когда я импортирую VJOURNAL или VTODO в GoogleCalendar, он отвечает, что он не видит никаких событий ... Я делаю что-то неправильно?

Я также вставляю код, где я создаю VJOURNAL

   public class CalendarJournalComponent : CalendarComponents
    {
        public override CalendarComponentType SupportedComponent => CalendarComponentType.Journal;

        public override void HandleComponent(Ical.Net.Calendar root, CalendarData data)
        {
            var journal = new Journal();
            journal.Start = new CalDateTime(data.Poczatek);
            journal.Description = data.Opis;
            journal.Summary = data.Nazwa;

            if (data.Prowadzacy.Any())
            {
                var prowadzacy = data.Prowadzacy.FirstOrDefault();
                journal.Organizer = new Organizer() { CommonName = prowadzacy.Value, Value = emailUri(prowadzacy.Key)};
            }

            journal.Attendees = new List<IAttendee>();

            foreach(var uczesnik in data.Uczestnicy)
            {
                journal.Attendees.Add(new Attendee() { CommonName = uczesnik.Value, Rsvp = true, Value = emailUri(uczesnik.Key), Role = "REQ-PARTICIPANT" });
            }
            root.Journals.Add(journal);
        }

        private Func<string, Uri> emailUri = x => new Uri(String.Format("mailto:{0}", x));
    }

и состав VTODO:

  public class CalendarTodoComponent : CalendarComponents
    {
        public override CalendarComponentType SupportedComponent => CalendarComponentType.ToDo;

        public override void HandleComponent(Ical.Net.Calendar root, CalendarData data)
        {
            var todo = new Todo();
            todo.Start = new CalDateTime(data.Poczatek);
            todo.Description = data.Opis;
            todo.Summary = data.Nazwa;
            todo.Location = data.Lokalizacja;
            root.Todos.Add(todo);
        }
    }

1 Ответ

0 голосов
/ 12 сентября 2018

Ваш код, скорее всего, в порядке. Но вы должны спросить себя, что вы действительно ожидаете сделать, пытаясь импортировать эти VJOURNAL и VTODO в Календарь Google? На сегодняшний день Календарь Google поддерживает только события / встречи:

  • Он не поддерживает VJOURNAL. На самом деле, действительно мало программ, которые поддерживают VJOURNAL. Из его определения (https://tools.ietf.org/html/rfc5545#section-3.6.3) вы увидите, что его можно считать предком записи в блоге.
  • Он также не поддерживает VTODO. Самое близкое, что вы можете найти, - это Gmail, в котором есть список задач.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...