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