From 7ee56bd6edd73aed0210ee494569379ab1d994e6 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 27 May 2022 00:32:27 +0200 Subject: [PATCH] :sparkles: add default overseer image display --- .../modules/calendar/MediaDisplay.tsx | 23 ++++-- .../overseerr/OverseerrMediaDisplay.tsx | 78 +++++++++++++++++++ src/components/modules/overseerr/example.json | 72 +++++++++++++++++ src/pages/tryoverseerr.tsx | 13 ++++ 4 files changed, 180 insertions(+), 6 deletions(-) create mode 100644 src/components/modules/overseerr/OverseerrMediaDisplay.tsx create mode 100644 src/components/modules/overseerr/example.json create mode 100644 src/pages/tryoverseerr.tsx diff --git a/src/components/modules/calendar/MediaDisplay.tsx b/src/components/modules/calendar/MediaDisplay.tsx index fc707c611..90ef42eef 100644 --- a/src/components/modules/calendar/MediaDisplay.tsx +++ b/src/components/modules/calendar/MediaDisplay.tsx @@ -11,13 +11,15 @@ export interface IMedia { poster?: string; genres: string[]; seasonNumber?: number; + plexUrl?: string; episodeNumber?: number; } - -function MediaDisplay(props: { media: IMedia }) { +export function MediaDisplay( + props: GroupProps & React.RefAttributes & { media: IMedia } +) { const { media }: { media: IMedia } = props; return ( - + {media.poster && ( )} - + {media.title} + {media.plexUrl && ( + + + + + + + + )} {media.imdbId && ( @@ -53,14 +64,14 @@ function MediaDisplay(props: { media: IMedia }) { New release from {media.artist} )} - {media.episodeNumber && media.seasonNumber && ( + {(media.episodeNumber || media.seasonNumber) && ( - Season {media.seasonNumber} episode {media.episodeNumber} + Season {media.seasonNumber} {media.episodeNumber && `episode ${media.episodeNumber}`} )} diff --git a/src/components/modules/overseerr/OverseerrMediaDisplay.tsx b/src/components/modules/overseerr/OverseerrMediaDisplay.tsx new file mode 100644 index 000000000..c9f979b93 --- /dev/null +++ b/src/components/modules/overseerr/OverseerrMediaDisplay.tsx @@ -0,0 +1,78 @@ +import { Card } from '@mantine/core'; +import { MediaDisplay } from '../calendar/MediaDisplay'; + +export interface OverseerrMedia { + id: number; + firstAirDate: string; + genreIds: number[]; + mediaType: string; + name: string; + originCountry: string[]; + originalLanguage: string; + originalName: string; + overview: string; + popularity: number; + voteAverage: number; + voteCount: number; + backdropPath: string; + posterPath: string; + mediaInfo: MediaInfo; +} + +export interface MediaInfo { + downloadStatus: any[]; + downloadStatus4k: any[]; + id: number; + mediaType: string; + tmdbId: number; + tvdbId: number; + imdbId: null; + status: number; + status4k: number; + createdAt: string; + updatedAt: string; + lastSeasonChange: string; + mediaAddedAt: string; + serviceId: number; + serviceId4k: null; + externalServiceId: number; + externalServiceId4k: null; + externalServiceSlug: string; + externalServiceSlug4k: null; + ratingKey: string; + ratingKey4k: null; + seasons: Season[]; + plexUrl: string; + serviceUrl: string; +} + +export interface Season { + id: number; + seasonNumber: number; + status: number; + status4k: number; + createdAt: string; + updatedAt: string; +} + +export default function OverseerrMediaDisplay(props: any) { + const { media }: { media: OverseerrMedia } = props; + return ( + + + + ); +} diff --git a/src/components/modules/overseerr/example.json b/src/components/modules/overseerr/example.json new file mode 100644 index 000000000..d9f35cad6 --- /dev/null +++ b/src/components/modules/overseerr/example.json @@ -0,0 +1,72 @@ +{ + "id": 86831, + "firstAirDate": "2019-03-15", + "genreIds": [ + 16, + 10765 + ], + "mediaType": "tv", + "name": "Love, Death & Robots", + "originCountry": [ + "US" + ], + "originalLanguage": "en", + "originalName": "Love, Death & Robots", + "overview": "Terrifying creatures, wicked surprises and dark comedy converge in this NSFW anthology of animated stories presented by Tim Miller and David Fincher.", + "popularity": 623.833, + "voteAverage": 8.2, + "voteCount": 1720, + "backdropPath": "/78NtUwwo3lhH7QGh4vG3U1qK1mc.jpg", + "posterPath": "/cRiDlzzZC5lL7fvImuSjs04SUIJ.jpg", + "mediaInfo": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 79, + "mediaType": "tv", + "tmdbId": 86831, + "tvdbId": 357888, + "imdbId": null, + "status": 4, + "status4k": 1, + "createdAt": "2022-02-05T04:30:01.000Z", + "updatedAt": "2022-02-05T09:25:22.000Z", + "lastSeasonChange": "2022-02-05T04:30:01.000Z", + "mediaAddedAt": "2022-02-04T01:16:35.000Z", + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 7, + "externalServiceId4k": null, + "externalServiceSlug": "love-death-and-robots", + "externalServiceSlug4k": null, + "ratingKey": "182", + "ratingKey4k": null, + "seasons": [ + { + "id": 11, + "seasonNumber": 1, + "status": 1, + "status4k": 1, + "createdAt": "2022-02-05T04:30:01.000Z", + "updatedAt": "2022-02-05T04:30:01.000Z" + }, + { + "id": 24, + "seasonNumber": 2, + "status": 5, + "status4k": 1, + "createdAt": "2022-02-05T04:30:01.000Z", + "updatedAt": "2022-02-05T04:30:01.000Z" + }, + { + "id": 85, + "seasonNumber": 3, + "status": 3, + "status4k": 1, + "createdAt": "2022-04-26T04:30:02.000Z", + "updatedAt": "2022-04-26T04:30:02.000Z" + } + ], + "plexUrl": "https://app.plex.tv/desktop#!/server/5b88b3c20d2d092c0ee848f9044f3f3bee033d91/details?key=%2Flibrary%2Fmetadata%2F182", + "serviceUrl": "http://server:8989/series/love-death-and-robots" + } +} \ No newline at end of file diff --git a/src/pages/tryoverseerr.tsx b/src/pages/tryoverseerr.tsx new file mode 100644 index 000000000..dbe9ebdce --- /dev/null +++ b/src/pages/tryoverseerr.tsx @@ -0,0 +1,13 @@ +import { Group, Title } from '@mantine/core'; +import OverseerrMediaDisplay, { + OverseerrMedia, +} from '../components/modules/overseerr/OverseerrMediaDisplay'; +import media from '../components/modules/overseerr/example.json'; + +export default function TryOverseerr() { + return ( + + + + ); +}