[gnome-music/wip/jfelder/mpris-cleanup: 5/29] mpris: Cleanup _get_metadata method



commit 4a46c7662675ba0f36d80ed352623d39b96c82a8
Author: Jean Felder <jfelder src gnome org>
Date:   Tue Sep 4 19:05:30 2018 +0200

    mpris: Cleanup _get_metadata method
    
    Do not allow a default media parameter equal to None. It creates
    counter intuitive checks at the start of the function.
    Update codestyle.
    Do not use exceptions.
    Most of the media properties cannot be None (length, track_number,
    play_count, title).
    
    In case no media can be found, set 'mpris:trackid' to the 'NoTrack'
    path and return it.

 gnomemusic/mpris.py | 95 ++++++++++++++++++-----------------------------------
 1 file changed, 32 insertions(+), 63 deletions(-)
---
diff --git a/gnomemusic/mpris.py b/gnomemusic/mpris.py
index f7bedd97..715124f6 100644
--- a/gnomemusic/mpris.py
+++ b/gnomemusic/mpris.py
@@ -296,76 +296,43 @@ class MPRIS(DBusInterface):
 
     @log
     def _get_metadata(self, media=None):
+        song_dbus_path = self._get_song_dbus_path(media)
+        if not self.player.props.current_song:
+            return {
+                'mpris:trackid': GLib.Variant('o', song_dbus_path)
+            }
+
         if not media:
             media = self.player.props.current_song
-        if not media:
-            return {}
 
-        song_dbus_path = self._get_song_dbus_path(media)
+        length = media.get_duration() * 1e6
+        user_rating = 1.0 if media.get_favourite() else 0.0
+        artist = utils.get_artist_name(media)
+
         metadata = {
             'mpris:trackid': GLib.Variant('o', song_dbus_path),
-            'xesam:url': GLib.Variant('s', media.get_url())
+            'xesam:url': GLib.Variant('s', media.get_url()),
+            'mpris:length': GLib.Variant('x', length),
+            'xesam:trackNumber': GLib.Variant('i', media.get_track_number()),
+            'xesam:useCount': GLib.Variant('i', media.get_play_count()),
+            'xesam:userRating': GLib.Variant('d', user_rating),
+            'xesam:title': GLib.Variant('s', utils.get_media_title(media)),
+            'xesam:album': GLib.Variant('s', utils.get_album_title(media)),
+            'xesam:artist': GLib.Variant('as', [artist]),
+            'xesam:albumArtist': GLib.Variant('as', [artist])
         }
 
-        try:
-            length = media.get_duration() * 1000000
-            assert length is not None
-            metadata['mpris:length'] = GLib.Variant('x', length)
-        except:
-            pass
-
-        try:
-            trackNumber = media.get_track_number()
-            assert trackNumber is not None
-            metadata['xesam:trackNumber'] = GLib.Variant('i', trackNumber)
-        except:
-            pass
-
-        try:
-            useCount = media.get_play_count()
-            assert useCount is not None
-            metadata['xesam:useCount'] = GLib.Variant('i', useCount)
-        except:
-            pass
-
-        user_rating = 1.0 if media.get_favourite() else 0.0
-        metadata['xesam:userRating'] = GLib.Variant('d', user_rating)
-
-        try:
-            title = utils.get_media_title(media)
-            assert title is not None
-            metadata['xesam:title'] = GLib.Variant('s', title)
-        except:
-            pass
+        genre = media.get_genre()
+        if genre is not None:
+            metadata['xesam:genre'] = GLib.Variant('as', [genre])
 
+        last_played = media.get_last_played()
+        if last_played is not None:
+            metadata['xesam:lastUsed'] = GLib.Variant('s', last_played)
 
-        album = utils.get_album_title(media)
-        metadata['xesam:album'] = GLib.Variant('s', album)
-
-        artist = utils.get_artist_name(media)
-        metadata['xesam:artist'] = GLib.Variant('as', [artist])
-        metadata['xesam:albumArtist'] = GLib.Variant('as', [artist])
-
-        try:
-            genre = media.get_genre()
-            assert genre is not None
-            metadata['xesam:genre'] = GLib.Variant('as', genre)
-        except:
-            pass
-
-        try:
-            lastUsed = media.get_last_played()
-            assert lastUsed is not None
-            metadata['xesam:lastUsed'] = GLib.Variant('s', lastUsed)
-        except:
-            pass
-
-        try:
-            artUrl = media.get_thumbnail()
-            assert artUrl is not None
-            metadata['mpris:artUrl'] = GLib.Variant('s', artUrl)
-        except:
-            pass
+        art_url = media.get_thumbnail()
+        if art_url is not None:
+            metadata['mpris:artUrl'] = GLib.Variant('s', art_url)
 
         return metadata
 
@@ -480,12 +447,12 @@ class MPRIS(DBusInterface):
         has_previous = self.player.props.has_previous
         self.PropertiesChanged(MPRIS.MEDIA_PLAYER2_PLAYER_IFACE,
                                {
-                                   'Metadata': GLib.Variant('a{sv}', self._get_metadata()),
                                    'CanGoNext': GLib.Variant('b', has_next),
                                    'CanGoPrevious': GLib.Variant(
                                        'b', has_previous),
                                    'CanPlay': GLib.Variant('b', True),
                                    'CanPause': GLib.Variant('b', True),
+                                   'Metadata': GLib.Variant('a{sv}', self._get_metadata()),
                                },
                                [])
 
@@ -620,7 +587,9 @@ class MPRIS(DBusInterface):
         :param str track_id: The currently playing track's identifier
         :param int position_msecond: new position in microseconds
         """
-        if track_id != self._get_metadata().get('mpris:trackid').get_string():
+        metadata = self._get_metadata()
+        current_track_id = metadata["mpris:trackid"].get_string()
+        if track_id != current_track_id:
             return
         self.player.set_position(position_msecond / 1e6)
 


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