diff --git a/src/modules/common/MediaDisplay.tsx b/src/modules/common/MediaDisplay.tsx
index e2d2ab78c..2de1707b0 100644
--- a/src/modules/common/MediaDisplay.tsx
+++ b/src/modules/common/MediaDisplay.tsx
@@ -1,26 +1,18 @@
-import {
- Image,
- Group,
- Title,
- Badge,
- Text,
- ActionIcon,
- Anchor,
- ScrollArea,
- createStyles,
- Stack,
- Button,
-} from '@mantine/core';
-import { useMediaQuery } from '@mantine/hooks';
-import { IconLink } from '@tabler/icons';
+import { Badge, Button, Group, Image, Stack, Text, Title } from '@mantine/core';
+import { IconDownload, IconExternalLink, IconPlayerPlay } from '@tabler/icons';
+import { useState } from 'react';
import { useConfig } from '../../tools/state';
import { serviceItem } from '../../tools/types';
+import { RequestModal } from '../overseerr/RequestModal';
+import { Result } from '../overseerr/SearchResult';
export interface IMedia {
overview: string;
imdbId?: any;
artist?: string;
- title: string;
+ title?: string;
+ type: 'movie' | 'tvshow' | 'book' | 'music' | 'overseer';
+ episodetitle?: string;
voteAverage?: string;
poster?: string;
genres: string[];
@@ -30,83 +22,24 @@ export interface IMedia {
[key: string]: any;
}
-const useStyles = createStyles((theme) => ({
- overview: {
- [theme.fn.largerThan('sm')]: {
- width: 400,
- },
- },
-}));
-
-export function MediaDisplay(props: { media: IMedia }) {
- const { media }: { media: IMedia } = props;
- const { classes, cx } = useStyles();
- const phone = useMediaQuery('(min-width: 800px)');
+export function OverseerrMediaDisplay(props: any) {
+ const { media }: { media: Result } = props;
return (
-
-
- {media.poster && (
-
- )}
-
-
- {media.title}
- {media.artist && New release from {media.artist}}
- {(media.episodeNumber || media.seasonNumber) && (
-
- Season {media.seasonNumber}{' '}
- {media.episodeNumber && `episode ${media.episodeNumber}`}
-
- )}
-
- {media.voteAverage && (
-
- )}
- {media.imdbId && (
-
-
-
-
-
- )}
-
-
- {media.overview}
-
- {media.genres.slice(-5).map((genre: string, i: number) => (
-
- {genre}
-
- ))}
-
-
-
-
+
);
}
@@ -127,11 +60,14 @@ export function ReadarrMediaDisplay(props: any) {
return (
);
@@ -154,6 +90,7 @@ export function LidarrMediaDisplay(props: any) {
return (
image.coverType === 'poster');
- // Return a movie poster containting the title and the description
return (
image.coverType === 'poster')?.url ?? undefined,
+ voteAverage: media.ratings.tmdb.value.toString() ?? undefined,
+ imdbId: media.imdbId ?? undefined,
+ type: 'movie',
}}
/>
);
@@ -190,14 +128,106 @@ export function SonarrMediaDisplay(props: any) {
return (
);
}
+
+export function MediaDisplay({ media }: { media: IMedia }) {
+ const [opened, setOpened] = useState(false);
+ return (
+
+
+
+
+
+ {media.title}
+
+
+ {media.type === 'tvshow' && (
+
+ s{media.seasonNumber}e{media.episodeNumber} - {media.episodetitle}
+
+ )}
+ {media.type === 'music' && (
+
+ {media.artist}
+
+ )}
+ {media.type === 'movie' && (
+
+ Radarr
+
+ )}
+ {media.type === 'book' && (
+
+ Readarr
+
+ )}
+ {media.genres.slice(0, 2).map((genre) => (
+
+ {genre}
+
+ ))}
+
+
+ {media.overview}
+
+
+
+ {media.plexUrl && (
+ }
+ >
+ Play
+
+ )}
+ {media.imdbId && (
+ }
+ >
+ IMDb
+
+ )}
+ {media.type === 'overseer' && (
+ <>
+
+
+ >
+ )}
+
+
+
+ );
+}
diff --git a/src/modules/overseerr/OverseerrMediaDisplay.tsx b/src/modules/overseerr/OverseerrMediaDisplay.tsx
deleted file mode 100644
index 2e160030f..000000000
--- a/src/modules/overseerr/OverseerrMediaDisplay.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { MediaDisplay } from '../common';
-import { Result } from './SearchResult';
-
-export default function OverseerrMediaDisplay(props: any) {
- const { media }: { media: Result } = props;
- return (
-
- );
-}
diff --git a/src/modules/overseerr/OverseerrModule.tsx b/src/modules/overseerr/OverseerrModule.tsx
index 9ba95c6d7..4f8e44802 100644
--- a/src/modules/overseerr/OverseerrModule.tsx
+++ b/src/modules/overseerr/OverseerrModule.tsx
@@ -1,6 +1,6 @@
import { IconEyeglass } from '@tabler/icons';
+import { OverseerrMediaDisplay } from '../common';
import { IModule } from '../ModuleTypes';
-import OverseerrMediaDisplay from './OverseerrMediaDisplay';
export const OverseerrModule: IModule = {
title: 'Overseerr',