При нажатии на кнопку «Добавить в календарь» в модальном окне предпросмотра события (которое появляется после клика по дате события), загружаемый файл .ics называется undefined.ics, а заголовок события внутри календарного файла также установлен как SUMMARY:undefined. Однако загрузка календаря через опцию «Добавить в календарь» в меню с тремя точками события работает как положено: имя события используется как для имени файла, так и для заголовка в календаре.
Шаги для воспроизведения
Создайте или откройте тему с событием.
Нажмите на дату события, отображаемую в сообщении, чтобы развернуть модальное окно предпросмотра:
Привет, всем. Для контекста: если нажать на три точки у события, появится опция Добавить в календарь, и она работает. Не знаю, поможет ли это вам разобраться, но похоже, что это уже реализовано в другом месте кода.
редактирование: Конечно, @dax уже об этом сказал, но я не внимательно прочитал!
Сегодня пятница (по крайней мере, где-то ;p), поэтому я отложу слияние до понедельника.
Это изменение крайне масштабное и должно значительно улучшить поддержку формата ICS.
Объединена конвейерная обработка генерации ICS — теперь используется единый механизм как для функции «Добавить в календарь», так и для кликов по датам.
Исправлено множество тонкостей в формате ICS:
Мы передаём RRULE, поэтому при добавлении повторяющегося события в календарь оно будет корректно обработано.
Соблюдены правильные разрывы строк CRLF и общие требования формата ICS.
Добавлена поддержка часовых поясов: при добавлении события в календарь будет указываться правильный часовой пояс, а не UTC. Это обеспечит корректную работу повторяющихся событий.
Расширен формат локальных дат для поддержки опционально закодированных ICS-файлов.
У меня остался открытый вопрос: поддерживать ли RRULE или отказаться от него.
Я понимаю аргументы в пользу обоих вариантов, но сам тоже предпочитаю вариант 1. Мне кажется, что он не только более корректен, но и проще «исправить», если это не то, чего хотел пользователь, поскольку большинство календарных приложений позволяют легко удалить лишние события одним действием (например, Google Календарь):