"use client"; import { usePoll } from "@/lib/use-poll"; import { JellyfinCard } from "@/components/jellyfin-card"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { StatusBadge } from "@/components/status-badge"; interface QueueItem { title: string; status: string; size?: string; timeleft?: string; progress?: number; } interface SonarrQueueItem { title: string; status: string; sizeleft?: string; timeleft?: string; } interface RadarrQueueItem { title: string; status: string; sizeleft?: string; timeleft?: string; } interface SabQueue { slots: QueueItem[]; speed: string; paused: boolean; } export default function MediaPage() { const { data: sonarrRaw } = usePoll>("/api/sonarr/queue", 30000); const { data: radarrRaw } = usePoll>("/api/radarr/queue", 30000); const { data: sabRaw } = usePoll>("/api/sabnzbd/queue", 30000); const sonarr = (sonarrRaw?.records ?? sonarrRaw?.items ?? []) as SonarrQueueItem[]; const radarr = (radarrRaw?.records ?? radarrRaw?.items ?? []) as RadarrQueueItem[]; const sab = sabRaw?.queue as SabQueue | undefined; return (

Media

{/* Sonarr Queue */} Sonarr Queue {!sonarr ? (

Loading...

) : sonarr.length === 0 ? (

Queue empty

) : (
{sonarr.map((item, i) => (

{item.title}

{item.timeleft && ( {item.timeleft} )}
))}
)}
{/* Radarr Queue */} Radarr Queue {!radarr ? (

Loading...

) : radarr.length === 0 ? (

Queue empty

) : (
{radarr.map((item, i) => (

{item.title}

{item.timeleft && ( {item.timeleft} )}
))}
)}
{/* SABnzbd Queue */} SABnzbd Queue {sab && ( )} {!sab ? (

Loading...

) : sab.slots.length === 0 ? (

Queue empty

) : (
{sab.slots.map((item, i) => (

{item.title}

{item.timeleft && ( {item.timeleft} )}
{item.progress != null && (
)}
))}
)}
); }