mirror of
https://github.com/aleksilassila/reiverr.git
synced 2026-04-26 10:45:12 +02:00
116 lines
4.4 KiB
Svelte
116 lines
4.4 KiB
Svelte
<script lang="ts">
|
|
import type { PageData } from './$types';
|
|
import Card from '../components/Card/Card.svelte';
|
|
import { TMDB_IMAGES } from '$lib/constants.js';
|
|
import CardPlaceholder from '../components/Card/CardPlaceholder.svelte';
|
|
import { formatSize } from '$lib/utils.js';
|
|
export let data: PageData;
|
|
const watched = [];
|
|
|
|
const posterGridStyle = 'flex flex-wrap justify-center gap-x-4 gap-y-8';
|
|
const headerStyle = 'uppercase tracking-widest font-bold text-center mt-2';
|
|
</script>
|
|
|
|
<div class="bg-black pt-24 pb-8 px-8">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 items-center justify-center gap-4">
|
|
<div class="bg-highlight-dim relative w-full m-auto p-3 px-4 rounded-xl overflow-hidden">
|
|
<div class="absolute left-0 inset-y-0 w-[70%] bg-[#ffffff22]" />
|
|
<div class="relative z-[1] flex justify-between items-center">
|
|
<div class="flex flex-col">
|
|
<h3 class="text-zinc-400 font-medium text-xs tracking-wider">Mac-Mini</h3>
|
|
<a href="/" class="text-zinc-200 font-bold text-xl tracking-wide">Radarr</a>
|
|
</div>
|
|
<div class="flex gap-8">
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Movies</h3>
|
|
<div class="font-medium text-sm">30</div>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Space Taken</h3>
|
|
<div class="font-medium text-sm">{formatSize(120_000_000_000)}</div>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Space Left</h3>
|
|
<div class="font-medium text-sm">{formatSize(50_000_000_000)}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="bg-highlight-dim relative w-full m-auto p-3 px-4 rounded-xl overflow-hidden">
|
|
<div class="absolute left-0 inset-y-0 w-[70%] bg-[#ffffff22]" />
|
|
<div class="relative z-[1] flex justify-between items-center">
|
|
<div class="flex flex-col">
|
|
<h3 class="text-zinc-400 font-medium text-xs tracking-wider">Mac-Mini</h3>
|
|
<a href="/" class="text-zinc-200 font-bold text-xl tracking-wide">Sonarr</a>
|
|
</div>
|
|
<div class="flex gap-8">
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Movies</h3>
|
|
<div class="font-medium text-sm">30</div>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Space Taken</h3>
|
|
<div class="font-medium text-sm">{formatSize(120_000_000_000)}</div>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-0.5">
|
|
<h3 class="uppercase text-zinc-400 font-medium text-xs tracking-wider">Space Left</h3>
|
|
<div class="font-medium text-sm">{formatSize(50_000_000_000)}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="py-8 backdrop-blur-2xl bg-darken px-8 flex flex-col gap-4">
|
|
<!-- Contains all the titles available locally, the ones already watched previously (greyed out at the-->
|
|
<!-- bottom), and the ones that are in some sort of watchlist and not available via any source.-->
|
|
|
|
{#await Promise.all( [data.streamed.available, data.streamed.unavailable, data.streamed.downloading] )}
|
|
<div class={posterGridStyle}>
|
|
{#each [...Array(20).keys()] as index (index)}
|
|
<CardPlaceholder {index} />
|
|
{/each}
|
|
</div>
|
|
{:then [available, unavailable, downloading]}
|
|
{#if downloading.length > 0}
|
|
<h1 class={headerStyle}>Downloading</h1>
|
|
<div class={posterGridStyle}>
|
|
{#each downloading as movie (movie.tmdbId)}
|
|
<Card
|
|
{...movie}
|
|
progress={movie.progress}
|
|
progressType="downloading"
|
|
available={false}
|
|
type="download"
|
|
/>
|
|
{/each}
|
|
</div>
|
|
{/if}
|
|
|
|
{#if available.length > 0}
|
|
<h1 class={headerStyle}>Available</h1>
|
|
<div class={posterGridStyle}>
|
|
{#each available as movie (movie.tmdbId)}
|
|
<Card {...movie} randomProgress={false} />
|
|
{/each}
|
|
</div>
|
|
{/if}
|
|
|
|
{#if unavailable.length > 0}
|
|
<h1 class={headerStyle}>Unavailable</h1>
|
|
<div class={posterGridStyle}>
|
|
{#each unavailable as movie (movie.tmdbId)}
|
|
<Card {...movie} available={false} />
|
|
{/each}
|
|
</div>
|
|
{/if}
|
|
|
|
{#if watched.length > 0}
|
|
<h1 class={headerStyle}>Watched</h1>
|
|
{/if}
|
|
{/await}
|
|
</div>
|
|
</div>
|