diff --git a/app/models/music.ts b/app/models/music.ts index 7bb94d4..d4e5fb8 100644 --- a/app/models/music.ts +++ b/app/models/music.ts @@ -59,6 +59,7 @@ export interface Song { artistId?: string title: string track?: number + discNumber?: number duration?: number starred?: Date diff --git a/app/screens/SongListView.tsx b/app/screens/SongListView.tsx index b8c29ca..422ca5e 100644 --- a/app/screens/SongListView.tsx +++ b/app/screens/SongListView.tsx @@ -37,9 +37,15 @@ const Songs = React.memo<{ if (type === 'album') { typeName = 'Album' - _songs - .sort((a, b) => a.title.localeCompare(b.title)) // - .sort((a, b) => (a.track || 0) - (b.track || 0)) + if (_songs.some(s => s.track === undefined)) { + _songs.sort((a, b) => a.title.localeCompare(b.title)) + } else { + _songs.sort((a, b) => { + const aVal = (a.track as number) + (a.discNumber !== undefined ? a.discNumber * 10000 : 0) + const bVal = (b.track as number) + (b.discNumber !== undefined ? b.discNumber * 10000 : 0) + return aVal - bVal + }) + } } else { typeName = 'Playlist' } @@ -62,8 +68,8 @@ const Songs = React.memo<{ contextId={itemId} queueId={i} subtitle={s.artist} - onPress={() => setQueue(songs, name, type, itemId, i)} - showArt={type === 'playlist'} + onPress={() => setQueue(_songs, name, type, itemId, i)} + showArt={false} /> ))} @@ -86,9 +92,11 @@ const SongListDetails = React.memo<{ return ( - {songList.itemType === 'album' && ( - - )} + , get: GetState): artistId: child.artistId, title: child.title, track: child.track, + discNumber: child.discNumber, duration: child.duration, starred: child.starred, coverArt: coverArt || (await get().getAlbumCoverArt(child.albumId)), diff --git a/app/state/trackplayer.ts b/app/state/trackplayer.ts index 789da4f..b2ba25a 100644 --- a/app/state/trackplayer.ts +++ b/app/state/trackplayer.ts @@ -11,6 +11,8 @@ export type TrackExt = Track & { coverArt?: string artistId?: string albumId?: string + track?: number + discNumber?: number } export type Progress = { diff --git a/app/state/trackplayermap.ts b/app/state/trackplayermap.ts index b409ee4..c5ba7b3 100644 --- a/app/state/trackplayermap.ts +++ b/app/state/trackplayermap.ts @@ -34,6 +34,8 @@ export const createTrackPlayerMapSlice = (set: SetState, get: GetState, get: GetState