[gnome-music/wip/jfelder/mpris-cleanup: 1/25] mpris: Cleanup _get_metadata method
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/mpris-cleanup: 1/25] mpris: Cleanup _get_metadata method
- Date: Fri, 5 Apr 2019 22:17:16 +0000 (UTC)
commit 09b60b65f5b5dd20dbb93382bc4d8c18fe84a2dc
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 | 103 ++++++++++++++++++----------------------------------
1 file changed, 36 insertions(+), 67 deletions(-)
---
diff --git a/gnomemusic/mpris.py b/gnomemusic/mpris.py
index fe9c9649..75f3d1bf 100644
--- a/gnomemusic/mpris.py
+++ b/gnomemusic/mpris.py
@@ -294,77 +294,41 @@ class MPRIS(DBusInterface):
return 'Playlist'
@log
- def _get_metadata(self, media=None):
- if not media:
- media = self.player.props.current_song
+ def _get_metadata(self, media):
+ song_dbus_path = self._get_song_dbus_path(media)
if not media:
- return {}
+ return {
+ 'mpris:trackid': GLib.Variant('o', song_dbus_path)
+ }
+
+ length = media.get_duration() * 1e6
+ user_rating = 1.0 if media.get_favourite() else 0.0
+ artist = utils.get_artist_name(media)
- song_dbus_path = self._get_song_dbus_path(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)
+ genre = media.get_genre()
+ if genre is not None:
+ metadata['xesam:genre'] = GLib.Variant('as', [genre])
- try:
- title = utils.get_media_title(media)
- assert title is not None
- metadata['xesam:title'] = GLib.Variant('s', title)
- except:
- pass
+ 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
@@ -477,22 +441,24 @@ class MPRIS(DBusInterface):
has_next = self.player.props.has_next
has_previous = self.player.props.has_previous
+ metadata = self._get_metadata(self.player.props.current_song)
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}', metadata),
},
[])
@log
def _on_thumbnail_updated(self, player, data=None):
+ metadata = self._get_metadata(self.player.props.current_song)
self.PropertiesChanged(MPRIS.MEDIA_PLAYER2_PLAYER_IFACE,
{
- 'Metadata': GLib.Variant('a{sv}', self._get_metadata()),
+ 'Metadata': GLib.Variant('a{sv}', metadata),
},
[])
@@ -619,7 +585,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(self.player.props.current_song)
+ current_track_id = metadata["mpris:trackid"].get_string()
+ if track_id != current_track_id:
return
self.player.set_position(position_msecond / 1e6)
@@ -731,12 +699,13 @@ class MPRIS(DBusInterface):
}
elif interface_name == MPRIS.MEDIA_PLAYER2_PLAYER_IFACE:
position_msecond = int(self.player.get_position() * 1e6)
+ metadata = self._get_metadata(self.player.props.current_song)
return {
'PlaybackStatus': GLib.Variant('s', self._get_playback_status()),
'LoopStatus': GLib.Variant('s', self._get_loop_status()),
'Rate': GLib.Variant('d', 1.0),
'Shuffle': GLib.Variant('b', self.player.props.repeat_mode == RepeatMode.SHUFFLE),
- 'Metadata': GLib.Variant('a{sv}', self._get_metadata()),
+ 'Metadata': GLib.Variant('a{sv}', metadata),
'Volume': GLib.Variant('d', self.player.get_volume()),
'Position': GLib.Variant('x', position_msecond),
'MinimumRate': GLib.Variant('d', 1.0),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]