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