return an empty object if metadata is empty

This commit is contained in:
badaix 2021-06-22 14:10:14 +02:00
parent f871211384
commit 34c7068cd2
2 changed files with 65 additions and 51 deletions

View file

@ -144,7 +144,7 @@ public:
json toJson() const
{
json j;
json j(json::object());
addTag(j, "trackId", track_id);
addTag(j, "file", file);
addTag(j, "duration", duration);

View file

@ -308,6 +308,9 @@ class SnapcastWrapper(object):
return None
def __update_metadata(self, meta):
try:
if meta is None:
meta = {}
logger.info(f'Meta: "{meta}"')
self._metadata = {}
@ -334,22 +337,30 @@ class SnapcastWrapper(object):
new_meta = self._dbus_service.update_property('org.mpris.MediaPlayer2.Player',
'Metadata')
logger.info(f'new meta {new_meta}')
except Exception as e:
logger.error(f'Error in update_metadata: {str(e)}')
def __update_properties(self, props):
try:
if props is None:
props = {}
logger.info(f'Properties: "{props}"')
# store the last receive time stamp for better position estimation
if 'position' in props:
props['received'] = time.time()
props['_received'] = time.time()
# ignore "internal" properties, starting with "_"
changed_properties = {}
for key, value in props.items():
if key.startswith('_'):
continue
if not key in self._properties:
changed_properties[key] = [None, value]
elif value != self._properties[key]:
changed_properties[key] = [self._properties[key], value]
for key, value in self._properties.items():
if key.startswith('_'):
continue
if not key in props:
changed_properties[key] = [value, None]
self._properties = props
@ -358,6 +369,8 @@ class SnapcastWrapper(object):
if key in property_mapping:
self._dbus_service.update_property(
'org.mpris.MediaPlayer2.Player', property_mapping[key])
except Exception as e:
logger.error(f'Error in update_properties: {str(e)}')
def on_ws_message(self, ws, message):
logger.info(f'Snapcast RPC websocket message received: {message}')
@ -481,14 +494,15 @@ class SnapcastWrapper(object):
return self._properties
def position(self):
logger.info(f'Position props: {self._properties}, meta: {self._metadata}')
logger.debug(
f'Position props: {self._properties}, meta: {self._metadata}')
if not 'position' in self._properties:
return 0
if not 'mpris:length' in self._metadata:
return 0
position = self._properties['position']
if 'received' in self._properties:
position += (time.time() - self._properties['received'])
if '_received' in self._properties:
position += (time.time() - self._properties['_received'])
return position * 1000000
def property(self, name, default):
@ -869,13 +883,13 @@ class MPRISInterface(dbus.service.Object):
# Root methods
@ dbus.service.method(__root_interface, in_signature='', out_signature='')
def Raise(self):
logger.info('Raise')
logger.debug('Raise')
webbrowser.open(url=f'http://{params["host"]}:{params["port"]}', new=1)
return
@ dbus.service.method(__root_interface, in_signature='', out_signature='')
def Quit(self):
logger.info('Quit')
logger.debug('Quit')
return
# Player methods
@ -911,7 +925,7 @@ class MPRISInterface(dbus.service.Object):
@ dbus.service.method(__player_interface, in_signature='x', out_signature='')
def Seek(self, offset):
logger.info(f'Seek {offset}')
logger.debug(f'Seek {offset}')
snapcast_wrapper.control("Seek", {"Offset": offset})
# status = mpd_wrapper.status()
# current, end = status['time'].split(':')
@ -928,7 +942,7 @@ class MPRISInterface(dbus.service.Object):
@ dbus.service.method(__player_interface, in_signature='ox', out_signature='')
def SetPosition(self, trackid, position):
logger.info(f'SetPosition TrackId: {trackid}, Position: {position}')
logger.debug(f'SetPosition TrackId: {trackid}, Position: {position}')
snapcast_wrapper.control(
"SetPosition", {"TrackId": trackid, "Position": position})
self.Seeked(position)
@ -946,7 +960,7 @@ class MPRISInterface(dbus.service.Object):
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
def OpenUri(self):
logger.info('OpenUri')
logger.debug('OpenUri')
# TODO
return