File tree Expand file tree Collapse file tree 2 files changed +19
-5
lines changed
Expand file tree Collapse file tree 2 files changed +19
-5
lines changed Original file line number Diff line number Diff 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 {
Original file line number Diff line number Diff 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.
You can’t perform that action at this time.
0 commit comments