[gnome-music/wip/mschraal/tracker-sort-queries: 7/7] artistsview: Do not wait for full list load before show



commit bb63dcb8287dccc29588b71f24c4d68c49f5da45
Author: Marinus Schraal <mschraal gnome org>
Date:   Wed Jul 17 12:53:42 2019 +0200

    artistsview: Do not wait for full list load before show
    
    The view was waiting for all models to be loaded before displaying the albums.
    This could result in quite a noticable delay on artist with a lot of albums.
    
    Instead show the albums widget immediately and let the albums lazily load in,
    to give some immediate sense of progress. This is made possible by the ordering
    of Tracker results in a previous patch.

 gnomemusic/views/artistsview.py          | 24 ++----------------------
 gnomemusic/widgets/artistalbumswidget.py | 15 +--------------
 gnomemusic/widgets/artistalbumwidget.py  | 15 ++-------------
 gnomemusic/widgets/disclistboxwidget.py  |  6 ------
 4 files changed, 5 insertions(+), 55 deletions(-)
---
diff --git a/gnomemusic/views/artistsview.py b/gnomemusic/views/artistsview.py
index 7369924d..09c04635 100644
--- a/gnomemusic/views/artistsview.py
+++ b/gnomemusic/views/artistsview.py
@@ -134,10 +134,6 @@ class ArtistsView(BaseView):
             vhomogeneous=False)
         self._view_container.add(self._view)
 
-        empty_frame = Gtk.Frame(shadow_type=Gtk.ShadowType.NONE, hexpand=True)
-        empty_frame.show()
-        self._view.add_named(empty_frame, "empty-frame")
-
     @log
     def _on_changes_pending(self, data=None):
         if (self._init
@@ -162,35 +158,19 @@ class ArtistsView(BaseView):
             self._view.set_visible_child_name(coreartist.props.artist)
             return
 
-        if self._loading_id > 0:
-            self._artist_albums.disconnect(self._loading_id)
-            self._loading_id = 0
-
         self._artist_albums = ArtistAlbumsWidget(
             coreartist, self.player, self._window, False)
-        self._loading_id = self._artist_albums.connect(
-            "ready", self._on_artist_albums_ready, coreartist.props.artist)
-        self._view.set_visible_child_name("empty-frame")
-        self._window.notifications_popup.push_loading()
-        return
-
-    def _on_artist_albums_ready(self, widget, artist):
         artist_albums_frame = Gtk.Frame(
             shadow_type=Gtk.ShadowType.NONE, hexpand=True)
         artist_albums_frame.add(self._artist_albums)
         artist_albums_frame.show()
 
-        self._view.add_named(artist_albums_frame, artist)
+        self._view.add_named(artist_albums_frame, coreartist.props.artist)
         scroll_vadjustment = self._view_container.props.vadjustment
         scroll_vadjustment.props.value = 0.
         self._view.set_visible_child(artist_albums_frame)
-        self._window.notifications_popup.pop_loading()
-        self._loaded_artists.append(artist)
 
-        self._artist_albums.disconnect(self._loading_id)
-        self._loading_id = 0
-        self._artist_albums = None
-        return
+        self._loaded_artists.append(coreartist.props.artist)
 
     @log
     def _populate(self, data=None):
diff --git a/gnomemusic/widgets/artistalbumswidget.py b/gnomemusic/widgets/artistalbumswidget.py
index a9b4567e..1a6b2c99 100644
--- a/gnomemusic/widgets/artistalbumswidget.py
+++ b/gnomemusic/widgets/artistalbumswidget.py
@@ -46,10 +46,6 @@ class ArtistAlbumsWidget(Gtk.ListBox):
     selected_items_count = GObject.Property(type=int, default=0, minimum=0)
     selection_mode = GObject.Property(type=bool, default=False)
 
-    __gsignals__ = {
-        "ready": (GObject.SignalFlags.RUN_FIRST, None, ()),
-    }
-
     def __repr__(self):
         return '<ArtistAlbumsWidget>'
 
@@ -70,7 +66,6 @@ class ArtistAlbumsWidget(Gtk.ListBox):
         self._songs_grid_size_group = Gtk.SizeGroup.new(
             Gtk.SizeGroupMode.HORIZONTAL)
 
-        self._nb_albums_loaded = 0
         self._model.props.model.connect_after(
             "items-changed", self. _on_model_items_changed)
         self.bind_model(self._model, self._add_album)
@@ -86,7 +81,7 @@ class ArtistAlbumsWidget(Gtk.ListBox):
 
         coremodel = self._player._app.props.coremodel
 
-        def _on_playlist_loaded(artistalbumwidget):
+        def _on_playlist_loaded(klass):
             self._player.play(song_widget.props.coresong)
             coremodel.disconnect(signal_id)
 
@@ -104,18 +99,10 @@ class ArtistAlbumsWidget(Gtk.ListBox):
             | GObject.BindingFlags.SYNC_CREATE)
 
         self._widgets.append(widget)
-        widget.connect("ready", self._on_album_ready)
         widget.connect("song-activated", self._song_activated)
 
         return widget
 
-    def _on_album_ready(self, artistalbumwidget):
-        self._nb_albums_loaded += 1
-        if self._nb_albums_loaded == self._model.get_n_items():
-            artistalbumwidget.disconnect_by_func(self._on_album_ready)
-            self._nb_albums_loaded = 0
-            self.emit("ready")
-
     def _on_model_items_changed(self, model, position, removed, added):
         for i in range(model.get_n_items()):
             row = self.get_row_at_index(i)
diff --git a/gnomemusic/widgets/artistalbumwidget.py b/gnomemusic/widgets/artistalbumwidget.py
index 8b81fa78..b2627df5 100644
--- a/gnomemusic/widgets/artistalbumwidget.py
+++ b/gnomemusic/widgets/artistalbumwidget.py
@@ -43,7 +43,6 @@ class ArtistAlbumWidget(Gtk.Box):
     selection_mode = GObject.Property(type=bool, default=False)
 
     __gsignals__ = {
-        "ready": (GObject.SignalFlags.RUN_FIRST, None, ()),
         "song-activated": (
             GObject.SignalFlags.RUN_FIRST, None, (SongWidget, )
         ),
@@ -85,12 +84,10 @@ class ArtistAlbumWidget(Gtk.Box):
         if self._cover_size_group:
             self._cover_size_group.add_widget(self._cover_stack)
 
-        self._nb_disc_box_loaded = 0
-        self._model = corealbum.props.model
-        self._model.props.model.connect_after(
+        corealbum.props.model.connect_after(
             "items-changed", self._on_model_items_changed)
         self._disc_list_box.bind_model(
-            self._model, self._create_widget)
+            corealbum.props.model, self._create_widget)
 
     def _create_widget(self, disc):
         disc_box = self._create_disc_box(disc.props.disc_nr, disc.model)
@@ -103,18 +100,10 @@ class ArtistAlbumWidget(Gtk.Box):
         disc_box.props.show_durations = False
         disc_box.props.show_favorites = False
         disc_box.props.show_song_numbers = True
-        disc_box.connect("ready", self._on_discbox_ready)
         disc_box.connect('song-activated', self._song_activated)
 
         return disc_box
 
-    def _on_discbox_ready(self, klass):
-        self._nb_disc_box_loaded += 1
-        if self._nb_disc_box_loaded == self._model.get_n_items():
-            klass.disconnect_by_func(self._on_discbox_ready)
-            self._nb_disc_box_loaded = 0
-            self.emit("ready")
-
     def _on_model_items_changed(self, model, position, removed, added):
         n_items = model.get_n_items()
         if n_items == 1:
diff --git a/gnomemusic/widgets/disclistboxwidget.py b/gnomemusic/widgets/disclistboxwidget.py
index 957538d8..10c5bf3c 100644
--- a/gnomemusic/widgets/disclistboxwidget.py
+++ b/gnomemusic/widgets/disclistboxwidget.py
@@ -61,7 +61,6 @@ class DiscBox(Gtk.Box):
     _list_box = Gtk.Template.Child()
 
     __gsignals__ = {
-        "ready": (GObject.SignalFlags.RUN_FIRST, None, ()),
         'selection-changed': (GObject.SignalFlags.RUN_FIRST, None, ()),
         'song-activated': (GObject.SignalFlags.RUN_FIRST, None, (Gtk.Widget,))
     }
@@ -94,8 +93,6 @@ class DiscBox(Gtk.Box):
         self._selected_items = []
         self._songs = []
 
-        self._model.connect_after(
-            "items-changed", self._on_model_items_changed)
         self._list_box.bind_model(self._model, self._create_widget)
 
     @log
@@ -144,9 +141,6 @@ class DiscBox(Gtk.Box):
 
         return song_widget
 
-    def _on_model_items_changed(self, model, position, removed, added):
-        self.emit("ready")
-
     @log
     def _on_selection_changed(self, widget):
         self.emit('selection-changed')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]