From 6a68cd1c991bdff146814c86faccdb4c77112dad Mon Sep 17 00:00:00 2001 From: Benjamin Schaaf Date: Sun, 9 Jan 2022 17:51:19 +1100 Subject: [PATCH] WIP --- sublime_music/app.py | 33 +++++++++++---------- sublime_music/ui/player_controls/desktop.py | 2 ++ sublime_music/ui/player_controls/mobile.py | 8 +++++ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/sublime_music/app.py b/sublime_music/app.py index d3fcf6e..e68ef5f 100644 --- a/sublime_music/app.py +++ b/sublime_music/app.py @@ -733,24 +733,25 @@ class SublimeMusicApp(Gtk.Application): @dbus_propagate() def shuffle(self): - if self.app_config.state.shuffle_on: - # Revert to the old play queue. - old_play_queue_copy = self.app_config.state.old_play_queue - self.app_config.state.current_song_index = old_play_queue_copy.index( - self.app_config.state.current_song.id - ) - self.app_config.state.play_queue = old_play_queue_copy - else: - self.app_config.state.old_play_queue = self.app_config.state.play_queue + if self.app_config.state.current_song: + if self.app_config.state.shuffle_on: + # Revert to the old play queue. + old_play_queue_copy = self.app_config.state.old_play_queue + self.app_config.state.current_song_index = old_play_queue_copy.index( + self.app_config.state.current_song.id + ) + self.app_config.state.play_queue = old_play_queue_copy + else: + self.app_config.state.old_play_queue = self.app_config.state.play_queue - mutable_play_queue = list(self.app_config.state.play_queue) + mutable_play_queue = list(self.app_config.state.play_queue) - # Remove the current song, then shuffle and put the song back. - song_id = self.app_config.state.current_song.id - del mutable_play_queue[self.app_config.state.current_song_index] - random.shuffle(mutable_play_queue) - self.app_config.state.play_queue = (song_id,) + tuple(mutable_play_queue) - self.app_config.state.current_song_index = 0 + # Remove the current song, then shuffle and put the song back. + song_id = self.app_config.state.current_song.id + del mutable_play_queue[self.app_config.state.current_song_index] + random.shuffle(mutable_play_queue) + self.app_config.state.play_queue = (song_id,) + tuple(mutable_play_queue) + self.app_config.state.current_song_index = 0 self.app_config.state.shuffle_on = not self.app_config.state.shuffle_on self.update_window() diff --git a/sublime_music/ui/player_controls/desktop.py b/sublime_music/ui/player_controls/desktop.py index ef19fa0..7c270d4 100644 --- a/sublime_music/ui/player_controls/desktop.py +++ b/sublime_music/ui/player_controls/desktop.py @@ -94,6 +94,8 @@ class Desktop(Gtk.Box): self.device_button.set_icon(f"chromecast{icon}-symbolic") + self.play_queue_button.set_sensitive(len(app_config.state.play_queue) > 0) + # Volume button and slider if app_config.state.is_muted: icon_name = "muted" diff --git a/sublime_music/ui/player_controls/mobile.py b/sublime_music/ui/player_controls/mobile.py index 8310476..e25be64 100644 --- a/sublime_music/ui/player_controls/mobile.py +++ b/sublime_music/ui/player_controls/mobile.py @@ -119,6 +119,14 @@ class MobileHandle(Gtk.ActionBar): return box def update(self, app_config: AppConfiguration, force: bool = False): + empty_queue = len(app_config.state.play_queue) == 0 + + self.play_queue_button.set_sensitive(not empty_queue) + self.menu_button.set_sensitive(not empty_queue) + + if empty_queue: + self.state.play_queue_open = False + if app_config.state.current_song is not None: self.song_title.set_markup(bleach.clean(app_config.state.current_song.title)) # TODO (#71): use walrus once MYPY gets its act together