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