这是一个好问题,Nathan——我认为绝对有空间采用一种最小化、与信息源无关的方法,它可以作为 Calendar/Event 插件的一个小扩展,或者作为一个轻量级的核心任务。
要使 PR 普遍有用,关键似乎是将导入器基于适配器而不是特定于信息源。类似这样:
- 每个信息源定义一个小的适配器(可以是 Python、YAML 或 Ruby),它将 ICS 字段映射到 Discourse 主题字段(
title、body、tags、start、end、location等)。 - 核心处理幂等性(
UID↔ 主题 ID 映射)、取消(STATUS:CANCELLED)和静默编辑(更新而不提升 Latest)。 - 插件或站点设置可以配置轮询间隔、标签映射和提升策略(
always、never、on major change)。
这样,拥有嘈杂或复杂信息源(大学课表、房间预订、Outlook 日历等)的机构就可以提供适合其数据的适配器,而无需在核心中硬编码任何内容。
如果有兴趣,我很乐意概述该适配器接口,或将核心“ICS upsert”助手作为 Ruby 作业进行原型设计,供他人在此基础上构建——这样,它就可以从独立的 Python 脚本逐渐演变为 Discourse 生态系统中可维护且通用的东西。