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

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

View file

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

View file

@ -349,8 +349,7 @@ class Window():
def on_mcg_status(self, state, album, pos, time, volume, error):
# 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
if state == '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._toolbar = builder.get_object('cover-toolbar')
# Toolbar menu
self._toolbar_tracklist = builder.get_object('cover-toolbar-tracklist')
self._toolbar_tracklist_buttons = {
TracklistSize.LARGE: builder.get_object('cover-toolbar-tracklist-large'),
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.override_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1))
# Initial actions
GObject.idle_add(self._enable_tracklist)
def get(self):
return self._panel
@ -862,7 +865,7 @@ class CoverPanel(GObject.GObject):
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):
@ -898,28 +901,33 @@ class CoverPanel(GObject.GObject):
def set_album(self, album):
# Set labels
self._album_title_label.set_label(
GObject.markup_escape_text(
album.get_title()
if album:
# Set labels
self._album_title_label.set_label(
GObject.markup_escape_text(
album.get_title()
)
)
)
self._album_date_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_dates())
self._album_date_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_dates())
)
)
)
self._album_artist_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_albumartists())
self._album_artist_label.set_markup(
GObject.markup_escape_text(
', '.join(album.get_albumartists())
)
)
)
# Set tracks
self._set_tracks(album)
# Set tracks
self._set_tracks(album)
# Set current album
old_album = self._current_album
self._current_album = album
self._enable_tracklist()
# 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):
@ -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_spinner.start()
if self._current_album is None or album.get_hash() != self._current_album.get_hash():
self._current_album = album
url = album.get_cover()
if url is not None and url is not "":
current_hash = current_album.get_hash() if current_album else None
new_hash = new_album.get_hash() if new_album else None
if not current_hash or not new_hash or current_hash != new_hash:
url = new_album.get_cover() if new_album else None
if url and url is not "":
# Load image and draw it
self._cover_pixbuf = Utils.load_cover(url)
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)))
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):
# Set tracklist size
if size == TracklistSize.LARGE:
@ -1013,7 +1033,7 @@ class CoverPanel(GObject.GObject):
if notify:
self.emit('tracklist-size-changed', size)
# Resize image
self._resize_image()
GObject.idle_add(self._resize_image)
def _playing(self):