diff --git a/src/Container.svelte b/src/Container.svelte index b3f0044..d90d2b6 100644 --- a/src/Container.svelte +++ b/src/Container.svelte @@ -7,6 +7,7 @@ export let direction: 'vertical' | 'horizontal' | 'grid' = 'vertical'; export let gridCols: number = 0; export let focusOnMount = false; + export let canFocusEmpty = true; export let trapFocus = false; export let debugOutline = false; export let revealStrategy: RevealStrategy | undefined = undefined; @@ -23,6 +24,7 @@ .setRevealStrategy(revealStrategy) .setChildrenRevealStrategy(childrenRevealStrategy) .setTrapFocus(trapFocus) + .setCanFocusEmpty(canFocusEmpty) .getStores(); export const container = rest.container; export const hasFocus = rest.hasFocus; diff --git a/src/lib/apis/radarr/radarr-api.ts b/src/lib/apis/radarr/radarr-api.ts index 8bd6eea..e91cf11 100644 --- a/src/lib/apis/radarr/radarr-api.ts +++ b/src/lib/apis/radarr/radarr-api.ts @@ -11,8 +11,9 @@ import type { Api } from '../api.interface'; export type RadarrMovie = components['schemas']['MovieResource']; export type MovieFileResource = components['schemas']['MovieFileResource']; export type RadarrRelease = components['schemas']['ReleaseResource']; -export type RadarrDownload = components['schemas']['QueueResource'] & { movie: RadarrMovie }; +export type MovieDownload = components['schemas']['QueueResource'] & { movie: RadarrMovie }; export type DiskSpaceInfo = components['schemas']['DiskSpaceResource']; +export type MovieHistoryResource = components['schemas']['HistoryResource']; export interface RadarrMovieOptions { title: string; @@ -116,11 +117,22 @@ export class RadarrApi implements Api { return !!deleteResponse?.response.ok; }; - fetchRadarrReleases = (movieId: number): Promise => + getReleases = (movieId: number): Promise => this.getClient() ?.GET('/api/v3/release', { params: { query: { movieId: movieId } } }) .then((r) => r.data || []) || Promise.resolve([]); + getReleaseHistory = (movieId: number): Promise => + this.getClient() + ?.GET('/api/v3/history/movie', { + params: { + query: { + movieId + } + } + }) + .then((r) => r.data || []) || Promise.resolve([]); + downloadRadarrMovie = (guid: string, indexerId: number) => this.getClient() ?.POST('/api/v3/release', { @@ -153,7 +165,7 @@ export class RadarrApi implements Api { }) .then((res) => res.response.ok) || Promise.resolve(false); - getRadarrDownloads = (): Promise => + getRadarrDownloads = (): Promise => this.getClient() ?.GET('/api/v3/queue', { params: { @@ -162,7 +174,7 @@ export class RadarrApi implements Api { } } }) - .then((r) => (r.data?.records?.filter((record) => record.movie) as RadarrDownload[]) || []) || + .then((r) => (r.data?.records?.filter((record) => record.movie) as MovieDownload[]) || []) || Promise.resolve([]); getRadarrDownloadsById = (radarrId: number) => diff --git a/src/lib/components-old/VideoPlayer/VideoPlayer.ts b/src/lib/components-old/VideoPlayer/VideoPlayer.ts index 2b4b9a9..5d7a300 100644 --- a/src/lib/components-old/VideoPlayer/VideoPlayer.ts +++ b/src/lib/components-old/VideoPlayer/VideoPlayer.ts @@ -17,7 +17,7 @@ function createPlayerState() { }, close: () => { store.set({ visible: false, jellyfinId: '' }); - jellyfinItemsStore.refresh(); + jellyfinItemsStore.send(); } }; } diff --git a/src/lib/components/ManageMedia/DownloadsList.svelte b/src/lib/components/ManageMedia/DownloadsList.svelte new file mode 100644 index 0000000..99db1b1 --- /dev/null +++ b/src/lib/components/ManageMedia/DownloadsList.svelte @@ -0,0 +1,48 @@ + + +
+ {#await downloads} + {#each new Array(5) as _, index} +
+ +
+ {/each} + {:then downloads} + {#each downloads as download, index} + + {:else} +

No downloads found

+ {/each} + {/await} +
diff --git a/src/lib/components/ManageMedia/FullScreenModal.svelte b/src/lib/components/ManageMedia/FullScreenModal.svelte deleted file mode 100644 index 4436c08..0000000 --- a/src/lib/components/ManageMedia/FullScreenModal.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - { - modalStack.close(modalId); - return true; - } - }} - focusOnMount - trapFocus - class="fixed inset-0 bg-stone-950/80" -> - - diff --git a/src/lib/components/ManageMedia/FullScreenModalContainer.svelte b/src/lib/components/ManageMedia/FullScreenModalContainer.svelte deleted file mode 100644 index 0cdb34f..0000000 --- a/src/lib/components/ManageMedia/FullScreenModalContainer.svelte +++ /dev/null @@ -1,6 +0,0 @@ -
-

- Header is missing -

- Content is missing -
diff --git a/src/lib/components/ManageMedia/LocalFiles/FileActionsList.svelte b/src/lib/components/ManageMedia/LocalFiles/FileActionsList.svelte deleted file mode 100644 index b394899..0000000 --- a/src/lib/components/ManageMedia/LocalFiles/FileActionsList.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
- -
diff --git a/src/lib/components/ManageMedia/LocalFiles/FileActionsModal.svelte b/src/lib/components/ManageMedia/LocalFiles/FileActionsModal.svelte new file mode 100644 index 0000000..72848a8 --- /dev/null +++ b/src/lib/components/ManageMedia/LocalFiles/FileActionsModal.svelte @@ -0,0 +1,30 @@ + + + + +
+

+ {file.relativePath} +

+

{formatSize(file.size || 0)}

+
+ +
+ +
+
+
+
diff --git a/src/lib/components/ManageMedia/LocalFiles/FilesList.svelte b/src/lib/components/ManageMedia/LocalFiles/FilesList.svelte index a9bec84..01ee4af 100644 --- a/src/lib/components/ManageMedia/LocalFiles/FilesList.svelte +++ b/src/lib/components/ManageMedia/LocalFiles/FilesList.svelte @@ -1,28 +1,42 @@
- {#if $isLoading} + {#await files} {#each new Array(5) as _, index}
{/each} - {:else if $files} - {#each $files as file, index} - + {:else} +
No local files found
{/each} - {/if} + {/await}
diff --git a/src/lib/components/ManageMedia/LocalFiles/ManageFilesModal.svelte b/src/lib/components/ManageMedia/LocalFiles/ManageFilesModal.svelte deleted file mode 100644 index f32b6a0..0000000 --- a/src/lib/components/ManageMedia/LocalFiles/ManageFilesModal.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - - - {#if !selectedFile} - -

Local Files

- - - -
- {:else} - -
-

- {selectedFile.relativePath} -

-

{formatSize(selectedFile.size || 0)}

-
- - - -
- {/if} -
diff --git a/src/lib/components/ManageMedia/ManageMediaMenuLayout.svelte b/src/lib/components/ManageMedia/ManageMediaMenuLayout.svelte new file mode 100644 index 0000000..f53fc7f --- /dev/null +++ b/src/lib/components/ManageMedia/ManageMediaMenuLayout.svelte @@ -0,0 +1,10 @@ + + + +

+ Header is missing +

+ Content is missing +
diff --git a/src/lib/components/ManageMedia/ManageMediaModal.svelte b/src/lib/components/ManageMedia/ManageMediaModal.svelte new file mode 100644 index 0000000..5264846 --- /dev/null +++ b/src/lib/components/ManageMedia/ManageMediaModal.svelte @@ -0,0 +1,94 @@ + + + + +

Download

+ +
+ +

Local Files

+ +
+ +

Downloads

+ +
+
diff --git a/src/lib/components/ManageMedia/Releases/ReleaseActionsModal.svelte b/src/lib/components/ManageMedia/Releases/ReleaseActionsModal.svelte new file mode 100644 index 0000000..8b8f928 --- /dev/null +++ b/src/lib/components/ManageMedia/Releases/ReleaseActionsModal.svelte @@ -0,0 +1,56 @@ + + + + +
+

+ {release.title} +

+

{formatSize(release.size || 0)}

+
+ +
+ +
+
+
+
diff --git a/src/lib/components/ManageMedia/Releases/ReleaseList.svelte b/src/lib/components/ManageMedia/Releases/ReleaseList.svelte new file mode 100644 index 0000000..af34b62 --- /dev/null +++ b/src/lib/components/ManageMedia/Releases/ReleaseList.svelte @@ -0,0 +1,178 @@ + + +
+ {#if $isLoading} + {#each new Array(5) as _, index} +
+ +
+ {/each} + {:else} + {#each (showAll ? $releases : $filteredReleases)?.filter((r) => r.guid && r.indexerId) || [] as release, index} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {/each} + {#if !showAll && $releases?.length} +
+ +
+ {:else if showAll} +
+ +
+ {/if} + {/if} +
diff --git a/src/lib/components/ManageMedia/RequestMedia/RadarrRequestModal.svelte b/src/lib/components/ManageMedia/RequestMedia/RadarrRequestModal.svelte deleted file mode 100644 index b549aec..0000000 --- a/src/lib/components/ManageMedia/RequestMedia/RadarrRequestModal.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - -

Download

- - - -
-
diff --git a/src/lib/components/ManageMedia/RequestMedia/ReleaseList.svelte b/src/lib/components/ManageMedia/RequestMedia/ReleaseList.svelte deleted file mode 100644 index 94ec0a1..0000000 --- a/src/lib/components/ManageMedia/RequestMedia/ReleaseList.svelte +++ /dev/null @@ -1,136 +0,0 @@ - - -
- {#if $isLoading} - {#each new Array(5) as _, index} -
- -
- {/each} - {:else} - {#each (showAll ? $releases : $filteredReleases)?.filter((r) => r.guid && r.indexerId) || [] as release, index} - {@const isFetching = isFetchingGrab[release.guid || ''] || false} - {@const isGrabbed = grabbedReleases[release.guid || ''] || false} -
- -
- {/each} - {#if !showAll && $releases?.length} -
- -
- {:else if showAll} -
- -
- {/if} - {/if} -
diff --git a/src/lib/components/Modal/FullScreenModal.svelte b/src/lib/components/Modal/FullScreenModal.svelte new file mode 100644 index 0000000..d9219f7 --- /dev/null +++ b/src/lib/components/Modal/FullScreenModal.svelte @@ -0,0 +1,26 @@ + + + { + modalStack.close(modalId); + return true; + } + }} + focusOnMount + trapFocus + class={classNames('fixed inset-0 bg-stone-950/80 overflow-auto', { + 'opacity-0': hidden + })} +> +
+ +
+
diff --git a/src/lib/components/Modal/modal.store.ts b/src/lib/components/Modal/modal.store.ts index 37881eb..f20a45e 100644 --- a/src/lib/components/Modal/modal.store.ts +++ b/src/lib/components/Modal/modal.store.ts @@ -1,3 +1,4 @@ +import type { ComponentType, SvelteComponentTyped } from 'svelte'; import { derived, writable } from 'svelte/store'; type ModalItem = { @@ -18,9 +19,9 @@ function createModalStack() { items.update((prev) => prev.filter((i) => i.group !== group)); } - function create( - component: ConstructorOfATypedSvelteComponent, - props: Record, + function create

>( + component: ComponentType>, + props: Omit, group: symbol | undefined = undefined ) { const id = Symbol(); diff --git a/src/lib/components/VideoPlayer/VideoPlayer.ts b/src/lib/components/VideoPlayer/VideoPlayer.ts index 07baeb5..7f44ba7 100644 --- a/src/lib/components/VideoPlayer/VideoPlayer.ts +++ b/src/lib/components/VideoPlayer/VideoPlayer.ts @@ -17,7 +17,7 @@ function createPlayerState() { }, close: () => { store.set({ visible: false, jellyfinId: '' }); - jellyfinItemsStore.refresh(); + jellyfinItemsStore.send(); } }; } diff --git a/src/lib/components/VideoPlayer/VideoPlayerModal.svelte b/src/lib/components/VideoPlayer/VideoPlayerModal.svelte index 5af041e..d885655 100644 --- a/src/lib/components/VideoPlayer/VideoPlayerModal.svelte +++ b/src/lib/components/VideoPlayer/VideoPlayerModal.svelte @@ -1,5 +1,5 @@