# -*- coding: utf-8 -*-
-# Copyright (c) 2014 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2014, 2020 kaliko <kaliko@azylum.org>
#
# This file is part of sima
#
# third parties components
# local import
+from ...mpdclient import PlayerError
from ...lib.plugin import Plugin
Plugin.__init__(self, daemon)
self.chan = 'mpd_sima:{0}.{1}'.format(getfqdn(), getpid())
self.channels = []
- self.uniq = True
+ self._registred = False
def start(self):
if not self.is_capable():
self.log.warning('MPD does not provide client to client')
return
self.is_uniq()
- self.sub_chan()
+ if not self._registred:
+ self.sub_chan()
def is_capable(self):
- if 'channels' in self.player.commands():
- return True
+ # Groove Basin compatibility
+ # For some reason Groove Basin have channels command but no
+ # subscribe command‽
+ return {'channels', 'subscribe'}.issubset(set(self.player.commands()))
def get_channels(self):
return [chan for chan in self.player.channels() if
if channels:
self.log.warning('Another instance is queueing on this MPD host')
self.log.warning(' '.join(channels))
- self.uniq = False
def sub_chan(self):
- self.log.debug('Registering as {}'.format(self.chan))
- self.player.subscribe(self.chan)
+ self.log.debug('Registering as %s', self.chan)
+ try:
+ self.player.subscribe(self.chan)
+ self._registred = True
+ except PlayerError as err:
+ self.log.error('Failed to register: %s', err)
def callback_need_track(self):
if self.is_capable():