📅 Supporta il feed iCal in Discourse Calendar Plugin (Importa da URL .ics)

@Ethsim2 Questa sarebbe una funzionalità enorme e ho approfondito la fattibilità ora che Discourse sta passando a FullCalendar.

@sam ha recentemente collegato direttamente a fullcalendar.io, e si scopre che FullCalendar ora ha un supporto di prima classe per i feed .ics tramite il suo sistema di plugin ufficiale, quindi il lavoro più pesante è già svolto dalla libreria.


:rocket: Proposta: Abilitare la sincronizzazione dei feed .ics utilizzando il supporto nativo di FullCalendar

Con l’imminente integrazione di FullCalendar v6 in Discourse, le basi sono pronte per supportare questa funzionalità in modo nativo.

Il plugin di FullCalendar @fullcalendar/icalendar (con ical.js sotto il cofano) consente di caricare feed .ics pubblici in questo modo:

new Calendar(calendarEl, {
  plugins: [dayGridPlugin, iCalendarPlugin],
  events: {
    url: 'https://example.com/my-calendar.ics',
    format: 'ics'
  }
});

Tutto ciò che serve per visualizzare un feed iCal remoto nell’interfaccia utente del calendario: nessuna analisi personalizzata, solo plug-and-play.


:hammer_and_wrench: Passaggi di implementazione suggeriti per Discourse

  1. Aggiungere @fullcalendar/icalendar e ical.js al plugin (una volta che FullCalendar v6 sarà completamente integrato).
  2. Aggiungere un’impostazione admin/plugin (o un’opzione per categoria) per inserire uno o più URL .ics.
  3. Sul lato client, visualizzare il feed nella vista calendario.
  4. (Opzionale) Implementare la sincronizzazione lato server che:
    • Recupera periodicamente il feed
    • Analizza eventi nuovi/aggiornati
    • Crea o aggiorna argomenti Discourse associati

:counterclockwise_arrows_button: Frequenza di sincronizzazione

È importante notare che la gestione predefinita dei .ics di FullCalendar recupera il feed solo al caricamento iniziale del calendario nel browser. Ciò significa:

  • Non c’è un aggiornamento giornaliero o automatico.
  • Gli utenti vedranno una copia obsoleta a meno che non ricarichino o attivino manualmente un aggiornamento.
  • Non c’è persistenza: se un utente naviga altrove, i dati del feed vengono persi.

Per rendere questa funzionalità veramente utile, Discourse dovrebbe idealmente:

  • Eseguire un job Sidekiq giornaliero (o pianificato) che recupera il feed lato server.
  • Memorizzare nella cache gli eventi analizzati per una visualizzazione coerente tra gli utenti.
  • Collegare facoltativamente gli eventi agli argomenti o crearne di nuovi per una piena integrazione.

Ciò consentirebbe un comportamento di sincronizzazione corretto e riporterebbe in vita una funzionalità chiave precedentemente gestita dal plugin di Angus, ma utilizzando una base pulita e manutenibile.


:white_check_mark: Vantaggi

  • Integra perfettamente i feed .ics da Google Calendar, Outlook, iCal, ecc.
  • Rende Discourse un consumatore di calendari, non solo un esportatore.
  • Ottimo per forum comunitari, gruppi di studenti, eventi civici, ecc.
  • Costruito interamente su funzionalità FullCalendar supportate: JavaScript personalizzato minimo necessario.

Mi piacerebbe vedere questa funzionalità implementata ora che il plugin del calendario sta ricevendo nuovamente attenzione. Sono felice di aiutare a testarla o a contribuire a una proof-of-concept.