diff --git a/src/lib/album/AlbumInfoParser.ts b/src/lib/album/AlbumInfoParser.ts index d7a7e30..4c2e0e9 100644 --- a/src/lib/album/AlbumInfoParser.ts +++ b/src/lib/album/AlbumInfoParser.ts @@ -117,12 +117,18 @@ export default class AlbumInfoParser { } if (Array.isArray(extra.trackinfo)) { + const tracksFromBasicInfo = basic.track?.itemListElement as Array; const tracks = extra.trackinfo.map((track: any) => { const trackItem: Omit = { - name: track.title, - duration: track.duration, - streamUrl: track.file?.['mp3-128'] + name: track.title }; + if (track.duration !== undefined) { + trackItem.duration = track.duration; + } + const streamUrl = track.file?.['mp3-128']; + if (streamUrl) { + trackItem.streamUrl = streamUrl; + } if (track.track_num !== undefined) { trackItem.position = track.track_num; } @@ -130,6 +136,13 @@ export default class AlbumInfoParser { if (trackUrl) { trackItem.url = trackUrl; } + else if (trackItem.position !== undefined) { + const trackFromBasic = tracksFromBasicInfo.find((el: any) => el?.position === trackItem.position); + const trackUrlFromBasic = trackFromBasic?.item?.['@id']; + if (trackUrlFromBasic) { + trackItem.url = trackUrlFromBasic; + } + } return trackItem; }) as Track[];