Clear Cover panel when playlist is empty (resolve #24)

This commit is contained in:
coderkun 2017-06-18 16:42:36 +02:00
commit b5e76b4041
2 changed files with 45 additions and 26 deletions

View file

@ -608,7 +608,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="transition_type">slide-right</property> <property name="transition_type">slide-right</property>
<property name="reveal_child">True</property>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>

View file

@ -349,8 +349,7 @@ class Window():
def on_mcg_status(self, state, album, pos, time, volume, error): def on_mcg_status(self, state, album, pos, time, volume, error):
# Album # Album
if album: GObject.idle_add(self._panels[Window._PANEL_INDEX_COVER].set_album, album)
GObject.idle_add(self._panels[Window._PANEL_INDEX_COVER].set_album, album)
# State # State
if state == 'play': if state == 'play':
GObject.idle_add(self._header_bar.set_play) GObject.idle_add(self._header_bar.set_play)
@ -803,6 +802,7 @@ class CoverPanel(GObject.GObject):
self._panel = builder.get_object('cover-panel') self._panel = builder.get_object('cover-panel')
self._toolbar = builder.get_object('cover-toolbar') self._toolbar = builder.get_object('cover-toolbar')
# Toolbar menu # Toolbar menu
self._toolbar_tracklist = builder.get_object('cover-toolbar-tracklist')
self._toolbar_tracklist_buttons = { self._toolbar_tracklist_buttons = {
TracklistSize.LARGE: builder.get_object('cover-toolbar-tracklist-large'), TracklistSize.LARGE: builder.get_object('cover-toolbar-tracklist-large'),
TracklistSize.SMALL: builder.get_object('cover-toolbar-tracklist-small'), TracklistSize.SMALL: builder.get_object('cover-toolbar-tracklist-small'),
@ -826,6 +826,9 @@ class CoverPanel(GObject.GObject):
self._songs_scale = builder.get_object('cover-songs') self._songs_scale = builder.get_object('cover-songs')
self._songs_scale.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1)) self._songs_scale.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1))
# Initial actions
GObject.idle_add(self._enable_tracklist)
def get(self): def get(self):
return self._panel return self._panel
@ -862,7 +865,7 @@ class CoverPanel(GObject.GObject):
def on_cover_size_allocate(self, widget, allocation): def on_cover_size_allocate(self, widget, allocation):
self._resize_image() GObject.idle_add(self._resize_image)
def on_songs_start_change(self, widget, event): def on_songs_start_change(self, widget, event):
@ -898,28 +901,33 @@ class CoverPanel(GObject.GObject):
def set_album(self, album): def set_album(self, album):
# Set labels if album:
self._album_title_label.set_label( # Set labels
GObject.markup_escape_text( self._album_title_label.set_label(
album.get_title() GObject.markup_escape_text(
album.get_title()
)
) )
) self._album_date_label.set_markup(
self._album_date_label.set_markup( GObject.markup_escape_text(
GObject.markup_escape_text( ', '.join(album.get_dates())
', '.join(album.get_dates()) )
) )
) self._album_artist_label.set_markup(
self._album_artist_label.set_markup( GObject.markup_escape_text(
GObject.markup_escape_text( ', '.join(album.get_albumartists())
', '.join(album.get_albumartists()) )
) )
) # Set tracks
self._set_tracks(album)
# Set tracks # Set current album
self._set_tracks(album) old_album = self._current_album
self._current_album = album
self._enable_tracklist()
# Load cover # Load cover
threading.Thread(target=self._set_cover, args=(album,)).start() threading.Thread(target=self._set_cover, args=(old_album, album,)).start()
def set_play(self, pos, time): def set_play(self, pos, time):
@ -959,13 +967,14 @@ class CoverPanel(GObject.GObject):
) )
def _set_cover(self, album): def _set_cover(self, current_album, new_album):
self._cover_stack.set_visible_child(self._cover_spinner) self._cover_stack.set_visible_child(self._cover_spinner)
self._cover_spinner.start() self._cover_spinner.start()
if self._current_album is None or album.get_hash() != self._current_album.get_hash(): current_hash = current_album.get_hash() if current_album else None
self._current_album = album new_hash = new_album.get_hash() if new_album else None
url = album.get_cover() if not current_hash or not new_hash or current_hash != new_hash:
if url is not None and url is not "": url = new_album.get_cover() if new_album else None
if url and url is not "":
# Load image and draw it # Load image and draw it
self._cover_pixbuf = Utils.load_cover(url) self._cover_pixbuf = Utils.load_cover(url)
else: else:
@ -995,6 +1004,17 @@ class CoverPanel(GObject.GObject):
self._songs_scale.add_mark(length, Gtk.PositionType.RIGHT, "{0[0]:02d}:{0[1]:02d} minutes".format(divmod(length, 60))) self._songs_scale.add_mark(length, Gtk.PositionType.RIGHT, "{0[0]:02d}:{0[1]:02d} minutes".format(divmod(length, 60)))
def _enable_tracklist(self):
if self._current_album:
# enable
self._toolbar_tracklist.set_sensitive(True)
self._change_tracklist_size(self._tracklist_size, False, False)
else:
# disable
self._toolbar_tracklist.set_sensitive(False)
self._change_tracklist_size(TracklistSize.HIDDEN, False, False)
def _change_tracklist_size(self, size, notify=True, store=True): def _change_tracklist_size(self, size, notify=True, store=True):
# Set tracklist size # Set tracklist size
if size == TracklistSize.LARGE: if size == TracklistSize.LARGE:
@ -1013,7 +1033,7 @@ class CoverPanel(GObject.GObject):
if notify: if notify:
self.emit('tracklist-size-changed', size) self.emit('tracklist-size-changed', size)
# Resize image # Resize image
self._resize_image() GObject.idle_add(self._resize_image)
def _playing(self): def _playing(self):