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; type: 'movie' | 'tvshow' | 'book' | 'music' | 'overseer'; episodetitle?: string; voteAverage?: string; poster?: string; genres: string[]; seasonNumber?: number; plexUrl?: string; episodeNumber?: number; [key: string]: any; } export function OverseerrMediaDisplay(props: any) { const { media }: { media: Result } = props; return ( ); } export function ReadarrMediaDisplay(props: any) { const { media }: { media: any } = props; const { config } = useConfig(); // Find lidarr in services const readarr = config.services.find((service: serviceItem) => service.type === 'Readarr'); // Find a poster CoverType const poster = media.images.find((image: any) => image.coverType === 'cover'); if (!readarr) { return null; } const baseUrl = new URL(readarr.url).origin; // Remove '/' from the end of the lidarr url const fullLink = `${baseUrl}${poster.url}`; // Return a movie poster containting the title and the description return ( ); } export function LidarrMediaDisplay(props: any) { const { media }: { media: any } = props; const { config } = useConfig(); // Find lidarr in services const lidarr = config.services.find((service: serviceItem) => service.type === 'Lidarr'); // Find a poster CoverType const poster = media.images.find((image: any) => image.coverType === 'cover'); if (!lidarr) { return null; } const baseUrl = new URL(lidarr.url).origin; // Remove '/' from the end of the lidarr url const fullLink = poster ? `${baseUrl}${poster.url}` : undefined; // Return a movie poster containting the title and the description return ( ); } export function RadarrMediaDisplay(props: any) { const { media }: { media: any } = props; // Find a poster CoverType return ( image.coverType === 'poster')?.url ?? undefined, voteAverage: media.ratings.tmdb.value.toString() ?? undefined, imdbId: media.imdbId ?? undefined, type: 'movie', }} /> ); } export function SonarrMediaDisplay(props: any) { const { media }: { media: any } = props; // Find a poster CoverType const poster = media.series.images.find((image: any) => image.coverType === 'poster'); // Return a movie poster containting the title and the description 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 || media.mediaUrl) && ( )} {media.imdbId && ( )} {media.type === 'overseer' && ( <> )} ); }