ICS → Импорт в Discourse

Это хороший вопрос, Натан — и я считаю, что определённо есть место для минималистичного, независимого от формата ленты подхода, который мог бы существовать либо как небольшое расширение плагина «Календарь/События», либо как легковесная основная задача.

Чтобы PR был в целом полезным, ключевым моментом, кажется, является создание импортера на основе адаптеров, а не привязанного к конкретному формату ленты. Что-то вроде:

  • Каждая лента определяет небольшой адаптер (это может быть Python, YAML или Ruby), который сопоставляет поля ICS с полями темы Discourse (title, body, tags, start, end, location и т. д.).
  • Основная часть отвечает за идемпотентность (сопоставление UID с ID темы), отмену (STATUS:CANCELLED) и тихие правки (обновление без поднятия в «Последние»).
  • Плагины или настройки сайта могут настраивать интервал опроса, сопоставление тегов и политику поднятия в «Последние» (always, never, on major change).

Таким образом, учреждения с шумными или сложными лентами (расписания университетов, бронирование помещений, календари Outlook и т. д.) смогут предоставить адаптер, подходящий для их данных, без жесткого кодирования чего-либо в основной части.

Если есть интерес, я с радостью опишу интерфейс такого адаптера или создам прототип основного помощника «ICS upsert» в виде Ruby-задачи, на основе которой другие смогут строить свои решения — чтобы это постепенно эволюционировало от отдельных Python-скриптов к чему-то поддерживаемому и универсальному в экосистеме Discourse.

2 лайка