diff --git a/src/lib/components/Modal/Modal.ts b/src/lib/components/Modal/Modal.ts index 888cfbb..99c75a0 100644 --- a/src/lib/components/Modal/Modal.ts +++ b/src/lib/components/Modal/Modal.ts @@ -33,7 +33,7 @@ export const modalStack = createModalStack(); export type ModalProps = ReturnType; -export function createModalProps(onClose: () => void) { +export function createModalProps(onClose: () => void, onBack?: () => void) { const id = Symbol(); function close() { @@ -41,8 +41,14 @@ export function createModalProps(onClose: () => void) { modalStack.remove(id); } + function back() { + onBack?.(); + modalStack.remove(id); + } + return { close, + back, id }; } diff --git a/src/lib/components/Modal/ModalHeader.svelte b/src/lib/components/Modal/ModalHeader.svelte index 837844d..aa9f35e 100644 --- a/src/lib/components/Modal/ModalHeader.svelte +++ b/src/lib/components/Modal/ModalHeader.svelte @@ -1,16 +1,33 @@ - + +
- - {#if text} -

{text}

- {/if} + + {#if text} + + {/if} + diff --git a/src/lib/components/RequestModal/EpisodeSelectModal.svelte b/src/lib/components/RequestModal/EpisodeSelectModal.svelte new file mode 100644 index 0000000..eb8fc4a --- /dev/null +++ b/src/lib/components/RequestModal/EpisodeSelectModal.svelte @@ -0,0 +1,60 @@ + + + + + + +
+ {#await fetchEpisodes(sonarrId, seasonNumber)} + Loading... + {:then episodes} + {#if episodes.length === 0} +
No episodes
+ {:else} + {#each episodes as episode} + + +
selectEpisode(episode)} + > +
+
{episode.title}
+
+ {episode.episodeNumber ? `Episode ${episode.episodeNumber}` : 'Special'} +
+
+
+ {new Date(episode.airDate || Date.now()).toLocaleDateString('en', { + year: 'numeric', + month: 'short', + day: 'numeric' + })} +
+
+ {/each} + {/if} + {/await} +
+
+
+
diff --git a/src/lib/components/RequestModal/RequestModal.svelte b/src/lib/components/RequestModal/RequestModal.svelte index 31b127b..5d7b825 100644 --- a/src/lib/components/RequestModal/RequestModal.svelte +++ b/src/lib/components/RequestModal/RequestModal.svelte @@ -1,6 +1,6 @@ + + + + + +
+ {#each sonarrSeries.seasons || [] as season} +
{season.seasonNumber}
+ {/each} +
+
+
+
+ +{console.log(sonarrSeries)} + + diff --git a/src/lib/components/RequestModal/SeriesRequestModal.svelte b/src/lib/components/RequestModal/SeriesRequestModal.svelte index 1c5eedc..baa5663 100644 --- a/src/lib/components/RequestModal/SeriesRequestModal.svelte +++ b/src/lib/components/RequestModal/SeriesRequestModal.svelte @@ -1,100 +1,96 @@ - +
- {#await fetchEpisodes(sonarrId)} - Loading... - {:then seasons} - {#each seasons as episodes, i} -
-
-
- Season {i + 1} -
- -
-
- {#if episodes.length === 0} -
No episodes
- {:else} - {#each episodes as episode} - - -
(selectedEpisode = episode)} - > -
-
{episode.title}
-
- {episode.episodeNumber ? `Episode ${episode.episodeNumber}` : 'Special'} -
-
-
- {new Date(episode.airDate || Date.now()).toLocaleDateString('en', { - year: 'numeric', - month: 'short', - day: 'numeric' - })} -
-
- {/each} - {/if} -
+ {#each [...Array(seasons).keys()].map((i) => i + 1) as seasonNumber} +
+
+ Season {seasonNumber}
- {/each} - {/await} +
+ selectSeasonPack(seasonNumber)} + >Season Packs + selectSeason(seasonNumber)}>Episodes +
+
+ {/each}
-{#if selectedEpisode?.id} - +{#if episodeSelectProps} + +{/if} + +{#if requestProps} + {/if} diff --git a/src/lib/components/ResourceDetails/LibraryDetails.svelte b/src/lib/components/ResourceDetails/LibraryDetails.svelte index a0a08f2..5ff1c3a 100644 --- a/src/lib/components/ResourceDetails/LibraryDetails.svelte +++ b/src/lib/components/ResourceDetails/LibraryDetails.svelte @@ -11,7 +11,8 @@ cancelDownloadSonarrEpisode, deleteSonarrEpisode, getSonarrEpisodes, - removeFromSonarr + removeFromSonarr, + type SonarrSeries } from '$lib/apis/sonarr/sonarrApi'; import Button from '$lib/components/Button.svelte'; import { library } from '$lib/stores/library.store'; @@ -23,6 +24,7 @@ import SeriesRequestModal from '../RequestModal/SeriesRequestModal.svelte'; import { playerState } from '../VideoPlayer/VideoPlayer'; import LibraryDetailsFile from './LibraryDetailsFile.svelte'; + import SeasonSelectModal from '../RequestModal/SeasonSelectModal.svelte'; export let tmdbId: number; export let type: 'movie' | 'tv'; @@ -31,6 +33,7 @@ let isAdded = false; let isRequestModalVisible = false; const requestModalProps = createModalProps(() => (isRequestModalVisible = false)); + let series: SonarrSeries | undefined = undefined; let downloadProps: ComponentProps[] = []; let movieFileProps: ComponentProps[] = []; @@ -148,6 +151,7 @@ isAdded = !!radarrMovie || !!sonarrSeries; servarrId = radarrMovie?.id || sonarrSeries?.id; + series = sonarrSeries; }); let addToServarrLoading = false; @@ -333,8 +337,14 @@ radarrId={servarrId} on:download={() => setTimeout(refetch, 5000)} /> - {:else if isAdded && servarrId && type === 'tv'} - + {:else if isAdded && servarrId && type === 'tv' && series?.statistics?.seasonCount} + {console.log(series)} + + {:else}
NO CONTENT
{console.log('NO CONTENT')} diff --git a/src/lib/components/RoundedButton.svelte b/src/lib/components/RoundedButton.svelte new file mode 100644 index 0000000..b3a1807 --- /dev/null +++ b/src/lib/components/RoundedButton.svelte @@ -0,0 +1,23 @@ + + + + +