Skip to content

Commit

Permalink
feat: add availability information about media requests (#1794)
Browse files Browse the repository at this point in the history
tancak authored Jan 9, 2024
1 parent 209119f commit 6d6750c
Showing 4 changed files with 36 additions and 5 deletions.
4 changes: 3 additions & 1 deletion public/locales/en/modules/media-requests-list.json
Original file line number Diff line number Diff line change
@@ -16,7 +16,9 @@
"state": {
"approved": "Approved",
"pendingApproval": "Pending approval",
"declined": "Declined"
"declined": "Declined",
"available": "Available",
"partial": "Partial"
},
"tooltips": {
"approve": "Approve requests",
4 changes: 4 additions & 0 deletions src/server/api/routers/media-request.ts
Original file line number Diff line number Diff line change
@@ -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,13 +216,16 @@ type OverseerrResponseItem = {
status: number;
createdAt: string;
type: 'movie' | 'tv';
is4k: boolean;
rootFolder: string;
requestedBy: OverseerrResponseItemUser;
media: OverseerrResponseItemMedia;
};

type OverseerrResponseItemMedia = {
tmdbId: number;
status: number;
status4k: number;
};

type OverseerrResponseItemUser = {
24 changes: 20 additions & 4 deletions src/widgets/media-requests/MediaRequestListTile.tsx
Original file line number Diff line number Diff line change
@@ -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) {
<Stack spacing={0}>
<Group spacing="xs">
{item.airDate && <Text>{item.airDate.split('-')[0]}</Text>}
<MediaRequestStatusBadge status={item.status} />
<MediaRequestStatusBadge
status={item.status}
availability={item.availability}
/>
</Group>
<Anchor
href={item.href}
@@ -245,11 +248,24 @@ function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) {
);
}

const MediaRequestStatusBadge = ({ status }: { status: MediaRequestStatus }) => {
const MediaRequestStatusBadge = ({
status,
availability,
}: {
status: MediaRequestStatus;
availability: MediaRequestAvailability;
}) => {
const { t } = useTranslation('modules/media-requests-list');
switch (status) {
case MediaRequestStatus.Approved:
return <Badge color="green">{t('state.approved')}</Badge>;
switch (availability) {
case MediaRequestAvailability.Available:
return <Badge color="green">{t('state.available')}</Badge>;
case MediaRequestAvailability.Partial:
return <Badge color="yellow">{t('state.partial')}</Badge>;
default:
return <Badge color="violet">{t('state.approved')}</Badge>;
}
case MediaRequestStatus.Declined:
return <Badge color="red">{t('state.declined')}</Badge>;
case MediaRequestStatus.PendingApproval:
9 changes: 9 additions & 0 deletions src/widgets/media-requests/media-request-types.tsx
Original file line number Diff line number Diff line change
@@ -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,
}

0 comments on commit 6d6750c

Please sign in to comment.