aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/queue.rs45
1 files changed, 14 insertions, 31 deletions
diff --git a/src/queue.rs b/src/queue.rs
index edd973f..503560b 100644
--- a/src/queue.rs
+++ b/src/queue.rs
@@ -184,19 +184,11 @@ 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");
188 self.shuffled_indices.clear(); 187 self.shuffled_indices.clear();
189 return; 188 return;
190 } 189 }
191 190
192 let current_pos = self.position; 191 let current_pos = self.position;
193 let indices_len = self.shuffled_indices.len().min(10);
194 eprintln!(
195 "DEBUG restore: current_pos={}, tracks.len={}, shuffled_indices={:?}",
196 current_pos,
197 self.tracks.len(),
198 &self.shuffled_indices[..indices_len]
199 );
200 192
201 // Find which tracks have been played (positions 0..=current_pos in shuffled order) 193 // Find which tracks have been played (positions 0..=current_pos in shuffled order)
202 let mut played_track_paths: Vec<std::path::PathBuf> = Vec::new(); 194 let mut played_track_paths: Vec<std::path::PathBuf> = Vec::new();
@@ -204,12 +196,6 @@ impl Queue {
204 if let Some(&idx) = self.shuffled_indices.get(i) 196 if let Some(&idx) = self.shuffled_indices.get(i)
205 && let Some(track) = self.tracks.get(idx) 197 && let Some(track) = self.tracks.get(idx)
206 { 198 {
207 eprintln!(
208 "DEBUG: played track at shuffled pos {} -> track idx {} = {:?}",
209 i,
210 idx,
211 track.path.file_name()
212 );
213 played_track_paths.push(track.path.clone()); 199 played_track_paths.push(track.path.clone());
214 } 200 }
215 } 201 }
@@ -222,22 +208,13 @@ impl Queue {
222 } 208 }
223 } 209 }
224 210
225 eprintln!("DEBUG: kept {} played tracks", new_tracks.len());
226
227 // Add remaining tracks from original in original order 211 // Add remaining tracks from original in original order
228 for (i, orig_track) in self.original_tracks.iter().enumerate() { 212 for orig_track in &self.original_tracks {
229 let is_played = played_track_paths.iter().any(|p| p == &orig_track.path); 213 let is_played = played_track_paths.iter().any(|p| p == &orig_track.path);
230 if !is_played { 214 if !is_played {
231 eprintln!(
232 "DEBUG: adding unplayed from original idx {}: {:?}",
233 i,
234 orig_track.path.file_name()
235 );
236 new_tracks.push(orig_track.clone()); 215 new_tracks.push(orig_track.clone());
237 } 216 }
238 } 217 }
239
240 eprintln!("DEBUG: final tracks.len={}", new_tracks.len());
241 self.tracks = new_tracks; 218 self.tracks = new_tracks;
242 self.position = current_pos; 219 self.position = current_pos;
243 self.shuffled_indices.clear(); 220 self.shuffled_indices.clear();
@@ -246,14 +223,20 @@ impl Queue {
246 fn update_shuffle_indices(&mut self) { 223 fn update_shuffle_indices(&mut self) {
247 let len = self.tracks.len(); 224 let len = self.tracks.len();
248 self.shuffled_indices = (0..len).collect(); 225 self.shuffled_indices = (0..len).collect();
249 if let ShuffleMode::All = self.shuffle { 226 match self.shuffle {
250 let mut rng = rand::rng(); 227 ShuffleMode::All => {
251 let pos = self.position.min(len.saturating_sub(1)); 228 let mut rng = rand::rng();
252 if pos == 0 && len > 1 { 229 let pos = self.position.min(len.saturating_sub(1));
253 self.shuffled_indices.shuffle(&mut rng); 230 if pos == 0 && len > 1 {
254 } else if pos + 1 < len { 231 self.shuffled_indices.shuffle(&mut rng);
255 self.shuffled_indices[pos + 1..].shuffle(&mut rng); 232 } else if pos + 1 < len {
233 self.shuffled_indices[pos + 1..].shuffle(&mut rng);
234 }
235 }
236 ShuffleMode::Album => {
237 self.update_shuffle_indices_album();
256 } 238 }
239 ShuffleMode::None => {}
257 } 240 }
258 } 241 }
259 242