diff --git a/src/models/search/AlbumSearchItem.ts b/src/models/search/AlbumSearchItem.ts index a6d7fb8..9216230 100644 --- a/src/models/search/AlbumSearchItem.ts +++ b/src/models/search/AlbumSearchItem.ts @@ -1,4 +1,4 @@ -import { SearchHint as JellyfinSearchHint } from '@jellyfin/sdk/lib/generated-client/models'; +import { BaseItemDto, SearchHint as JellyfinSearchHint } from '@jellyfin/sdk/lib/generated-client/models'; import { Track } from '../music/Track'; import { JellyfinSearchService } from '../../clients/jellyfin/jellyfin.search.service'; @@ -29,6 +29,24 @@ export class AlbumSearchItem extends SearchItem { ); } + static constructFromBaseItem(baseItem: BaseItemDto) { + if (baseItem.Id === undefined || !baseItem.Name || !baseItem.RunTimeTicks) { + throw new Error( + 'Unable to construct search hint from base item, required properties were undefined', + ); + } + var artist = "" + if(baseItem.AlbumArtist) { + artist = baseItem.AlbumArtist + " - " + } + + return new AlbumSearchItem( + baseItem.Id, + trimStringToFixedLength(artist + baseItem.Name, 70), + baseItem.RunTimeTicks / 10000, + ); + } + override async toTracks( searchService: JellyfinSearchService, ): Promise { diff --git a/src/models/search/PlaylistSearchItem.ts b/src/models/search/PlaylistSearchItem.ts index 8a6f1f2..b048c46 100644 --- a/src/models/search/PlaylistSearchItem.ts +++ b/src/models/search/PlaylistSearchItem.ts @@ -1,4 +1,4 @@ -import { SearchHint as JellyfinSearchHint } from '@jellyfin/sdk/lib/generated-client/models'; +import { BaseItemDto, SearchHint as JellyfinSearchHint } from '@jellyfin/sdk/lib/generated-client/models'; import { Track } from '../music/Track'; import { JellyfinSearchService } from '../../clients/jellyfin/jellyfin.search.service'; @@ -25,6 +25,20 @@ export class PlaylistSearchItem extends SearchItem { hint.RunTimeTicks / 10000, ); } + + static constructFromBaseItem(baseItem: BaseItemDto) { + if (baseItem.Id === undefined || !baseItem.Name || !baseItem.RunTimeTicks) { + throw new Error( + 'Unable to construct playlist search hint, required properties were undefined', + ); + } + + return new PlaylistSearchItem( + baseItem.Id, + trimStringToFixedLength(baseItem.Name, 50), + baseItem.RunTimeTicks / 10000, + ); + } override async toTracks( searchService: JellyfinSearchService, diff --git a/src/utils/trackConverter.ts b/src/utils/trackConverter.ts index 06536b0..7f005a4 100644 --- a/src/utils/trackConverter.ts +++ b/src/utils/trackConverter.ts @@ -9,7 +9,7 @@ export const flatMapTrackItems = ( let tracks: Track[] = []; hints.forEach(async (hint) => { const searchedTracks = await hint.toTracks(jellyfinSearchService); - tracks = [...tracks, ...searchedTracks]; + searchedTracks.forEach((track) => tracks.push(track)); }); return tracks; };