From 6d6750c6654d452af5a557dd1480fc904dafa527 Mon Sep 17 00:00:00 2001 From: Marek Tancak Date: Tue, 9 Jan 2024 19:56:57 +0000 Subject: [PATCH] feat: add availability information about media requests (#1794) --- .../en/modules/media-requests-list.json | 4 +++- src/server/api/routers/media-request.ts | 4 ++++ .../media-requests/MediaRequestListTile.tsx | 24 +++++++++++++++---- .../media-requests/media-request-types.tsx | 9 +++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/public/locales/en/modules/media-requests-list.json b/public/locales/en/modules/media-requests-list.json index b4ebafe71..4bc9bed18 100644 --- a/public/locales/en/modules/media-requests-list.json +++ b/public/locales/en/modules/media-requests-list.json @@ -16,7 +16,9 @@ "state": { "approved": "Approved", "pendingApproval": "Pending approval", - "declined": "Declined" + "declined": "Declined", + "available": "Available", + "partial": "Partial" }, "tooltips": { "approve": "Approve requests", diff --git a/src/server/api/routers/media-request.ts b/src/server/api/routers/media-request.ts index 45a2ff12c..8ced548e8 100644 --- a/src/server/api/routers/media-request.ts +++ b/src/server/api/routers/media-request.ts @@ -62,6 +62,7 @@ export const mediaRequestsRouter = createTRPCRouter({ userRequestCount: item.requestedBy.requestCount, airDate: genericItem.airDate, status: item.status, + availability: item.is4k ? item.media.status4k : item.media.status, backdropPath: `https://image.tmdb.org/t/p/original/${genericItem.backdropPath}`, posterPath: `https://image.tmdb.org/t/p/w600_and_h900_bestv2/${genericItem.posterPath}`, href: `${appUrl}/${item.type}/${item.media.tmdbId}`, @@ -215,6 +216,7 @@ type OverseerrResponseItem = { status: number; createdAt: string; type: 'movie' | 'tv'; + is4k: boolean; rootFolder: string; requestedBy: OverseerrResponseItemUser; media: OverseerrResponseItemMedia; @@ -222,6 +224,8 @@ type OverseerrResponseItem = { type OverseerrResponseItemMedia = { tmdbId: number; + status: number; + status4k: number; }; type OverseerrResponseItemUser = { diff --git a/src/widgets/media-requests/MediaRequestListTile.tsx b/src/widgets/media-requests/MediaRequestListTile.tsx index 48ab9a716..d83e625fc 100644 --- a/src/widgets/media-requests/MediaRequestListTile.tsx +++ b/src/widgets/media-requests/MediaRequestListTile.tsx @@ -24,7 +24,7 @@ import { defineWidget } from '../helper'; import { WidgetLoading } from '../loading'; import { IWidget } from '../widgets'; import { useMediaRequestQuery } from './media-request-query'; -import { MediaRequest, MediaRequestStatus } from './media-request-types'; +import { MediaRequest, MediaRequestAvailability, MediaRequestStatus } from './media-request-types'; const definition = defineWidget({ id: 'media-requests-list', @@ -154,7 +154,10 @@ function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) { {item.airDate && {item.airDate.split('-')[0]}} - + { +const MediaRequestStatusBadge = ({ + status, + availability, +}: { + status: MediaRequestStatus; + availability: MediaRequestAvailability; +}) => { const { t } = useTranslation('modules/media-requests-list'); switch (status) { case MediaRequestStatus.Approved: - return {t('state.approved')}; + switch (availability) { + case MediaRequestAvailability.Available: + return {t('state.available')}; + case MediaRequestAvailability.Partial: + return {t('state.partial')}; + default: + return {t('state.approved')}; + } case MediaRequestStatus.Declined: return {t('state.declined')}; case MediaRequestStatus.PendingApproval: diff --git a/src/widgets/media-requests/media-request-types.tsx b/src/widgets/media-requests/media-request-types.tsx index 4df345a81..e15711bff 100644 --- a/src/widgets/media-requests/media-request-types.tsx +++ b/src/widgets/media-requests/media-request-types.tsx @@ -11,6 +11,7 @@ export type MediaRequest = { userRequestCount: number; airDate?: string; status: MediaRequestStatus; + availability: MediaRequestAvailability; backdropPath: string; posterPath: string; href: string; @@ -30,3 +31,11 @@ export enum MediaRequestStatus { Approved = 2, Declined = 3, } + +export enum MediaRequestAvailability { + Unknown = 1, + Pending = 2, + Processing = 3, + Partial = 4, + Available = 5, +}