Fix playing albums and playlists (#249)

* Fix retrieving AlbumSearchItem during queueing

* Make convertToTracks actually work
This commit is contained in:
sssionek 2023-11-19 23:18:57 +01:00 committed by GitHub
parent 56b31c19ee
commit 3e84a44e6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 3 deletions

View File

@ -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<Track[]> {

View File

@ -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,

View File

@ -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;
};