Resolves #85: removed flicker from Albums panel

This commit is contained in:
Sumner Evans
2019-12-27 23:13:09 -07:00
parent 813b4c8a5b
commit 1a31f6baa3
3 changed files with 29 additions and 10 deletions

View File

@@ -530,7 +530,8 @@ class CacheManager(metaclass=Singleton):
# If it is the placeholder LastFM image, try and use the cover # If it is the placeholder LastFM image, try and use the cover
# art filename given by the server. # art filename given by the server.
if lastfm_url.endswith('2a96cbd8b46e442fc41c2b86b821562f.png'): if (lastfm_url == '' or lastfm_url.endswith(
'2a96cbd8b46e442fc41c2b86b821562f.png')):
if isinstance(artist, ArtistWithAlbumsID3): if isinstance(artist, ArtistWithAlbumsID3):
return CacheManager.get_cover_art_filename( return CacheManager.get_cover_art_filename(
artist.coverArt, size=300) artist.coverArt, size=300)

View File

@@ -458,14 +458,26 @@ class AlbumsListWithSongs(Gtk.Overlay):
self.albums = [] self.albums = []
def update(self, artist): def update(self, artist):
# TODO this introduces a flicker. Fix this. Need to do some diffing. def remove_all():
for c in self.box.get_children(): for c in self.box.get_children():
self.box.remove(c) self.box.remove(c)
if artist is None: if artist is None:
remove_all()
self.spinner.hide()
return return
for album in artist.get('album', artist.get('child', [])): new_albums = artist.get('album', artist.get('child', []))
if self.albums == new_albums:
# No need to do anything.
return
self.albums = new_albums
remove_all()
for album in self.albums:
album_with_songs = AlbumWithSongs(album, show_artist_name=False) album_with_songs = AlbumWithSongs(album, show_artist_name=False)
album_with_songs.connect( album_with_songs.connect(
'song-clicked', 'song-clicked',

View File

@@ -141,9 +141,7 @@ class AlbumWithSongs(Gtk.Box):
return column return column
self.loading_indicator = Gtk.Spinner( self.loading_indicator = Gtk.Spinner(
name='album-list-song-list-spinner', name='album-list-song-list-spinner')
active=True,
)
album_details.add(self.loading_indicator) album_details.add(self.loading_indicator)
self.album_songs = Gtk.TreeView( self.album_songs = Gtk.TreeView(
@@ -266,10 +264,18 @@ class AlbumWithSongs(Gtk.Box):
def update(self, force=False): def update(self, force=False):
self.update_album_songs(self.album.id) self.update_album_songs(self.album.id)
def set_loading(self, loading):
if loading:
self.loading_indicator.start()
self.loading_indicator.show()
else:
self.loading_indicator.stop()
self.loading_indicator.hide()
@util.async_callback( @util.async_callback(
lambda *a, **k: CacheManager.get_album(*a, **k), lambda *a, **k: CacheManager.get_album(*a, **k),
before_download=lambda self: self.loading_indicator.show(), before_download=lambda self: self.set_loading(True),
on_failure=lambda self, e: self.loading_indicator.hide(), on_failure=lambda self, e: self.set_loading(False),
) )
def update_album_songs( def update_album_songs(
self, self,