34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import type { IntegrationKindByCategory } from "@homarr/definitions";
|
|
import { createIntegrationAsync } from "@homarr/integrations";
|
|
import type { IMediaOrganizerIntegration, MissingMediaItem, QueuedMediaItem } from "@homarr/integrations/types";
|
|
|
|
import { createIntegrationRequestHandler } from "./lib/integration-request-handler";
|
|
|
|
interface MediaOrganizerData {
|
|
missing: MissingMediaItem[];
|
|
missingCount: number;
|
|
queued: QueuedMediaItem[];
|
|
queuedCount: number;
|
|
}
|
|
|
|
export const mediaOrganizerRequestHandler = createIntegrationRequestHandler<
|
|
MediaOrganizerData,
|
|
IntegrationKindByCategory<"mediaOrganizer">,
|
|
{ pageSize: number }
|
|
>({
|
|
async requestAsync(integration, input) {
|
|
const integrationInstance = (await createIntegrationAsync(integration)) as unknown as IMediaOrganizerIntegration;
|
|
const [missingResult, queueResult] = await Promise.all([
|
|
integrationInstance.getMissingAsync(input.pageSize),
|
|
integrationInstance.getMediaQueueAsync(input.pageSize),
|
|
]);
|
|
return {
|
|
missing: missingResult.items,
|
|
missingCount: missingResult.totalCount,
|
|
queued: queueResult.items,
|
|
queuedCount: queueResult.totalCount,
|
|
};
|
|
},
|
|
cacheTtlMs: 60_000,
|
|
});
|