Blob Blame History Raw
From 4d176eba3b61ac7d851215cf6b7dcefd9d33027f Mon Sep 17 00:00:00 2001
From: Frank Dana <ferdnyc@gmail.com>
Date: Wed, 1 Dec 2021 15:14:40 -0500
Subject: [PATCH] Protect access to last_currentsong (#145)

---
 src/mpDris2.in.py | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mpDris2.in.py b/src/mpDris2.in.py
index 4719dda..21846f9 100755
--- a/src/mpDris2.in.py
+++ b/src/mpDris2.in.py
@@ -490,7 +490,9 @@ class MPDWrapper(object):
             self.notify_about_state('stop')
 
     def last_currentsong(self):
-        return self._currentsong.copy()
+        if self._currentsong:
+            return self._currentsong.copy()
+        return None
 
     @property
     def metadata(self):
@@ -502,9 +504,13 @@ class MPDWrapper(object):
         http://www.freedesktop.org/wiki/Specifications/mpris-spec/metadata
         """
 
-        mpd_meta = self.last_currentsong()
         self._metadata = {}
 
+        mpd_meta = self.last_currentsong()
+        if not mpd_meta:
+            logger.warning("Attempted to update metadata, but retrieved none")
+            return
+
         for tag in ('album', 'title'):
             if tag in mpd_meta:
                 self._metadata['xesam:%s' % tag] = mpd_meta[tag]
@@ -1218,6 +1224,9 @@ class MPRISInterface(dbus.service.Object):
     @dbus.service.method(__player_interface, in_signature='ox', out_signature='')
     def SetPosition(self, trackid, position):
         song = mpd_wrapper.last_currentsong()
+        if not song:
+            logger.error("Failed to retrieve song position, can't seek")
+            return()
         # FIXME: use real dbus objects
         if str(trackid) != '/org/mpris/MediaPlayer2/Track/%s' % song['id']:
             return
-- 
2.33.1