[gnome-music/wip/mschraal/smart-playlists-reorder: 2/3] grltrackerplaylists: Resort Recently Played



commit d048f3b8b0c4abd64d9d1edae8232d2b9364f823
Author: Marinus Schraal <mschraal gnome org>
Date:   Mon Mar 2 15:03:58 2020 +0100

    grltrackerplaylists: Resort Recently Played

 gnomemusic/coresong.py                          |  2 ++
 gnomemusic/grilowrappers/grltrackerplaylists.py | 26 ++++++++++++++++++++++++-
 gnomemusic/grilowrappers/grltrackerwrapper.py   |  2 ++
 3 files changed, 29 insertions(+), 1 deletion(-)
---
diff --git a/gnomemusic/coresong.py b/gnomemusic/coresong.py
index c2befcb6..7ae04597 100644
--- a/gnomemusic/coresong.py
+++ b/gnomemusic/coresong.py
@@ -39,6 +39,7 @@ class CoreSong(GObject.GObject):
     album_disc_number = GObject.Property(type=int)
     artist = GObject.Property(type=str)
     duration = GObject.Property(type=int)
+    last_played = GObject.Property(type=GLib.DateTime, default=None)
     media = GObject.Property(type=Grl.Media)
     grlid = GObject.Property(type=str, default=None)
     play_count = GObject.Property(type=int)
@@ -118,6 +119,7 @@ class CoreSong(GObject.GObject):
         self.props.artist = utils.get_artist_name(media)
         self.props.duration = media.get_duration()
         self.props.favorite = media.get_favourite()
+        self.props.last_played = media.get_last_played()
         self.props.play_count = media.get_play_count()
         self.props.title = utils.get_media_title(media)
         self.props.track_number = media.get_track_number()
diff --git a/gnomemusic/grilowrappers/grltrackerplaylists.py b/gnomemusic/grilowrappers/grltrackerplaylists.py
index 3a941af3..c5dfe1f5 100644
--- a/gnomemusic/grilowrappers/grltrackerplaylists.py
+++ b/gnomemusic/grilowrappers/grltrackerplaylists.py
@@ -433,7 +433,7 @@ class Playlist(GObject.GObject):
         properties = [
             "album", "album_disc_number", "artist", "duration", "media",
             "grlid", "play_count", "state", "title", "track_number", "url",
-            "validation", "favorite", "selected"]
+            "validation", "favorite", "selected", "last_played"]
 
         for prop in properties:
             main_coresong.bind_property(
@@ -947,6 +947,7 @@ class RecentlyPlayed(SmartPlaylist):
             nie:usageCounter(?song) AS ?play_count
             nmm:trackNumber(?song) AS ?track_number
             nmm:setNumber(nmm:musicAlbumDisc(?song)) AS ?album_disc_number
+            ?last_played AS ?last_played_time
             ?tag AS ?favourite
         WHERE {
             ?song a nmm:MusicPiece ;
@@ -962,6 +963,29 @@ class RecentlyPlayed(SmartPlaylist):
             "location_filter": self._tracker_wrapper.location_filter()
         }
 
+    def _playlist_sort(self, coresong_a, coresong_b):
+        last_played_a = coresong_a.props.last_played.format_iso8601()
+        last_played_b = coresong_b.props.last_played.format_iso8601()
+
+        if last_played_a != last_played_b:
+            return last_played_a < last_played_b
+
+        title_a = coresong_a.props.title
+        title_b = coresong_b.props.title
+        title_cmp = utils.natural_sort_names(title_a, title_b)
+        if title_cmp != 0:
+            return title_cmp
+
+        album_a = coresong_a.props.album
+        album_b = coresong_b.props.album
+        album_cmp = utils.natural_sort_names(album_a, album_b)
+        if album_cmp != 0:
+            return album_cmp
+
+        artist_a = coresong_a.props.artist
+        artist_b = coresong_b.props.artist
+
+        return utils.natural_sort_names(artist_a, artist_b)
 
 class RecentlyAdded(SmartPlaylist):
     """Recently Added smart playlist"""
diff --git a/gnomemusic/grilowrappers/grltrackerwrapper.py b/gnomemusic/grilowrappers/grltrackerwrapper.py
index 22e7796f..33492d54 100644
--- a/gnomemusic/grilowrappers/grltrackerwrapper.py
+++ b/gnomemusic/grilowrappers/grltrackerwrapper.py
@@ -326,6 +326,7 @@ class GrlTrackerWrapper(GObject.GObject):
             nie:usageCounter(?song) AS ?play_count
             nmm:trackNumber(?song) AS ?track_number
             nmm:setNumber(nmm:musicAlbumDisc(?song)) AS ?album_disc_number
+            nie:contentAccessed(?song) AS ?last_played_time
             ?tag AS ?favourite
         WHERE {
             ?song a nmm:MusicPiece .
@@ -414,6 +415,7 @@ class GrlTrackerWrapper(GObject.GObject):
             nie:usageCounter(?song) AS ?play_count
             nmm:trackNumber(?song) AS ?track_number
             nmm:setNumber(nmm:musicAlbumDisc(?song)) AS ?album_disc_number
+            nie:contentAccessed(?song) AS ?last_played_time
             ?tag AS ?favourite
         WHERE {
             ?song a nmm:MusicPiece .


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