- Dune Part II
+ // Fall 2: Keine echten gerippten Medien vorhanden -> Standby Hero Banner (Keine Fake-Filme!)
+ if (completedJobs.length === 0) {
+ return (
+
+
+
+
+
+
+
+
+ READY FOR DISC
+
+ System Status: Bereit
+
+
+ Rippy Cinema Studio
+
+
+ Automatische Disc-Erkennung aktiv. Lege eine 4K UHD, Blu-ray, DVD oder CD in dein Laufwerk ein.
+
+
+
+
+
+
+
+ Gerippte Discs: 0
+
+
+
+
+ MakeMKV 1:1 Lossless
+
+
+ )
+ }
- {/* Panel 5 */}
-
-

-
-
- Interstellar
-
-
+ // Fall 3: Echte gerippte Titel vorhanden -> Zeige ECHTE gerippte Discs in der Galerie (Maximal 5 echte Jobs)
+ const displayJobs = completedJobs.slice(0, 5)
+ return (
+
+
+
+ ECHTE GERIPPTE MEDIEN ({completedJobs.length})
+
+ Aus deiner Rippy-Datenbank
+
+
+
+ {displayJobs.map((job) => {
+ const poster = posterUrl(job.meta)
+ return (
+
onDetailClick && onDetailClick(job.id)}
+ className="relative rounded-2xl overflow-hidden group cursor-pointer border border-slate-800 hover:border-amber-500/50 transition-all bg-slate-900 aspect-[2/3] flex flex-col justify-end p-3"
+ >
+ {poster ? (
+

+ ) : (
+
+
+ {job.type}
+
+ )}
+
+
+
+
+
+ {job.title || 'Unbekannt'}
+
+
+
+ )
+ })}
)
diff --git a/docker/ui/src/pages/Anleitung.tsx b/docker/ui/src/pages/Anleitung.tsx
index f52f282..84d2d7a 100644
--- a/docker/ui/src/pages/Anleitung.tsx
+++ b/docker/ui/src/pages/Anleitung.tsx
@@ -23,7 +23,7 @@ export default function AnleitungPage() {
const fett = "font-semibold text-slate-900 dark:text-slate-100"
return (
-
+
clearInterval(interval)
}, [])
- const aktiverJob = jobs.find(j => j.status === 'processing' || j.status === 'transcoding') || jobs[0] || null
- const queueJobs = jobs.filter(j => j.id !== aktiverJob?.id && j.status === 'pending')
+ const aktiverJob = jobs.find(j => j.status === 'processing' || j.status === 'transcoding')
+ const queueJobs = jobs.filter(j => j.status === 'pending')
const completedJobs = jobs.filter(j => j.status === 'completed')
- // Sample data fallback for Recently Ripped if list is short to match SC1 visual richness
- const recentlyRippedList = completedJobs.length > 0 ? completedJobs.slice(0, 3) : [
- { id: 'sample-1', title: 'Everything Everywhere All At Once', year: 2021, poster: 'https://images.unsplash.com/photo-1536440136628-849c177e76a1?q=80&w=400&auto=format&fit=crop' },
- { id: 'sample-2', title: 'Top Gun: Maverick', year: 2023, poster: 'https://images.unsplash.com/photo-1517604931442-7e0c8ed2963c?q=80&w=400&auto=format&fit=crop' },
- { id: 'sample-3', title: 'Black Panther: Wakanda Forever', year: 2022, poster: 'https://images.unsplash.com/photo-1626814026160-2237a95fc5a0?q=80&w=400&auto=format&fit=crop' },
- ]
-
if (loading) {
return (
@@ -115,10 +108,15 @@ export default function Dashboard() {
return (
- {/* 1. Top Hero Movie Wall Carousel (Identisch zu SC1 Top Banner) */}
-
+ {/* 1. Top Hero Cinema Showcase (Nur echte API Daten!) */}
+
setDetailJobId(id)}
+ onCancelClick={id => api.post(`/jobs/${id}/cancel`).catch(() => {})}
+ />
- {/* 2. Main 2-Column Grid Layout (Matching SC1 1:1) */}
+ {/* 2. Main 2-Column Grid Layout */}
{/* LEFT COLUMN (lg:col-span-7) */}
@@ -128,14 +126,13 @@ export default function Dashboard() {
-
+
Current Job
{aktiverJob ? (
- {/* Poster Thumbnail */}
{posterUrl(aktiverJob.meta) ? (
- {/* Amber Progress Bar */}
Status: {aktiverJob.status === 'transcoding' ? 'Komprimieren' : 'Extraktion'}
@@ -171,8 +167,8 @@ export default function Dashboard() {
-
Ripping status: {aktiverJob.status === 'transcoding' ? 'HandBrake H.265' : 'MakeMKV Lossless Extraktion'}
-
Disc type: {aktiverJob.type.toUpperCase()} Blu-ray
+
Status: {aktiverJob.status === 'transcoding' ? 'HandBrake H.265' : 'MakeMKV Lossless Extraktion'}
+
Disc typ: {aktiverJob.type.toUpperCase()}
Gerät: {aktiverJob.device} · Gestartet: {new Date(aktiverJob.startTime).toLocaleTimeString('de-DE')}
@@ -185,51 +181,25 @@ export default function Dashboard() {
- {/* Ripping Queue Card */}
+ {/* Ripping Queue Card (NUR ECHTE QUEUED JOBS) */}
- Ripping Queue
+ Ripping Queue ({queueJobs.length})
{queueJobs.length === 0 ? (
-
-
-
- 2.
- The Menu
-
-
Queue 1
-
-
-
- 3.
- Glass Onion
-
-
Queue 2
-
-
-
- 4.
- Babylon
-
-
Queue 3
-
-
-
- 5.
- Avatar: The Way of Water
-
-
Queue 4
-
+
+ Warteschlange ist leer (0 Jobs eingereiht)
) : (
queueJobs.map((j, idx) => (
- {idx + 2}.
+ {idx + 1}.
{j.title || 'Unbekannt'}
+
-
Queue {idx + 1}
+
Wartend
))
)}
@@ -241,48 +211,45 @@ export default function Dashboard() {
{/* RIGHT COLUMN (lg:col-span-5) */}
- {/* Server Status Card with Live Sparkline Graph */}
+ {/* Server Status Card mit Live Sparkline Graph */}
Server Status
-
- {/* Left: Usage Bars */}
-
RAM Usage:
-
6.1GB / 18GB
+
Status:
+
Bereit
- Storage Used:
- 2.1TB / 8TB
+ Speichermounts:
+ {plaetze.length ? `${plaetze[0].frei_gb} GB frei` : 'Aktiv'}
- {/* Right: Live Amber Sparkline Graph */}