diff --git a/lib/providers/library_collections_provider.dart b/lib/providers/library_collections_provider.dart index aff18c42..a0628b90 100644 --- a/lib/providers/library_collections_provider.dart +++ b/lib/providers/library_collections_provider.dart @@ -803,7 +803,7 @@ class LibraryCollectionsNotifier extends Notifier { final changed = _replacePlaylistById(playlistId, (playlist) { if (playlist.containsTrackKey(key)) return playlist; return playlist.copyWith( - tracks: [entry, ...playlist.tracks], + tracks: [...playlist.tracks, entry], updatedAt: now, ); }); @@ -864,7 +864,8 @@ class LibraryCollectionsNotifier extends Notifier { ); final changed = _replacePlaylistById(playlistId, (current) { return current.copyWith( - tracks: [...entriesToAdd.reversed, ...current.tracks], + // Append in playlist order, matching the ASC snapshot ordering. + tracks: [...current.tracks, ...entriesToAdd], updatedAt: now, ); }); diff --git a/lib/services/library_collections_database.dart b/lib/services/library_collections_database.dart index 189f2f57..28eea531 100644 --- a/lib/services/library_collections_database.dart +++ b/lib/services/library_collections_database.dart @@ -269,7 +269,10 @@ class LibraryCollectionsDatabase { ); final playlistTrackRows = await db.query( _tablePlaylistTracks, - orderBy: 'playlist_id ASC, added_at DESC, rowid DESC', + // Playlists keep playlist order: batch imports insert rows in playlist + // order and later additions append, so insertion order IS the order + // (unlike wishlist/loved, which show newest first). + orderBy: 'playlist_id ASC, added_at ASC, rowid ASC', ); final favoriteArtistRows = await db.query( _tableFavoriteArtists, @@ -348,7 +351,7 @@ class LibraryCollectionsDatabase { SELECT inner_tracks.rowid FROM $_tablePlaylistTracks inner_tracks WHERE inner_tracks.playlist_id = outer_tracks.playlist_id - ORDER BY inner_tracks.added_at DESC, inner_tracks.rowid DESC + ORDER BY inner_tracks.added_at ASC, inner_tracks.rowid ASC LIMIT 1 ) ''', playlistIdsNeedingPreview);