aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/queue.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/queue.rs b/src/queue.rs
index 109b748..698fc1d 100644
--- a/src/queue.rs
+++ b/src/queue.rs
@@ -189,11 +189,22 @@ impl Queue {
189 } 189 }
190 190
191 let current_pos = self.position; 191 let current_pos = self.position;
192 let played: Vec<Track> = self.tracks[..current_pos].to_vec();
193 let unplayed_original: Vec<Track> = self.original_tracks[current_pos..].to_vec();
194 192
195 self.tracks = played; 193 // Keep every track that's at a position <= current_pos (played + current)
196 self.tracks.extend(unplayed_original); 194 // These stay at exactly the same positions
195 let keep_count = current_pos + 1;
196 let mut new_tracks: Vec<Track> = self.tracks[..keep_count].to_vec();
197
198 // Find all tracks from original that are NOT in the kept portion
199 // Insert them in their original order after current position
200 for orig_track in &self.original_tracks {
201 let in_kept = self.tracks[..keep_count].iter().any(|t| t.path == orig_track.path);
202 if !in_kept {
203 new_tracks.push(orig_track.clone());
204 }
205 }
206
207 self.tracks = new_tracks;
197 self.position = current_pos; 208 self.position = current_pos;
198 self.shuffled_indices.clear(); 209 self.shuffled_indices.clear();
199 } 210 }