diff options
| -rw-r--r-- | src/queue.rs | 19 |
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 | } |
