Skip to content

Commit fd02fe4

Browse files
committed
- remember and restore previous playback state
- add comments
1 parent b5b6c97 commit fd02fe4

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/mpris.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,11 @@ impl MprisPlayer {
263263
self.event.trigger();
264264
}
265265

266-
#[dbus_interface(property)]
267-
fn randomize(&self) {
266+
/*#[dbus_interface(property)]
267+
fn randomize(&self, _b: bool) {
268268
self.queue.randomize();
269269
self.event.trigger();
270-
}
270+
}*/
271271

272272
#[dbus_interface(property)]
273273
fn volume(&self) -> f64 {

src/queue.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,12 +474,26 @@ impl Queue {
474474
///
475475
/// This deactivates `Shuffle`.
476476
pub fn randomize(&self) {
477-
let mut queue = self.queue.write().unwrap();
478-
queue.shuffle(&mut thread_rng());
477+
// stop playlist, because we completely invalidate any playing order
478+
let previous_playback_state = self.cfg.state().playback_state.clone();
479+
self.stop();
479480

481+
// deactivate `Shuffle` feature, because it usually wouldn't make sense to use both
480482
if self.get_shuffle() == true {
481483
self.set_shuffle(false);
482484
}
485+
486+
// permutate the queue Vec
487+
let mut queue = self.queue.write().unwrap();
488+
queue.shuffle(&mut thread_rng());
489+
490+
// resetting playing position to start of queue doesn't seem necessary
491+
// my guess is that stop() does that
492+
493+
// resume playback if we were playing before
494+
if previous_playback_state == PlaybackState::Playing {
495+
self.toggleplayback();
496+
}
483497
}
484498

485499
/// Handle events that are specific to the queue.

0 commit comments

Comments
 (0)