summaryrefslogtreecommitdiff
path: root/gnomemusic/coredisc.py
diff options
context:
space:
mode:
Diffstat (limited to 'gnomemusic/coredisc.py')
-rw-r--r--gnomemusic/coredisc.py59
1 files changed, 23 insertions, 36 deletions
diff --git a/gnomemusic/coredisc.py b/gnomemusic/coredisc.py
index 697089a6..ece33ba2 100644
--- a/gnomemusic/coredisc.py
+++ b/gnomemusic/coredisc.py
@@ -22,13 +22,13 @@
# code, but you are not obligated to do so. If you do not wish to do so,
# delete this exception statement from your version.
-from gi.repository import GObject, Gio, Gfm, Grl
-
-import gnomemusic.utils as utils
+from gi.repository import GObject, Gio, Grl, Gtk
class CoreDisc(GObject.GObject):
+ __gtype_name__ = "CoreDisc"
+
disc_nr = GObject.Property(type=int, default=0)
duration = GObject.Property(type=int, default=None)
media = GObject.Property(type=Grl.Media, default=None)
@@ -47,7 +47,6 @@ class CoreDisc(GObject.GObject):
self._filter_model = None
self._log = application.props.log
self._model = None
- self._old_album_ids = []
self._selected = False
self.update(media)
@@ -58,20 +57,28 @@ class CoreDisc(GObject.GObject):
@GObject.Property(type=Gio.ListModel, default=None)
def model(self):
- def _disc_sort(song_a, song_b):
- return song_a.props.track_number - song_b.props.track_number
+ def _disc_sort(song_a, song_b, data=None):
+ order = song_a.props.track_number - song_b.props.track_number
+ if order < 0:
+ return Gtk.Ordering.SMALLER
+ elif order > 0:
+ return Gtk.Ordering.LARGER
+ else:
+ return Gtk.Ordering.EQUAL
if self._model is None:
- self._filter_model = Gfm.FilterListModel.new(
+ self._filter_model = Gtk.FilterListModel.new(
self._coremodel.props.songs)
- self._filter_model.set_filter_func(lambda a: False)
- self._model = Gfm.SortListModel.new(self._filter_model)
- self._model.set_sort_func(
- utils.wrap_list_store_sort_func(_disc_sort))
+ self._filter_model.set_filter(Gtk.AnyFilter())
+
+ self._model = Gtk.SortListModel.new(self._filter_model)
+ disc_sorter = Gtk.CustomSorter()
+ disc_sorter.set_sort_func(_disc_sort)
+ self._model.set_sorter(disc_sorter)
self._model.connect("items-changed", self._on_disc_changed)
- self._get_album_disc(
+ self._coregrilo.get_album_disc(
self.props.media, self.props.disc_nr, self._filter_model)
return self._model
@@ -85,36 +92,16 @@ class CoreDisc(GObject.GObject):
self.props.duration = duration
- def _get_album_disc(self, media, discnr, model):
- album_ids = []
- model_filter = model
-
- def _filter_func(core_song):
- return core_song.props.grlid in album_ids
-
- def _callback(source, op_id, media, remaining, error):
- if error:
- self._log.warning("Error: {}".format(error))
- return
-
- if media is None:
- if sorted(album_ids) == sorted(self._old_album_ids):
- return
- model_filter.set_filter_func(_filter_func)
- self._old_album_ids = album_ids
- return
-
- album_ids.append(media.get_source() + media.get_id())
-
- self._coregrilo.populate_album_disc_songs(media, discnr, _callback)
-
@GObject.Property(
- type=bool, default=False, flags=GObject.BindingFlags.SYNC_CREATE)
+ type=bool, default=False, flags=GObject.ParamFlags.READWRITE)
def selected(self):
return self._selected
@selected.setter # type: ignore
def selected(self, value):
+ if value == self._selected:
+ return
+
self._selected = value
# The model is loaded on-demand, so the first time the model is