feat(calendar): add show-unmonitored option (#2547)

* feat(calendar): add show-unmonitored option

* fix: typecheck issue
This commit is contained in:
Meier Lukas
2025-03-09 14:26:31 +01:00
committed by GitHub
parent 2f80c096a7
commit f6f0d7c72b
7 changed files with 23 additions and 3 deletions

View File

@@ -9,7 +9,14 @@ import { createTRPCRouter, publicProcedure } from "../../trpc";
export const calendarRouter = createTRPCRouter({
findAllEvents: publicProcedure
.input(z.object({ year: z.number(), month: z.number(), releaseType: z.array(z.enum(radarrReleaseTypes)) }))
.input(
z.object({
year: z.number(),
month: z.number(),
releaseType: z.array(z.enum(radarrReleaseTypes)),
showUnmonitored: z.boolean(),
}),
)
.unstable_concat(createManyIntegrationMiddleware("query", ...getIntegrationKindsByCategory("calendar")))
.query(async ({ ctx, input }) => {
const results = await Promise.all(

View File

@@ -25,6 +25,7 @@ export const mediaOrganizerJob = createCronJob("mediaOrganizer", EVERY_MINUTE).w
year,
month,
releaseType: options.releaseType,
showUnmonitored: options.showUnmonitored,
});
}

View File

@@ -47,6 +47,7 @@ const optionMapping: OptionMapping = {
releaseType: (oldOptions) => [oldOptions.radarrReleaseType],
filterFutureMonths: () => undefined,
filterPastMonths: () => undefined,
showUnmonitored: ({ showUnmonitored }) => showUnmonitored,
},
clock: {
customTitle: (oldOptions) => oldOptions.customTitle,

View File

@@ -9,13 +9,17 @@ import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-
export const calendarMonthRequestHandler = createCachedIntegrationRequestHandler<
CalendarEvent[],
IntegrationKindByCategory<"calendar">,
{ year: number; month: number; releaseType: RadarrReleaseType[] }
{ year: number; month: number; releaseType: RadarrReleaseType[]; showUnmonitored: boolean }
>({
async requestAsync(integration, input) {
const integrationInstance = await createIntegrationAsync(integration);
const startDate = dayjs().year(input.year).month(input.month).startOf("month");
const endDate = startDate.clone().endOf("month");
return await integrationInstance.getCalendarEventsAsync(startDate.toDate(), endDate.toDate());
return await integrationInstance.getCalendarEventsAsync(
startDate.toDate(),
endDate.toDate(),
input.showUnmonitored,
);
},
cacheDuration: dayjs.duration(1, "minute"),
queryKey: "calendarMonth",

View File

@@ -1434,6 +1434,9 @@
},
"filterFutureMonths": {
"label": "End at"
},
"showUnmonitored": {
"label": "Show unmonitored"
}
}
},

View File

@@ -39,6 +39,7 @@ const FetchCalendar = ({ month, setMonth, isEditMode, integrationIds, options }:
month: month.getMonth(),
year: month.getFullYear(),
releaseType: options.releaseType,
showUnmonitored: options.showUnmonitored,
},
{
refetchOnMount: false,

View File

@@ -26,6 +26,9 @@ export const { definition, componentLoader } = createWidgetDefinition("calendar"
validate: z.number().min(2).max(9999),
defaultValue: 2,
}),
showUnmonitored: factory.switch({
defaultValue: false,
}),
}));
},
supportedIntegrations: getIntegrationKindsByCategory("calendar"),