From c300367abbbcb571504f3ece735590e032c667f4 Mon Sep 17 00:00:00 2001 From: badaix Date: Wed, 19 May 2021 08:54:01 +0200 Subject: [PATCH] Remove mpris stuff --- control/meta_mpd.py | 738 +------------------------------------------- 1 file changed, 11 insertions(+), 727 deletions(-) diff --git a/control/meta_mpd.py b/control/meta_mpd.py index aaee2ac2..f3d21833 100755 --- a/control/meta_mpd.py +++ b/control/meta_mpd.py @@ -28,8 +28,6 @@ import shlex import socket import getopt import mpd -import dbus -import dbus.service from dbus.mainloop.glib import DBusGMainLoop import logging import gettext @@ -90,14 +88,9 @@ params = { 'host': None, 'port': None, 'password': None, - 'bus_name': None, # Library 'music_dir': '', 'cover_regex': None, - # Bling - 'mmkeys': True, - 'notify': (using_gi_notify or using_old_notify), - 'notify_urgency': 0, } defaults = { @@ -110,32 +103,6 @@ defaults = { 'cover_regex': r'^(album|cover|\.?folder|front).*\.(gif|jpeg|jpg|png)$', } -notification = None - -# MPRIS allowed metadata tags -allowed_tags = { - 'mpris:trackid': dbus.ObjectPath, - 'mpris:length': dbus.Int64, - 'mpris:artUrl': str, - 'xesam:album': str, - 'xesam:albumArtist': list, - 'xesam:artist': list, - 'xesam:asText': str, - 'xesam:audioBPM': int, - 'xesam:comment': list, - 'xesam:composer': list, - 'xesam:contentCreated': str, - 'xesam:discNumber': int, - 'xesam:firstUsed': str, - 'xesam:genre': list, - 'xesam:lastUsed': str, - 'xesam:lyricist': str, - 'xesam:title': str, - 'xesam:trackNumber': int, - 'xesam:url': str, - 'xesam:useCount': int, - 'xesam:userRating': float, -} # MPD to Snapcast tag mapping @@ -166,7 +133,6 @@ tag_mapping = { 'userrating': ['userRating', float, False], 'duration': ['duration', float, False], - 'track': ['track', int, False], 'name': ['name', str, False], 'originaldate': ['originalDate', str, False], 'performer': ['performer', str, True], @@ -182,113 +148,6 @@ tag_mapping = { 'musicbrainz_workid': ['musicbrainzWorkId', str, False], } -# python dbus bindings don't include annotations and properties -MPRIS2_INTROSPECTION = """ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -""" # Default url handlers if MPD doesn't support 'urlhandlers' command urlhandlers = ['http://'] @@ -303,9 +162,7 @@ class MPDWrapper(object): def __init__(self, params): self.client = mpd.MPDClient() - self._dbus = dbus self._params = params - self._dbus_service = None self._can_single = False self._can_idle = False @@ -327,16 +184,12 @@ class MPDWrapper(object): self._position = 0 self._time = 0 - self._bus = dbus.SessionBus() - if self._params['mmkeys']: - self.setup_mediakeys() - def run(self): """ Try to connect to MPD; retry every 5 seconds on failure. """ if self.my_connect(): - GLib.timeout_add_seconds(5, self.my_connect) + # GLib.timeout_add_seconds(5, self.my_connect) return False else: return True @@ -373,21 +226,12 @@ class MPDWrapper(object): self._can_single = True if self._errors > 0: - notification.notify(identity, _('Reconnected')) logger.info('Reconnected to MPD server.') else: logger.debug('Connected to MPD server.') # Make the socket non blocking to detect deconnections self.client._sock.settimeout(5.0) - # Export our DBUS service - if not self._dbus_service: - self._dbus_service = MPRISInterface(self._params) - else: - # Add our service to the session bus - # self._dbus_service.add_to_connection(dbus.SessionBus(), - # '/org/mpris/MediaPlayer2') - self._dbus_service.acquire_name() # Init internal state to throw events at start self.init_state() @@ -424,20 +268,6 @@ class MPDWrapper(object): def reconnect(self): logger.warning("Disconnected") - notification.notify(identity, _('Disconnected'), 'error') - - # Release the DBus name and disconnect from bus - if self._dbus_service is not None: - self._dbus_service.release_name() - # self._dbus_service.remove_from_connection() - - # Stop monitoring - if self._poll_id: - GLib.source_remove(self._poll_id) - self._poll_id = None - if self._watch_id: - GLib.source_remove(self._watch_id) - self._watch_id = None # Clean mpd client state try: @@ -519,28 +349,12 @@ class MPDWrapper(object): # subsystem list: if subsystem in ("player", "mixer", "options", "playlist"): if not updated: + logger.info(f'Subsystem: {subsystem}') self._update_properties(force=True) updated = True self.idle_enter() return True - def mediakey_callback(self, appname, key): - """ GNOME media key handler """ - logger.debug('Got GNOME mmkey "%s" for "%s"' % (key, appname)) - if key == 'Play': - if self._status['state'] == 'play': - self.client.pause(1) - self.notify_about_state('pause') - else: - self.play() - self.notify_about_state('play') - elif key == 'Next': - self.client.next() - elif key == 'Previous': - self.client.previous() - elif key == 'Stop': - self.client.stop() - self.notify_about_state('stop') def last_currentsong(self): return self._currentsong.copy() @@ -587,123 +401,6 @@ class MPDWrapper(object): "id": "Spotify", "meta": snapmeta}}) print(r) - self._metadata = {} - - for tag in ('album', 'title'): - if tag in mpd_meta: - self._metadata['xesam:%s' % tag] = mpd_meta[tag] - - if 'id' in mpd_meta: - self._metadata['mpris:trackid'] = "/org/mpris/MediaPlayer2/Track/%s" % \ - mpd_meta['id'] - - if 'time' in mpd_meta: - self._metadata['mpris:length'] = int(mpd_meta['time']) * 1000000 - - if 'date' in mpd_meta: - self._metadata['xesam:contentCreated'] = mpd_meta['date'][0:4] - - if 'track' in mpd_meta: - # TODO: Is it even *possible* for mpd_meta['track'] to be a list? - if type(mpd_meta['track']) == list and len(mpd_meta['track']) > 0: - track = str(mpd_meta['track'][0]) - else: - track = str(mpd_meta['track']) - - m = re.match('^([0-9]+)', track) - if m: - self._metadata['xesam:trackNumber'] = int(m.group(1)) - # Ensure the integer is signed 32bit - if self._metadata['xesam:trackNumber'] & 0x80000000: - self._metadata['xesam:trackNumber'] += -0x100000000 - else: - self._metadata['xesam:trackNumber'] = 0 - - if 'disc' in mpd_meta: - # TODO: Same as above. When is it a list? - if type(mpd_meta['disc']) == list and len(mpd_meta['disc']) > 0: - disc = str(mpd_meta['disc'][0]) - else: - disc = str(mpd_meta['disc']) - - m = re.match('^([0-9]+)', disc) - if m: - self._metadata['xesam:discNumber'] = int(m.group(1)) - - if 'artist' in mpd_meta: - if type(mpd_meta['artist']) == list: - self._metadata['xesam:artist'] = mpd_meta['artist'] - else: - self._metadata['xesam:artist'] = [mpd_meta['artist']] - - if 'composer' in mpd_meta: - if type(mpd_meta['composer']) == list: - self._metadata['xesam:composer'] = mpd_meta['composer'] - else: - self._metadata['xesam:composer'] = [mpd_meta['composer']] - - # Stream: populate some missings tags with stream's name - if 'name' in mpd_meta: - if 'xesam:title' not in self._metadata: - self._metadata['xesam:title'] = mpd_meta['name'] - elif 'xesam:album' not in self._metadata: - self._metadata['xesam:album'] = mpd_meta['name'] - - if 'file' in mpd_meta: - song_url = mpd_meta['file'] - if not any([song_url.startswith(prefix) for prefix in urlhandlers]): - song_url = os.path.join(self._params['music_dir'], song_url) - self._metadata['xesam:url'] = song_url - cover = self.find_cover(song_url) - if cover: - self._metadata['mpris:artUrl'] = cover - - # Cast self._metadata to the correct type, or discard it - for key, value in self._metadata.items(): - try: - self._metadata[key] = allowed_tags[key](value) - except ValueError: - del self._metadata[key] - logger.error("Can't cast value %r to %s" % - (value, allowed_tags[key])) - - # if 'xesam:title' in self._metadata and 'xesam:album' in self._metadata: - # result = musicbrainzngs.search_releases(artist=self._metadata['xesam:title'], release=self._metadata['xesam:album'], - # limit=1) - # if result['release-list']: - # self._metadata[ - # 'mpris:artUrl'] = f"http://coverartarchive.org/release/{result['release-list'][0]['id']}/front-250" - # print(self._metadata['mpris:artUrl']) - - def notify_about_track(self, meta, state='play'): - uri = 'sound' - if 'mpris:artUrl' in meta: - uri = meta['mpris:artUrl'] - - title = 'Unknown Title' - if 'xesam:title' in meta: - title = meta['xesam:title'] - elif 'xesam:url' in meta: - title = meta['xesam:url'].split('/')[-1] - - artist = 'Unknown Artist' - if 'xesam:artist' in meta: - artist = ", ".join(meta['xesam:artist']) - - body = _('by %s') % artist - - if state == 'pause': - uri = 'media-playback-pause-symbolic' - body += ' (%s)' % _('Paused') - - notification.notify(title, body, uri) - - def notify_about_state(self, state): - if state == 'stop': - notification.notify(identity, _('Stopped'), - 'media-playback-stop-symbolic') - else: - self.notify_about_track(self.metadata, state) def find_cover(self, song_url): if song_url.startswith('file://'): @@ -805,6 +502,7 @@ class MPDWrapper(object): old_time = self._time self._currentsong = self.client.currentsong() new_status = self.client.status() + logger.info(f'new status: {new_status}') self._time = new_time = int(time.time()) if not new_status: @@ -828,8 +526,7 @@ class MPDWrapper(object): # "player" subsystem if old_status['state'] != new_status['state']: - self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'PlaybackStatus') + logger.info('state changed') if not force: old_id = old_status.get('songid', None) @@ -846,81 +543,29 @@ class MPDWrapper(object): expected_position, new_position, new_position - expected_position)) logger.debug("Old position was %r at %r (%r seconds ago)" % ( old_position, old_time, new_time - old_time)) - self._dbus_service.Seeked(new_position * 1000000) + # self._dbus_service.Seeked(new_position * 1000000) else: # Update current song metadata old_meta = self._metadata.copy() self.update_metadata() - new_meta = self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'Metadata') - - if self._params['notify'] and new_status['state'] != 'stop': - if old_meta.get('xesam:artist', None) != new_meta.get('xesam:artist', None) \ - or old_meta.get('xesam:album', None) != new_meta.get('xesam:album', None) \ - or old_meta.get('xesam:title', None) != new_meta.get('xesam:title', None) \ - or old_meta.get('xesam:url', None) != new_meta.get('xesam:url', None): - self.notify_about_track(new_meta, new_status['state']) # "mixer" subsystem if old_status.get('volume') != new_status.get('volume'): - self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'Volume') + logger.info('volume changed') # "options" subsystem # also triggered if consume, crossfade or ReplayGain are updated if old_status['random'] != new_status['random']: - self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'Shuffle') + logger.info('random changed') if (old_status['repeat'] != new_status['repeat'] or old_status.get('single', 0) != new_status.get('single', 0)): - self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'LoopStatus') + logger.info('repeat changed') if ("nextsongid" in old_status) != ("nextsongid" in new_status): - self._dbus_service.update_property('org.mpris.MediaPlayer2.Player', - 'CanGoNext') - - # Media keys - - def setup_mediakeys(self): - self.register_mediakeys() - self._dbus_obj = self._bus.get_object("org.freedesktop.DBus", - "/org/freedesktop/DBus") - self._dbus_obj.connect_to_signal("NameOwnerChanged", - self.gsd_name_owner_changed_callback, - arg0="org.gnome.SettingsDaemon") - - def register_mediakeys(self): - try: - try: - gsd_object = self._bus.get_object("org.gnome.SettingsDaemon.MediaKeys", - "/org/gnome/SettingsDaemon/MediaKeys") - except: - # Try older name. - gsd_object = self._bus.get_object("org.gnome.SettingsDaemon", - "/org/gnome/SettingsDaemon/MediaKeys") - gsd_object.GrabMediaPlayerKeys("mpDris2", 0, - dbus_interface="org.gnome.SettingsDaemon.MediaKeys") - except: - logger.warning( - "Failed to connect to GNOME Settings Daemon. Media keys won't work.") - else: - self._bus.remove_signal_receiver(self.mediakey_callback) - gsd_object.connect_to_signal( - "MediaPlayerKeyPressed", self.mediakey_callback) - - def gsd_name_owner_changed_callback(self, bus_name, old_owner, new_owner): - if bus_name == "org.gnome.SettingsDaemon" and new_owner != "": - def reregister(): - logger.debug( - "Re-registering with GNOME Settings Daemon (owner %s)" % new_owner) - self.register_mediakeys() - return False - # Timeout is necessary since g-s-d takes some time to load all plugins. - GLib.timeout_add(600, reregister) + logger.info('nextsongid changed') # Compatibility functions @@ -999,355 +644,6 @@ class MPDWrapper(object): return False -class NotifyWrapper(object): - - def __init__(self, params): - self._notification = None - self._enabled = True - - if params["notify"]: - self._notification = self._bootstrap_notifications() - if not self._notification: - logger.error( - "No notification service provider could be found; disabling notifications") - else: - self._enabled = False - - def _bootstrap_notifications(self): - # Check if someone is providing the notification service - bus = dbus.SessionBus() - try: - bus.get_name_owner("org.freedesktop.Notifications") - except dbus.exceptions.DBusException: - return None - - notif = None - - # Bootstrap whatever notifications system we are using - if using_gi_notify: - logger.debug("Initializing GObject.Notify") - if Notify.init(identity): - notif = Notify.Notification() - notif.set_hint("desktop-entry", GLib.Variant("s", "mpdris2")) - notif.set_hint("transient", GLib.Variant("b", True)) - else: - logger.error( - "Failed to init libnotify; disabling notifications") - elif using_old_notify: - logger.debug("Initializing old pynotify") - if pynotify.init(identity): - notif = pynotify.Notification("", "", "") - notif.set_hint("desktop-entry", "mpdris2") - notif.set_hint("transient", True) - else: - logger.error( - "Failed to init libnotify; disabling notifications") - - return notif - - def notify(self, title, body, uri=''): - if not self._enabled: - return - - # If we did not yet manage to get a notification service, - # try again - if not self._notification: - logger.info( - 'Retrying to acquire a notification service provider...') - self._notification = self._bootstrap_notifications() - if self._notification: - logger.info('Notification service provider acquired!') - - if self._notification: - try: - self._notification.set_urgency(params['notify_urgency']) - self._notification.update(title, body, uri) - self._notification.show() - except GLib.GError as err: - logger.error("Failed to show notification: %s" % err) - - -class MPRISInterface(dbus.service.Object): - ''' The base object of an MPRIS player ''' - - __path = "/org/mpris/MediaPlayer2" - __introspect_interface = "org.freedesktop.DBus.Introspectable" - __prop_interface = dbus.PROPERTIES_IFACE - - def __init__(self, params): - dbus.service.Object.__init__(self, dbus.SessionBus(), - MPRISInterface.__path) - self._params = params or {} - self._name = self._params["bus_name"] or "org.mpris.MediaPlayer2.mpd" - if not self._name.startswith("org.mpris.MediaPlayer2."): - logger.warn( - "Configured bus name %r is outside MPRIS2 namespace" % self._name) - - self._bus = dbus.SessionBus() - self._uname = self._bus.get_unique_name() - self._dbus_obj = self._bus.get_object("org.freedesktop.DBus", - "/org/freedesktop/DBus") - self._dbus_obj.connect_to_signal("NameOwnerChanged", - self._name_owner_changed_callback, - arg0=self._name) - - self.acquire_name() - - def _name_owner_changed_callback(self, name, old_owner, new_owner): - if name == self._name and old_owner == self._uname and new_owner != "": - try: - pid = self._dbus_obj.GetConnectionUnixProcessID(new_owner) - except: - pid = None - logger.info("Replaced by %s (PID %s)" % - (new_owner, pid or "unknown")) - loop.quit() - - def acquire_name(self): - self._bus_name = dbus.service.BusName(self._name, - bus=self._bus, - allow_replacement=True, - replace_existing=True) - - def release_name(self): - if hasattr(self, "_bus_name"): - del self._bus_name - - __root_interface = "org.mpris.MediaPlayer2" - __root_props = { - "CanQuit": (False, None), - "CanRaise": (False, None), - "DesktopEntry": ("mpdris2", None), - "HasTrackList": (False, None), - "Identity": (identity, None), - "SupportedUriSchemes": (dbus.Array(signature="s"), None), - "SupportedMimeTypes": (dbus.Array(signature="s"), None) - } - - def __get_playback_status(): - status = mpd_wrapper.last_status() - return {'play': 'Playing', 'pause': 'Paused', 'stop': 'Stopped'}[status['state']] - - def __set_loop_status(value): - if value == "Playlist": - mpd_wrapper.repeat(1) - if mpd_wrapper._can_single: - mpd_wrapper.single(0) - elif value == "Track": - if mpd_wrapper._can_single: - mpd_wrapper.repeat(1) - mpd_wrapper.single(1) - elif value == "None": - mpd_wrapper.repeat(0) - if mpd_wrapper._can_single: - mpd_wrapper.single(0) - else: - raise dbus.exceptions.DBusException("Loop mode %r not supported" % - value) - return - - def __get_loop_status(): - status = mpd_wrapper.last_status() - if int(status['repeat']) == 1: - if int(status.get('single', 0)) == 1: - return "Track" - else: - return "Playlist" - else: - return "None" - - def __set_shuffle(value): - mpd_wrapper.random(value) - return - - def __get_shuffle(): - if int(mpd_wrapper.last_status()['random']) == 1: - return True - else: - return False - - def __get_metadata(): - return dbus.Dictionary(mpd_wrapper.metadata, signature='sv') - - def __get_volume(): - vol = float(mpd_wrapper.last_status().get('volume', 0)) - if vol > 0: - return vol / 100.0 - else: - return 0.0 - - def __set_volume(value): - if value >= 0 and value <= 1: - mpd_wrapper.setvol(int(value * 100)) - return - - def __get_position(): - status = mpd_wrapper.last_status() - if 'time' in status: - current, end = status['time'].split(':') - return dbus.Int64((int(current) * 1000000)) - else: - return dbus.Int64(0) - - __player_interface = "org.mpris.MediaPlayer2.Player" - __player_props = { - "PlaybackStatus": (__get_playback_status, None), - "LoopStatus": (__get_loop_status, __set_loop_status), - "Rate": (1.0, None), - "Shuffle": (__get_shuffle, __set_shuffle), - "Metadata": (__get_metadata, None), - "Volume": (__get_volume, __set_volume), - "Position": (__get_position, None), - "MinimumRate": (1.0, None), - "MaximumRate": (1.0, None), - "CanGoNext": (True, None), - "CanGoPrevious": (True, None), - "CanPlay": (True, None), - "CanPause": (True, None), - "CanSeek": (True, None), - "CanControl": (True, None), - } - - __tracklist_interface = "org.mpris.MediaPlayer2.TrackList" - - __prop_mapping = { - __player_interface: __player_props, - __root_interface: __root_props, - } - - @dbus.service.method(__introspect_interface) - def Introspect(self): - return MPRIS2_INTROSPECTION - - @dbus.service.signal(__prop_interface, signature="sa{sv}as") - def PropertiesChanged(self, interface, changed_properties, - invalidated_properties): - pass - - @dbus.service.method(__prop_interface, - in_signature="ss", out_signature="v") - def Get(self, interface, prop): - getter, setter = self.__prop_mapping[interface][prop] - if callable(getter): - return getter() - return getter - - @dbus.service.method(__prop_interface, - in_signature="ssv", out_signature="") - def Set(self, interface, prop, value): - getter, setter = self.__prop_mapping[interface][prop] - if setter is not None: - setter(value) - - @dbus.service.method(__prop_interface, - in_signature="s", out_signature="a{sv}") - def GetAll(self, interface): - read_props = {} - props = self.__prop_mapping[interface] - for key, (getter, setter) in props.items(): - if callable(getter): - getter = getter() - read_props[key] = getter - return read_props - - def update_property(self, interface, prop): - getter, setter = self.__prop_mapping[interface][prop] - if callable(getter): - value = getter() - else: - value = getter - logger.debug('Updated property: %s = %s' % (prop, value)) - self.PropertiesChanged(interface, {prop: value}, []) - return value - - # Root methods - @dbus.service.method(__root_interface, in_signature='', out_signature='') - def Raise(self): - return - - @dbus.service.method(__root_interface, in_signature='', out_signature='') - def Quit(self): - return - - # Player methods - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def Next(self): - mpd_wrapper.next() - return - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def Previous(self): - mpd_wrapper.previous() - return - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def Pause(self): - mpd_wrapper.pause(1) - mpd_wrapper.notify_about_state('pause') - return - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def PlayPause(self): - status = mpd_wrapper.status() - if status['state'] == 'play': - mpd_wrapper.pause(1) - mpd_wrapper.notify_about_state('pause') - else: - mpd_wrapper.play() - mpd_wrapper.notify_about_state('play') - return - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def Stop(self): - mpd_wrapper.stop() - mpd_wrapper.notify_about_state('stop') - return - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def Play(self): - mpd_wrapper.play() - mpd_wrapper.notify_about_state('play') - return - - @dbus.service.method(__player_interface, in_signature='x', out_signature='') - def Seek(self, offset): - status = mpd_wrapper.status() - current, end = status['time'].split(':') - current = int(current) - end = int(end) - offset = int(offset) / 1000000 - if current + offset <= end: - position = current + offset - if position < 0: - position = 0 - mpd_wrapper.seekid(int(status['songid']), position) - self.Seeked(position * 1000000) - return - - @dbus.service.method(__player_interface, in_signature='ox', out_signature='') - def SetPosition(self, trackid, position): - song = mpd_wrapper.last_currentsong() - # FIXME: use real dbus objects - if str(trackid) != '/org/mpris/MediaPlayer2/Track/%s' % song['id']: - return - # Convert position to seconds - position = int(position) / 1000000 - if position <= int(song['time']): - mpd_wrapper.seekid(int(song['id']), position) - self.Seeked(position * 1000000) - return - - @dbus.service.signal(__player_interface, signature='x') - def Seeked(self, position): - logger.debug("Seeked to %i" % position) - return float(position) - - @dbus.service.method(__player_interface, in_signature='', out_signature='') - def OpenUri(self): - # TODO - return - - def each_xdg_config(suffix): """ Return each location matching XDG_CONFIG_DIRS/suffix in descending @@ -1438,7 +734,7 @@ if __name__ == '__main__': # Parse command line try: (opts, args) = getopt.getopt(sys.argv[1:], 'c:dh:jp:v', - ['help', 'bus-name=', 'config=', + ['help', 'config=', 'debug', 'host=', 'music-dir=', 'use-journal', 'path=', 'port=', 'version']) @@ -1453,8 +749,6 @@ if __name__ == '__main__': if opt in ['--help']: usage(params) sys.exit() - elif opt in ['--bus-name']: - params['bus_name'] = arg elif opt in ['-c', '--config']: config_file = arg elif opt in ['-d', '--debug']: @@ -1520,7 +814,7 @@ if __name__ == '__main__': config.read(['/etc/mpDris2.conf'] + list(reversed(each_xdg_config('mpDris2/mpDris2.conf')))) - for p in ['host', 'port', 'password', 'bus_name']: + for p in ['host', 'port', 'password']: if not params[p]: # TODO: switch to get(fallback=…) when possible if config.has_option('Connection', p): @@ -1533,13 +827,6 @@ if __name__ == '__main__': params['host'] = os.path.expanduser(params['host']) - for p in ['mmkeys', 'notify']: - if config.has_option('Bling', p): - params[p] = config.getboolean('Bling', p) - - if config.has_option('Bling', 'notify_urgency'): - params['notify_urgency'] = int(config.get('Bling', 'notify_urgency')) - if not music_dir: if config.has_option('Library', 'music_dir'): music_dir = config.get('Library', 'music_dir') @@ -1585,9 +872,6 @@ if __name__ == '__main__': logger.debug('Using legacy pygobject2 main loop.') loop = GLib.MainLoop() - # Wrapper to send notifications - notification = NotifyWrapper(params) - # Create wrapper to handle connection failures with MPD more gracefully mpd_wrapper = MPDWrapper(params) mpd_wrapper.run()