Здесь очень много изменений:
Сегодня пятница (по крайней мере, где-то ;p), поэтому я отложу слияние до понедельника.
Это изменение крайне масштабное и должно значительно улучшить поддержку формата ICS.
- Объединена конвейерная обработка генерации ICS — теперь используется единый механизм как для функции «Добавить в календарь», так и для кликов по датам.
- Исправлено множество тонкостей в формате ICS:
- Мы передаём RRULE, поэтому при добавлении повторяющегося события в календарь оно будет корректно обработано.
- Соблюдены правильные разрывы строк CRLF и общие требования формата ICS.
- Добавлена поддержка часовых поясов: при добавлении события в календарь будет указываться правильный часовой пояс, а не UTC. Это обеспечит корректную работу повторяющихся событий.
- Расширен формат локальных дат для поддержки опционально закодированных ICS-файлов.
У меня остался открытый вопрос: поддерживать ли RRULE или отказаться от него.
Если вы нажмёте здесь:
Мы планируем добавить повторяющееся событие целиком или только один его экземпляр?
Аналогичный вопрос возникает здесь:
@lindsey Я пока не определился, можно аргументировать оба варианта.
- Я кликнул на повторяющееся событие и хочу добавить всю его повторяющуюся серию в календарь.
ИЛИ
- Я кликнул на КОНКРЕТНЫЙ ЭКЗЕМПЛЯР повторяющегося события и хочу добавить только его.
Я реализовал вариант (1), так как считаю его более правильным, но готов изменить на вариант (2), если вы предпочтёте его.

