aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/queue.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/queue.rs b/src/queue.rs
index db329c6..f556ed3 100644
--- a/src/queue.rs
+++ b/src/queue.rs
@@ -184,24 +184,29 @@ impl Queue {
184 184
185 fn restore_from_original(&mut self) { 185 fn restore_from_original(&mut self) {
186 if self.original_tracks.is_empty() { 186 if self.original_tracks.is_empty() {
187 eprintln!("DEBUG: original_tracks empty");
187 self.shuffled_indices.clear(); 188 self.shuffled_indices.clear();
188 return; 189 return;
189 } 190 }
190 191
191 let current_pos = self.position; 192 let current_pos = self.position;
193 let indices_len = self.shuffled_indices.len().min(10);
194 eprintln!("DEBUG restore: current_pos={}, tracks.len={}, shuffled_indices={:?}",
195 current_pos, self.tracks.len(), &self.shuffled_indices[..indices_len]);
192 196
193 // Find which tracks have been played (positions 0..=current_pos in shuffled order) 197 // Find which tracks have been played (positions 0..=current_pos in shuffled order)
194 // These are tracks whose shuffled_indices value is <= current_pos
195 let mut played_track_paths: Vec<std::path::PathBuf> = Vec::new(); 198 let mut played_track_paths: Vec<std::path::PathBuf> = Vec::new();
196 for i in 0..=current_pos { 199 for i in 0..=current_pos {
197 if let Some(&idx) = self.shuffled_indices.get(i) { 200 if let Some(&idx) = self.shuffled_indices.get(i)
198 if let Some(track) = self.tracks.get(idx) { 201 && let Some(track) = self.tracks.get(idx)
199 played_track_paths.push(track.path.clone()); 202 {
200 } 203 eprintln!("DEBUG: played track at shuffled pos {} -> track idx {} = {:?}",
204 i, idx, track.path.file_name());
205 played_track_paths.push(track.path.clone());
201 } 206 }
202 } 207 }
203 208
204 // Keep the played tracks in their current order (shuffled order) 209 // Keep the played tracks in their current order
205 let mut new_tracks: Vec<Track> = Vec::new(); 210 let mut new_tracks: Vec<Track> = Vec::new();
206 for path in &played_track_paths { 211 for path in &played_track_paths {
207 if let Some(track) = self.tracks.iter().find(|t| &t.path == path) { 212 if let Some(track) = self.tracks.iter().find(|t| &t.path == path) {
@@ -209,14 +214,18 @@ impl Queue {
209 } 214 }
210 } 215 }
211 216
217 eprintln!("DEBUG: kept {} played tracks", new_tracks.len());
218
212 // Add remaining tracks from original in original order 219 // Add remaining tracks from original in original order
213 for orig_track in &self.original_tracks { 220 for (i, orig_track) in self.original_tracks.iter().enumerate() {
214 let is_played = played_track_paths.iter().any(|p| p == &orig_track.path); 221 let is_played = played_track_paths.iter().any(|p| p == &orig_track.path);
215 if !is_played { 222 if !is_played {
223 eprintln!("DEBUG: adding unplayed from original idx {}: {:?}", i, orig_track.path.file_name());
216 new_tracks.push(orig_track.clone()); 224 new_tracks.push(orig_track.clone());
217 } 225 }
218 } 226 }
219 227
228 eprintln!("DEBUG: final tracks.len={}", new_tracks.len());
220 self.tracks = new_tracks; 229 self.tracks = new_tracks;
221 self.position = current_pos; 230 self.position = current_pos;
222 self.shuffled_indices.clear(); 231 self.shuffled_indices.clear();