Files
reiverr/src/lib/components/MediaManagerModal/SonarrMediaManagerModal.svelte
2024-06-08 16:56:09 +03:00

53 lines
1.6 KiB
Svelte

<script lang="ts">
import { sonarrApi, type SonarrEpisode, type SonarrSeries } from '../../apis/sonarr/sonarr-api';
import MMReleasesTab from './Releases/MMReleasesTab.svelte';
import type { GrabReleaseFn } from './MediaManagerModal';
import { onDestroy } from 'svelte';
import Dialog from '../Dialog/Dialog.svelte';
import type { Release } from '../../apis/combined-types';
import MMSeasonSelectTab from './MMSeasonSelectTab.svelte';
export let season: number | undefined = undefined;
export let sonarrItem: SonarrSeries | SonarrEpisode;
export let onGrabRelease: (release: Release) => void = () => {};
export let modalId: symbol;
export let hidden: boolean;
$: releases = getReleases(season);
let refreshDownloadsTimeout: ReturnType<typeof setTimeout>;
const grabRelease: GrabReleaseFn = (release) =>
sonarrApi.downloadSonarrRelease(release.guid || '', release.indexerId || -1).then((r) => {
onGrabRelease(release);
return r;
});
function getReleases(season?: number) {
if (season) return sonarrApi.getSeasonReleases(sonarrItem.id || -1, season);
else return sonarrApi.getEpisodeReleases(sonarrItem.id || -1);
}
onDestroy(() => {
clearTimeout(refreshDownloadsTimeout);
});
</script>
<Dialog size="full" {modalId} {hidden}>
{#if 'seasons' in sonarrItem && !season}
<MMSeasonSelectTab />
{:else}
<MMReleasesTab {releases} {grabRelease}>
<h1 slot="title">{sonarrItem?.title}</h1>
<h2 slot="subtitle">
{#if season}
Season {season} Releases
{:else if 'episodeNumber' in sonarrItem}
Episode {sonarrItem.episodeNumber} Releases
{/if}
</h2>
</MMReleasesTab>
{/if}
</Dialog>