diff --git a/src/store/sources/emby/driver.ts b/src/store/sources/emby/driver.ts index 11f4e2f..db57a71 100644 --- a/src/store/sources/emby/driver.ts +++ b/src/store/sources/emby/driver.ts @@ -22,6 +22,11 @@ import { StreamOptions, DownloadOptions, DownloadInfo, + EmbyAlbum, + EmbyTrack, + EmbyArtist, + EmbyPlaylist, + EmbyItemsResponse, } from './types'; /** Map the output of `Platform.OS`, so that Emby can understand it. */ @@ -146,22 +151,9 @@ export class EmbyDriver extends SourceDriver { Limit: limit.toString(), }); - const response = await this.fetch<{ Items: Array<{ - Id: string; - Name: string; - ProductionYear?: number; - IsFolder: boolean; - AlbumArtist?: string; - DateCreated?: string; - ArtistItems?: Array<{ - Id: string; - Name: string; - IsFolder: boolean; - }>; - [key: string]: unknown; - }> }>( - `/Users/${this.source.userId}/Items?${queryParams}` - ); + const response = await this.fetch>( + `/Users/${this.source.userId}/Items?${queryParams}` + ); return response.Items.map(item => ({ id: item.Id, @@ -170,8 +162,8 @@ export class EmbyDriver extends SourceDriver { isFolder: item.IsFolder || false, albumArtist: item.AlbumArtist, dateCreated: item.DateCreated ? new Date(item.DateCreated).getTime() : undefined, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], - ...item, + metadataJson: JSON.stringify(item), + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], })); } @@ -179,20 +171,9 @@ export class EmbyDriver extends SourceDriver { * Get a specific album */ async getAlbum(albumId: string): Promise { - const item = await this.fetch<{ - Id: string; - Name: string; - ProductionYear?: number; - IsFolder: boolean; - AlbumArtist?: string; - DateCreated?: string; - ArtistItems?: Array<{ - Id: string; - Name: string; - IsFolder: boolean; - }>; - [key: string]: unknown; - }>(`/Users/${this.source.userId}/Items/${albumId}`); + const item = await this.fetch( + `/Users/${this.source.userId}/Items/${albumId}` + ); return { id: item.Id, @@ -201,8 +182,8 @@ export class EmbyDriver extends SourceDriver { isFolder: item.IsFolder || false, albumArtist: item.AlbumArtist, dateCreated: item.DateCreated ? new Date(item.DateCreated).getTime() : undefined, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], - ...item, + metadataJson: JSON.stringify(item), + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], }; } @@ -221,25 +202,9 @@ export class EmbyDriver extends SourceDriver { Limit: limit.toString(), }); - const response = await this.fetch<{ Items: Array<{ - Id: string; - Name: string; - AlbumId?: string; - Album?: string; - AlbumArtist?: string; - ProductionYear?: number; - IndexNumber?: number; - ParentIndexNumber?: number; - RunTimeTicks?: number; - ArtistItems?: Array<{ - Id: string; - Name: string; - IsFolder: boolean; - }>; - [key: string]: unknown; - }> }>( - `/Users/${this.source.userId}/Items?${queryParams}` - ); + const response = await this.fetch>( + `/Users/${this.source.userId}/Items?${queryParams}` + ); return response.Items.map(item => ({ id: item.Id, @@ -251,8 +216,8 @@ export class EmbyDriver extends SourceDriver { indexNumber: item.IndexNumber, parentIndexNumber: item.ParentIndexNumber, runTimeTicks: item.RunTimeTicks, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], - ...item, + metadataJson: JSON.stringify(item), + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], })); } @@ -359,7 +324,7 @@ export class EmbyDriver extends SourceDriver { indexNumber: item.IndexNumber, parentIndexNumber: item.ParentIndexNumber, runTimeTicks: item.RunTimeTicks, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], ...item, })); } @@ -446,7 +411,7 @@ export class EmbyDriver extends SourceDriver { isFolder: item.IsFolder || false, albumArtist: item.AlbumArtist, dateCreated: item.DateCreated ? new Date(item.DateCreated).getTime() : undefined, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], ...item, })); } @@ -488,7 +453,7 @@ export class EmbyDriver extends SourceDriver { isFolder: item.IsFolder || false, albumArtist: item.AlbumArtist, dateCreated: item.DateCreated ? new Date(item.DateCreated).getTime() : undefined, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], ...item, })); } @@ -536,7 +501,7 @@ export class EmbyDriver extends SourceDriver { indexNumber: item.IndexNumber, parentIndexNumber: item.ParentIndexNumber, runTimeTicks: item.RunTimeTicks, - artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder })) || [], + artistItems: item.ArtistItems?.map(artist => ({ id: artist.Id, name: artist.Name, isFolder: artist.IsFolder, metadataJson: JSON.stringify(artist) })) || [], ...item, })); }