Skip to content

Commit 5bd6ace

Browse files
committed
refactor: optimize song insertion and ID mapping in queue management
1 parent 32ec0ab commit 5bd6ace

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

lib/services/audio_service.dart

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -830,9 +830,8 @@ class MusifyAudioHandler extends BaseAudioHandler {
830830
}
831831

832832
if (replace && manuallyAddedSongs.isNotEmpty) {
833-
final insertIndex = targetQueueIndex != null
834-
? targetQueueIndex + 1
835-
: (_queueList.isNotEmpty ? 1 : 0);
833+
// Always insert after the starting song index
834+
final insertIndex = (targetQueueIndex ?? 0) + 1;
836835
_queueList.insertAll(insertIndex, manuallyAddedSongs);
837836
}
838837

@@ -1833,10 +1832,12 @@ class MusifyAudioHandler extends BaseAudioHandler {
18331832
final manualSongIds = unplayedManualSongs
18341833
.map(_queueEntryIds.ensureId)
18351834
.toSet();
1835+
// Build ID map to avoid repeated ensureId() calls on every song
1836+
final queueIdMap = {
1837+
for (final song in _queueList) song: _queueEntryIds.ensureId(song),
1838+
};
18361839
_queueList
1837-
..removeWhere(
1838-
(song) => manualSongIds.contains(_queueEntryIds.ensureId(song)),
1839-
)
1840+
..removeWhere((song) => manualSongIds.contains(queueIdMap[song]))
18401841
..shuffle();
18411842

18421843
final newCurrentIndex = _queueList.indexWhere(
@@ -1867,10 +1868,15 @@ class MusifyAudioHandler extends BaseAudioHandler {
18671868
.map(_queueEntryIds.ensureId)
18681869
.toSet();
18691870

1870-
final restoredQueue = cloneMaps(_originalQueueList)
1871-
..removeWhere(
1872-
(song) => manualSongIds.contains(_queueEntryIds.ensureId(song)),
1873-
);
1871+
final restoredQueue = cloneMaps(_originalQueueList);
1872+
// Build ID map to avoid repeated ensureId() calls during filtering
1873+
final restoredQueueIdMap = {
1874+
for (final song in restoredQueue)
1875+
song: _queueEntryIds.ensureId(song),
1876+
};
1877+
restoredQueue.removeWhere(
1878+
(song) => manualSongIds.contains(restoredQueueIdMap[song]),
1879+
);
18741880

18751881
_queueList
18761882
..clear()

0 commit comments

Comments
 (0)