From cbe9b609738b8137be90b6757d8196cf26a49ff4 Mon Sep 17 00:00:00 2001 From: Eclypsed Date: Sat, 3 Feb 2024 02:47:23 -0500 Subject: [PATCH] How did I ever live without interfaces --- src/app.d.ts | 128 +++++++++++------- src/lib/components/media/mediaCard.svelte | 0 src/lib/components/navbar/navTab.svelte | 3 - src/lib/components/navbar/playlistTab.svelte | 2 +- src/lib/server/users.db | Bin 24576 -> 24576 bytes src/lib/service-managers/jellyfin.ts | 42 ++++++ .../api/users/[userId]/connections/+server.ts | 4 +- .../users/[userId]/recommendations/+server.ts | 34 +++++ src/routes/settings/connections/+page.svelte | 38 +++--- .../connections/jellyfinAuthBox.svelte | 3 +- 10 files changed, 178 insertions(+), 76 deletions(-) create mode 100644 src/lib/components/media/mediaCard.svelte create mode 100644 src/lib/service-managers/jellyfin.ts create mode 100644 src/routes/api/users/[userId]/recommendations/+server.ts diff --git a/src/app.d.ts b/src/app.d.ts index b2bddab..d0bc5e8 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -17,10 +17,8 @@ declare global { password?: string } - type ServiceType = 'jellyfin' | 'youtube-music' - interface Service { - type: ServiceType + type: 'jellyfin' | 'youtube-music' userId: string urlOrigin: string } @@ -32,6 +30,39 @@ declare global { accessToken: string } + interface MediaItem { + connection: Connection + id: string + name: string + duration: number + thumbnail?: string + } + + interface Song extends MediaItem { + artists?: Artist[] + albumId?: string + audio: string + video?: string + releaseDate: string + } + + interface Album extends MediaItem { + artists: Artist[] + songs: Song[] + releaseDate: string + } + + interface Playlist extends MediaItem { + songs: Song[] + description?: string + } + + interface Artist { + id: string + name: string + // Add more here in the future + } + namespace Jellyfin { // The jellyfin API will not always return the data it says it will, for example /Users/AuthenticateByName says it will // retrun the ServerName, it wont. This must be fetched from /System/Info. @@ -61,6 +92,50 @@ declare global { interface System { ServerName: string } + + interface MediaItem { + Name: string + Id: string + RunTimeTicks: number + Type: 'Audio' | 'MusicAlbum' | 'Playlist' + ImageTags?: { + Primary?: string + } + } + + interface Song extends Jellyfin.MediaItem { + ProductionYear: number + Type: 'Audio' + ArtistItems?: { + Name: string + Id: string + }[] + Album?: string + AlbumId?: string + AlbumPrimaryImageTag?: string + AlbumArtists?: { + Name: string + Id: string + }[] + } + + interface Album extends Jellyfin.MediaItem { + ProductionYear: number + Type: 'MusicAlbum' + ArtistItems?: { + Name: string + Id: string + }[] + AlbumArtists?: { + Name: string + Id: string + }[] + } + + interface Playlist extends Jellyfin.MediaItem { + Type: 'Playlist' + ChildCount: number + } } namespace YouTubeMusic { @@ -73,53 +148,6 @@ declare global { service: YTService } } - - interface MediaItem { - connectionId: string - serviceType: string - id: string - name: string - duration: number - thumbnail: string - } - - interface Song extends MediaItem { - artists: { - id: string - name: string - }[] - album?: { - id: string - name: string - artists: { - id: string - name: string - }[] - } - audio: string - video?: string - releaseDate: string - } - - interface Album extends MediaItem { - artists: { - id: string - name: string - }[] - songs: Song[] - releaseDate: string - } - - interface Playlist extends MediaItem { - songs: Song[] - description?: string - } - - interface Artist { - id: string - name: string - // Add more here in the future - } } export {} diff --git a/src/lib/components/media/mediaCard.svelte b/src/lib/components/media/mediaCard.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/components/navbar/navTab.svelte b/src/lib/components/navbar/navTab.svelte index 6b167ed..10566af 100644 --- a/src/lib/components/navbar/navTab.svelte +++ b/src/lib/components/navbar/navTab.svelte @@ -10,11 +10,8 @@ export let disabled = false export let nav: NavTab - import { createEventDispatcher } from 'svelte' import { goto } from '$app/navigation' - const dispatch = createEventDispatcher() - let button: HTMLButtonElement diff --git a/src/lib/components/navbar/playlistTab.svelte b/src/lib/components/navbar/playlistTab.svelte index fff30d2..dc193ee 100644 --- a/src/lib/components/navbar/playlistTab.svelte +++ b/src/lib/components/navbar/playlistTab.svelte @@ -33,7 +33,7 @@