diff options
| author | salmonik <raisersoft@proton.me> | 2026-05-10 00:29:01 +0200 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-05-10 00:29:01 +0200 |
| commit | 69172d7abe17d56b68a97465344467d8c34482b6 (patch) | |
| tree | 2420fc37047441a9c81c7b7a221e84842a3f9e4e /src/queue.rs | |
| parent | Fix shuffle restore - track played tracks via shuffled_indices, not position (diff) | |
| download | rsplayer-69172d7abe17d56b68a97465344467d8c34482b6.tar.gz rsplayer-69172d7abe17d56b68a97465344467d8c34482b6.zip | |
Fix queue display returning nothing - removed daemon pager, return full output instead. Increase pre-buffer to 100 packets.
Diffstat (limited to '')
| -rw-r--r-- | src/queue.rs | 23 |
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(); |
