좋은 질문입니다, Nathan — 캘린더/이벤트 플러그인의 작은 확장으로, 또는 경량화된 코어 잡으로 구현할 수 있는 최소한의 피드 비종속적 접근 방식이 충분히 가능하다고 생각합니다.
PR이 일반적으로 유용하려면, 핵심은 가져오기(importer)를 피드 전용이 아닌 어댑터 기반으로 만드는 것입니다. 예를 들어 다음과 같은 방식이 가능합니다:
- 각 피드는 ICS 필드를 Discourse 토픽 필드(
title,body,tags,start,end,location등)로 매핑하는 작은 어댑터(Python, YAML, Ruby 등)를 정의합니다. - 코어는 멱등성(
UID↔ 토픽 ID 매핑), 취소(STATUS:CANCELLED), 조용한 편집(Latest를 올리지 않고 업데이트)을 처리합니다. - 플러그인 또는 사이트 설정을 통해 폴링 간격, 태그 매핑, 번(bump) 정책(
always,never,on major change)을 구성할 수 있습니다.
이렇게 하면 소음이 많거나 복잡한 피드(대학 시간표, 강의실 예약, Outlook 캘린더 등)를 가진 기관이 코어에 아무것도 하드코딩하지 않고 자신의 데이터에 맞는 어댑터를 제공할 수 있습니다.
관심이 있으시다면, 그 어댑터 인터페이스를 개요로 정리하거나, 다른 사람들이 기반으로 구축할 수 있는 Ruby 잡 형태의 코어 “ICS 업서트(upsert)” 헬퍼를 프로토타입으로 만들어 볼 수 있습니다. 이를 통해 독립적인 Python 스크립트에서 Discourse 생태계 내에서 유지보수 가능하고 범용적인 것으로 점진적으로 발전시킬 수 있을 것입니다.