[gnome-music/wip/mschraal/core: 171/190] coremodel: Make all models properties



commit 7b26fa1b17868360923a379c618c9c51204371ad
Author: Marinus Schraal <mschraal gnome org>
Date:   Tue Jul 2 15:28:06 2019 +0200

    coremodel: Make all models properties
    
    Saves us passing around a bunch of variables.

 gnomemusic/coredisc.py                       |  4 +-
 gnomemusic/coregrilo.py                      | 18 ++-----
 gnomemusic/coremodel.py                      | 77 +++++++++++++++++++---------
 gnomemusic/grilowrappers/grldleynasource.py  | 10 ++--
 gnomemusic/grilowrappers/grltrackersource.py | 16 +++---
 gnomemusic/player.py                         |  2 +-
 gnomemusic/views/albumsview.py               |  2 +-
 gnomemusic/views/artistsview.py              |  2 +-
 gnomemusic/views/searchview.py               |  6 +--
 gnomemusic/views/songsview.py                |  6 +--
 10 files changed, 79 insertions(+), 64 deletions(-)
---
diff --git a/gnomemusic/coredisc.py b/gnomemusic/coredisc.py
index 5478ee9e..58be6130 100644
--- a/gnomemusic/coredisc.py
+++ b/gnomemusic/coredisc.py
@@ -28,7 +28,7 @@ class CoreDisc(GObject.GObject):
     def model(self):
         if self._model is None:
             self._filter_model = Dazzle.ListModelFilter.new(
-                self._coremodel.get_model())
+                self._coremodel.props.songs)
             self._filter_model.set_filter_func(lambda a: False)
             self._sort_model = Gfm.SortListModel.new(self._filter_model)
             self._sort_model.set_sort_func(
@@ -36,7 +36,7 @@ class CoreDisc(GObject.GObject):
 
             self._model = self._sort_model
 
-            self._coremodel.get_model().connect(
+            self._coremodel.props.songs.connect(
                 "items-changed", self._on_core_changed)
             self._model.connect("items-changed", self._on_disc_changed)
 
diff --git a/gnomemusic/coregrilo.py b/gnomemusic/coregrilo.py
index 134a545a..f4a8210e 100644
--- a/gnomemusic/coregrilo.py
+++ b/gnomemusic/coregrilo.py
@@ -11,19 +11,12 @@ class CoreGrilo(GObject.GObject):
     def __repr__(self):
         return "<CoreGrilo>"
 
-    def __init__(
-            self, coremodel, model, albums_model, artists_model,
-            coreselection, song_search_model, album_search_model):
+    def __init__(self, coremodel, coreselection):
         super().__init__()
 
         self._coremodel = coremodel
         self._coreselection = coreselection
-        self._model = model
         self._wrappers = []
-        self._albums_model = albums_model
-        self._artists_model = artists_model
-        self._song_search_model = song_search_model
-        self._album_search_model = album_search_model
 
         Grl.init(None)
 
@@ -36,15 +29,10 @@ class CoreGrilo(GObject.GObject):
 
         if source.props.source_id == "grl-tracker-source":
             new_wrapper = GrlTrackerSource(
-                source, self._model, self._albums_model,
-                self._artists_model, self._coremodel, self._coreselection,
-                self, self._song_search_model, self._album_search_model)
+                source, self._coremodel, self._coreselection, self)
         elif source.props.source_id[:10] == "grl-dleyna":
             new_wrapper = GrlDLeynaSource(
-                source, self._model, self._albums_model,
-                self._artists_model, self._coremodel, self._coreselection,
-                self, self._song_search_model, self._album_search_model)
-
+                source, self._coremodel, self._coreselection, self)
         self._wrappers.append(new_wrapper)
         print(new_wrapper, "added")
 
diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py
index 0abda1bf..ffdb4273 100644
--- a/gnomemusic/coremodel.py
+++ b/gnomemusic/coremodel.py
@@ -1,6 +1,6 @@
 import gi
 gi.require_versions({'Dazzle': '1.0', 'Gfm': '0.1'})
-from gi.repository import Dazzle, GObject, Gio, Gfm
+from gi.repository import Dazzle, GObject, Gio, Gfm, Gtk
 from gi._gi import pygobject_new_full
 
 from gnomemusic import log
@@ -64,11 +64,7 @@ class CoreModel(GObject.GObject):
             self._artist_model)
         self._artist_search_model.set_filter_func(lambda a: False)
 
-        print("PLAYLIST_MODEL", self._playlist_model)
-        self._grilo = CoreGrilo(
-            self, self._model, self._album_model, self._artist_model,
-            self._coreselection, self._song_search_model,
-            self._album_search_model)
+        self._grilo = CoreGrilo(self, self._coreselection)
 
     def _filter_selected(self, coresong):
         return coresong.props.selected
@@ -81,10 +77,6 @@ class CoreModel(GObject.GObject):
         name_b = artist_b.props.artist.casefold()
         return name_a > name_b
 
-    @log
-    def get_model(self):
-        return self._model
-
     def _wrap_list_store_sort_func(self, func):
 
         def wrap(a, b, *user_data):
@@ -125,9 +117,6 @@ class CoreModel(GObject.GObject):
 
         return albums_model_sort
 
-    def get_playlist_model(self):
-        return self._playlist_model_sort
-
     def set_playlist_model(self, playlist_type, coresong, model):
         with model.freeze_notify():
 
@@ -193,24 +182,66 @@ class CoreModel(GObject.GObject):
 
                 self.emit("playlist-loaded")
 
-    @log
-    def get_albums_model(self):
+    def search(self, text):
+        self._grilo.search(text)
+
+    @GObject.Property(
+        type=Gio.ListStore, default=None, flags=GObject.ParamFlags.READABLE)
+    def songs(self):
+        return self._model
+
+    @GObject.Property(
+        type=Gio.ListStore, default=None, flags=GObject.ParamFlags.READABLE)
+    def albums(self):
+        return self._album_model
+
+    @GObject.property(
+        type=Gio.ListStore, default=None, flags=GObject.ParamFlags.READABLE)
+    def artists(self):
+        return self._artist_model
+
+    @GObject.Property(
+        type=Gio.ListStore, default=None, flags=GObject.ParamFlags.READABLE)
+    def playlist(self):
+        return self._playlist_model
+
+    @GObject.Property(
+        type=Gfm.SortListModel, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def albums_sort(self):
         return self._album_model_sort
 
-    def get_artists_model(self):
+    @GObject.property(
+        type=Gfm.SortListModel, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def artists_sort(self):
         return self._artist_model_sort
 
-    def get_songs_model(self):
-        return self._songliststore
+    @GObject.Property(
+        type=Gfm.SortListModel, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def playlist_sort(self):
+        return self._playlist_model_sort
 
-    def get_songs_search_model(self):
+    @GObject.Property(
+        type=Dazzle.ListModelFilter, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def songs_search(self):
         return self._song_search_model
 
-    def get_album_search_model(self):
+    @GObject.Property(
+        type=Dazzle.ListModelFilter, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def albums_search(self):
         return self._album_search_model
 
-    def get_artist_search_model(self):
+    @GObject.property(
+        type=Dazzle.ListModelFilter, default=None,
+        flags=GObject.ParamFlags.READABLE)
+    def artists_search(self):
         return self._artist_search_model
 
-    def search(self, text):
-        self._grilo.search(text)
+    @GObject.Property(
+        type=Gtk.ListStore, default=None, flags=GObject.ParamFlags.READABLE)
+    def songs_gtkliststore(self):
+        return self._songliststore
diff --git a/gnomemusic/grilowrappers/grldleynasource.py b/gnomemusic/grilowrappers/grldleynasource.py
index 3490d3d0..12defbb7 100644
--- a/gnomemusic/grilowrappers/grldleynasource.py
+++ b/gnomemusic/grilowrappers/grldleynasource.py
@@ -28,19 +28,17 @@ class GrlDLeynaSource(GObject.GObject):
     def __repr__(self):
         return "<GrlDLeynaSource>"
 
-    def __init__(
-            self, source, model, albums_model, artists_model, coremodel,
-            core_selection, grilo, song_search_model, album_search_model):
+    def __init__(self, source, coremodel, core_selection, grilo):
         super().__init__()
 
         self._coremodel = coremodel
         self._core_selection = core_selection
         self._grilo = grilo
         self._source = source
-        self._model = model
-        self._albums_model = albums_model
+        self._model = self._coremodel.props.songs
+        self._albums_model = self._coremodel.props.albums
         self._album_ids = {}
-        self._artists_model = artists_model
+        self._artists_model = self._coremodel.props.artists
 
         Grl.init(None)
 
diff --git a/gnomemusic/grilowrappers/grltrackersource.py b/gnomemusic/grilowrappers/grltrackersource.py
index 6cd44d4c..fcefcc2d 100644
--- a/gnomemusic/grilowrappers/grltrackersource.py
+++ b/gnomemusic/grilowrappers/grltrackersource.py
@@ -30,23 +30,21 @@ class GrlTrackerSource(GObject.GObject):
     def __repr__(self):
         return "<GrlTrackerSource>"
 
-    def __init__(
-            self, source, model, albums_model, artists_model, coremodel,
-            coreselection, grilo, song_search_model, album_search_model):
+    def __init__(self, source, coremodel, coreselection, grilo):
         super().__init__()
 
         self._coremodel = coremodel
         self._coreselection = coreselection
         self._grilo = grilo
         self._source = source
-        self._model = model
-        self._albums_model = albums_model
+        self._model = self._coremodel.props.songs
+        self._albums_model = self._coremodel.props.albums
         self._album_ids = {}
-        self._artists_model = artists_model
+        self._artists_model = self._coremodel.props.artists
         self._hash = {}
-        self._song_search_model = song_search_model
-        self._album_search_model = album_search_model
-        self._artist_search_model = self._coremodel.get_artist_search_model()
+        self._song_search_model = self._coremodel.props.songs_search
+        self._album_search_model = self._coremodel.props.albums_search
+        self._artist_search_model = self._coremodel.props.artists_search
 
         self._fast_options = Grl.OperationOptions()
         self._fast_options.set_resolution_flags(
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index 4f019df2..f155b1bd 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -115,7 +115,7 @@ class PlayerPlaylist(GObject.GObject):
         # self._discoverer.connect('discovered', self._on_discovered)
         # self._discoverer.start()
 
-        self._model = self._app._coremodel.get_playlist_model()
+        self._model = self._app._coremodel.props.playlist_sort
 
         self.connect("notify::repeat-mode", self._on_repeat_mode_changed)
 
diff --git a/gnomemusic/views/albumsview.py b/gnomemusic/views/albumsview.py
index c591d81e..72dae4db 100644
--- a/gnomemusic/views/albumsview.py
+++ b/gnomemusic/views/albumsview.py
@@ -92,7 +92,7 @@ class AlbumsView(BaseView):
 
         self._box.add(scrolledwin)
 
-        self._model = self._window._app._coremodel.get_albums_model()
+        self._model = self._window._app._coremodel.props.albums_sort
         self._view.bind_model(self._model, self._create_widget)
 
         self._view.show()
diff --git a/gnomemusic/views/artistsview.py b/gnomemusic/views/artistsview.py
index f086c882..f9e7e255 100644
--- a/gnomemusic/views/artistsview.py
+++ b/gnomemusic/views/artistsview.py
@@ -62,7 +62,7 @@ class ArtistsView(BaseView):
         self._artists = {}
 
         self._window = window
-        self._model = window._app._coremodel.get_artists_model()
+        self._model = window._app._coremodel.props.artists_sort
         self._sidebar.bind_model(self._model, self._create_widget)
 
         sidebar_container.props.width_request = 220
diff --git a/gnomemusic/views/searchview.py b/gnomemusic/views/searchview.py
index 46ae75fa..a8108f64 100644
--- a/gnomemusic/views/searchview.py
+++ b/gnomemusic/views/searchview.py
@@ -46,9 +46,9 @@ class SearchView(BaseView):
     @log
     def __init__(self, window, player):
         self._coremodel = window._app._coremodel
-        self._model = self._coremodel.get_songs_search_model()
-        self._album_model = self._coremodel.get_album_search_model()
-        self._artist_model = self._coremodel.get_artist_search_model()
+        self._model = self._coremodel.props.songs_search
+        self._album_model = self._coremodel.props.albums_search
+        self._artist_model = self._coremodel.props.artists_search
         super().__init__('search', None, window)
 
         self.player = player
diff --git a/gnomemusic/views/songsview.py b/gnomemusic/views/songsview.py
index 89f07cfb..bb7594d5 100644
--- a/gnomemusic/views/songsview.py
+++ b/gnomemusic/views/songsview.py
@@ -53,6 +53,7 @@ class SongsView(BaseView):
         :param player: The main player object
         """
         self._window = window
+        self._coremodel = self._window._app._coremodel
         super().__init__('songs', _("Songs"), window)
 
         self._offset = 0
@@ -62,8 +63,7 @@ class SongsView(BaseView):
 
         self._add_list_renderers()
 
-        coremodel = self._window._app._coremodel
-        self._playlist_model = coremodel.get_playlist_model()
+        self._playlist_model = self._coremodel.props.playlist
 
         self.player = player
         self.player.connect('song-changed', self._update_model)
@@ -80,7 +80,7 @@ class SongsView(BaseView):
         self._view = Gtk.TreeView()
         self._view.props.headers_visible = False
         self._view.props.valign = Gtk.Align.START
-        self._view.props.model = self._window._app._coremodel.get_songs_model()
+        self._view.props.model = self._coremodel.props.songs_gtkliststore
         self._view.props.activate_on_single_click = True
 
         self._ctrl = Gtk.GestureMultiPress().new(self._view)


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