From 0a4e82f1618fcc552b9f712ece126d7dbb283e17 Mon Sep 17 00:00:00 2001 From: Denis Papec Date: Wed, 27 Sep 2023 23:19:22 +0100 Subject: [PATCH] Added sonarr events to calendar Signed-off-by: Denis Papec --- src/widgets/calendar/integrations/sonarr.jsx | 36 ++++++++++++++++++++ src/widgets/sonarr/widget.js | 6 +++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/widgets/calendar/integrations/sonarr.jsx diff --git a/src/widgets/calendar/integrations/sonarr.jsx b/src/widgets/calendar/integrations/sonarr.jsx new file mode 100644 index 00000000..6372a199 --- /dev/null +++ b/src/widgets/calendar/integrations/sonarr.jsx @@ -0,0 +1,36 @@ +import { DateTime } from "luxon"; +import { useEffect, useContext } from "react"; + +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import { EventContext } from "../../../utils/contexts/calendar"; +import Error from "../../../components/services/widget/error"; + +export default function Integration({ config, params }) { + const { setEvents } = useContext(EventContext); + const { data: sonarrData, error: sonarrError } = useWidgetAPI(config, "calendar", + { ...params, includeSeries: 'false', includeEpisodeFile: 'false', includeEpisodeImages: 'false', ...config?.params ?? {} } + ); + + useEffect(() => { + if (!sonarrData || sonarrError) { + return; + } + + const eventsToAdd = {}; + + sonarrData?.forEach(event => { + const title = `${event.series.title} - S${event.seasonNumber}E${event.episodeNumber}`; + + eventsToAdd[title] = { + title, + date: DateTime.fromISO(event.airDateUtc), + color: config?.color ?? 'teal' + }; + }) + + setEvents((prevEvents) => ({ ...prevEvents, ...eventsToAdd })); + }, [sonarrData, sonarrError, config, setEvents]); + + const error = sonarrError ?? sonarrData?.error; + return error && +} diff --git a/src/widgets/sonarr/widget.js b/src/widgets/sonarr/widget.js index 7f658eb1..5f393c58 100644 --- a/src/widgets/sonarr/widget.js +++ b/src/widgets/sonarr/widget.js @@ -57,7 +57,11 @@ const widget = { } return 0; }) - } + }, + calendar: { + endpoint: "calendar", + params: ["start", "end", "unmonitored", "includeSeries", "includeEpisodeFile", "includeEpisodeImages"], + }, }, };