それは良い質問ですね、ネイサン。カレンダー/イベントプラグインへの小さな拡張機能として、あるいは軽量なコアジョブとして存在する、フィードに依存しないミニマルなアプローチの余地は間違いなくあると思います。
PRが一般的に役立つためには、インポーターをフィード固有のものではなく、アダプターベースにすることが鍵のようです。例えば:
- 各フィードは、ICSフィールド → Discourseトピックフィールド(
title、body、tags、start、end、locationなど)をマッピングする小さなアダプター(Python、YAML、またはRuby)を定義します。 - コアは、冪等性(
UID↔ トピックIDマッピング)、キャンセル(STATUS:CANCELLED)、およびサイレント編集(更新時に「最新」を更新しない)を処理します。 - プラグインまたはサイト設定で、ポーリング間隔、タグマッピング、および更新ポリシー(
always、never、on major change)を設定できます。
これにより、ノイズが多い、または複雑なフィード(大学の時間割、部屋の予約、Outlookカレンダーなど)を持つ機関は、コアに何もハードコーディングすることなく、データに適したアダプターを提供できます。
関心があれば、そのアダプターインターフェイスの概要を説明したり、他の人が構築できるRubyジョブとしてコアの「ICS upsert」ヘルパーをプロトタイプしたりできます。これにより、スタンドアロンのPythonスクリプトから、Discourseのエコシステム内で保守可能で汎用的なものへと徐々に進化させることができます。