From 1e189d601bec1fb3ddbeeeaae3187facf2b0a5a8 Mon Sep 17 00:00:00 2001 From: Denis Papec Date: Wed, 27 Sep 2023 23:18:22 +0100 Subject: [PATCH] Added readarr events to calendar Signed-off-by: Denis Papec --- src/widgets/calendar/integrations/readarr.jsx | 37 +++++++++++++++++++ src/widgets/readarr/widget.js | 4 ++ 2 files changed, 41 insertions(+) create mode 100644 src/widgets/calendar/integrations/readarr.jsx diff --git a/src/widgets/calendar/integrations/readarr.jsx b/src/widgets/calendar/integrations/readarr.jsx new file mode 100644 index 00000000..1ea77f14 --- /dev/null +++ b/src/widgets/calendar/integrations/readarr.jsx @@ -0,0 +1,37 @@ +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: readarrData, error: readarrError } = useWidgetAPI(config, "calendar", + { ...params, includeAuthor: 'false', ...config?.params ?? {} }, + ); + + useEffect(() => { + if (!readarrData || readarrError) { + return; + } + + const eventsToAdd = {}; + + readarrData?.forEach(event => { + const authorName = event.authorTitle.replace(event.title, ''); + const title = `${authorName} - ${event.title} ${event?.seriesTitle ? `(${event.seriesTitle})` : ''} `; + + eventsToAdd[title] = { + title, + date: DateTime.fromISO(event.releaseDate), + color: config?.color ?? 'rose' + }; + }) + + setEvents((prevEvents) => ({ ...prevEvents, ...eventsToAdd })); + }, [readarrData, readarrError, config, setEvents]); + + const error = readarrError ?? readarrData?.error; + return error && +} diff --git a/src/widgets/readarr/widget.js b/src/widgets/readarr/widget.js index 75a5e817..58cc09c4 100644 --- a/src/widgets/readarr/widget.js +++ b/src/widgets/readarr/widget.js @@ -18,6 +18,10 @@ const widget = { "wanted/missing": { endpoint: "wanted/missing", }, + calendar: { + endpoint: "calendar", + params: ["start", "end", "unmonitored", "includeAuthor"], + }, }, };