Closes #130: add loading indicator when loading play queue using the load play queue button

This commit is contained in:
Sumner Evans
2020-08-04 09:10:33 -06:00
parent 2feced28cf
commit 398287a820
4 changed files with 27 additions and 2 deletions

View File

@@ -1041,11 +1041,13 @@ class SublimeMusicApp(Gtk.Application):
assert self.player_manager
self.player_manager.pause()
self.app_config.state.playing = False
self.app_config.state.loading_play_queue = True
self.update_window()
def do_update(f: Result[PlayQueue]):
play_queue = f.result()
if not play_queue:
self.app_config.state.loading_play_queue = False
return
play_queue.position = play_queue.position or timedelta(0)
@@ -1060,6 +1062,7 @@ class SublimeMusicApp(Gtk.Application):
self.app_config.state.play_queue = new_play_queue
self.app_config.state.song_progress = play_queue.position
self.app_config.state.current_song_index = play_queue.current_index or 0
self.app_config.state.loading_play_queue = False
self.player_manager.reset()
if clear_notification:
self.app_config.state.current_notification = None

View File

@@ -230,6 +230,11 @@ entry.invalid {
opacity: 0.5;
}
#play-queue-spinner {
min-height: 35px;
min-width: 35px;
}
/* ********** General ********** */
.menu-button {
padding: 5px;

View File

@@ -193,6 +193,12 @@ class PlayerControls(Gtk.ActionBar):
self.artist_name.set_markup("")
self.load_play_queue_button.set_sensitive(not self.offline_mode)
if app_config.state.loading_play_queue:
self.play_queue_spinner.start()
self.play_queue_spinner.show()
else:
self.play_queue_spinner.stop()
self.play_queue_spinner.hide()
# Short circuit if no changes to the play queue
force |= self.offline_mode != app_config.offline_mode
@@ -699,7 +705,7 @@ class PlayerControls(Gtk.ActionBar):
self.play_queue_button.connect("clicked", self.on_play_queue_click)
box.pack_start(self.play_queue_button, False, True, 5)
self.play_queue_popover = Gtk.PopoverMenu(modal=False, name="up-next-popover",)
self.play_queue_popover = Gtk.PopoverMenu(modal=False, name="up-next-popover")
self.play_queue_popover.set_relative_to(self.play_queue_button)
play_queue_popover_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
@@ -721,6 +727,7 @@ class PlayerControls(Gtk.ActionBar):
play_queue_popover_box.add(play_queue_popover_header)
play_queue_loading_overlay = Gtk.Overlay()
play_queue_scrollbox = Gtk.ScrolledWindow(
min_content_height=600, min_content_width=400,
)
@@ -790,7 +797,16 @@ class PlayerControls(Gtk.ActionBar):
self.play_queue_store.connect("row-deleted", self.on_play_queue_model_row_move)
play_queue_scrollbox.add(self.play_queue_list)
play_queue_popover_box.pack_end(play_queue_scrollbox, True, True, 0)
play_queue_loading_overlay.add(play_queue_scrollbox)
self.play_queue_spinner = Gtk.Spinner(
name="play-queue-spinner",
active=False,
halign=Gtk.Align.CENTER,
valign=Gtk.Align.CENTER,
)
play_queue_loading_overlay.add_overlay(self.play_queue_spinner)
play_queue_popover_box.pack_end(play_queue_loading_overlay, True, True, 0)
self.play_queue_popover.add(play_queue_popover_box)

View File

@@ -79,6 +79,7 @@ class UIState:
current_notification: Optional[UINotification] = None
playlist_details_expanded: bool = True
artist_details_expanded: bool = True
loading_play_queue: bool = False
# State for Album sort.
class _DefaultGenre(Genre):