summaryrefslogtreecommitdiff
path: root/plugins/mpd_client.py
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2013-03-11 02:09:04 +0100
committermathieui <mathieui@mathieui.net>2013-03-11 02:09:04 +0100
commit4deee7cb0bbf8d22ca98d8c15cf7d79dfa70776b (patch)
tree4069e6f1a5137629d8ee2a0f71b867ed5dd910cb /plugins/mpd_client.py
parent71c35eb279b2271b89896dcff551ba762f66b3a5 (diff)
downloadpoezio-4deee7cb0bbf8d22ca98d8c15cf7d79dfa70776b.tar.gz
poezio-4deee7cb0bbf8d22ca98d8c15cf7d79dfa70776b.tar.bz2
poezio-4deee7cb0bbf8d22ca98d8c15cf7d79dfa70776b.tar.xz
poezio-4deee7cb0bbf8d22ca98d8c15cf7d79dfa70776b.zip
Implement user-tune publishing in the mpd plugin (#1840)
Diffstat (limited to 'plugins/mpd_client.py')
-rw-r--r--plugins/mpd_client.py56
1 files changed, 53 insertions, 3 deletions
diff --git a/plugins/mpd_client.py b/plugins/mpd_client.py
index c215e971..a7064e09 100644
--- a/plugins/mpd_client.py
+++ b/plugins/mpd_client.py
@@ -5,6 +5,48 @@ from common import shell_split
from os.path import basename as base
import tabs
import mpd
+import threading
+from select import select
+from time import sleep
+
+class UpdateThread(threading.Thread):
+ """
+ Background thread that awaits mpd changes
+ """
+
+ def __init__(self, plugin, xmpp):
+ threading.Thread.__init__(self)
+ self.plugin = plugin
+ self.xmpp = xmpp
+ self.alive = False
+ self.c = mpd.MPDClient()
+
+ def run(self, *args, **kwargs):
+ self.alive = True
+ while self.alive:
+ try:
+ self.c.connect(host=self.plugin.config.get('host', 'localhost'), port=self.plugin.config.get('port', '6600'))
+ password = self.plugin.config.get('password', '')
+ if password:
+ self.c.password(password)
+ self.c.send_idle()
+ select([self.c], [], [])
+ self.c.fetch_idle()
+ status = self.c.status()
+ if status['state'] == 'play' and self.alive:
+ song = self.c.currentsong()
+ self.xmpp.plugin['xep_0118'].publish_tune(artist=song.get('artist'),
+ length=song.get('time'), title=song.get('title'),
+ track=song.get('track'), block=False)
+ self.c.disconnect()
+ except:
+ pass
+ finally:
+ try:
+ self.c.disconnect()
+ except:
+ pass
+ sleep(8)
class Plugin(BasePlugin):
def init(self):
@@ -14,6 +56,15 @@ class Plugin(BasePlugin):
help='Sends a message showing the current song of an MPD instance. If full is provided, the message is more verbose.',
short='Send the MPD status',
completion=self.completion_mpd)
+ if self.config.get('broadcast', 'true').lower() != 'false':
+ self.core.xmpp.register_plugin('xep_0118')
+ self.thread = UpdateThread(plugin=self, xmpp=self.core.xmpp)
+ self.thread.start()
+
+ def cleanup(self):
+ self.thread.alive = False
+ self.thread.c.disconnect()
+ self.core.xmpp.plugin['xep_0118'].stop(block=False)
def command_mpd(self, args):
args = shell_split(args)
@@ -27,13 +78,12 @@ class Plugin(BasePlugin):
album = current.get('album', 'Unknown album')
title = current.get('title', base(current.get('file', 'Unknown title')))
-
s = '%s - %s (%s)' % (artist, title, album)
if 'full' in args:
if 'elapsed' in current and 'time' in current:
current_time = float(c.status()['elapsed'])
- pourcentage = int(current_time / float(current['time']) * 10)
- s += ' \x192}[\x191}' + '-'*(pourcentage-1) + '\x193}+' + '\x191}' + '-' * (10-pourcentage-1) + '\x192}]\x19o'
+ percents = int(current_time / float(current['time']) * 10)
+ s += ' \x192}[\x191}' + '-'*(percents-1) + '\x193}+' + '\x191}' + '-' * (10-percents-1) + '\x192}]\x19o'
if not self.api.send_message('%s' % (s,)):
self.api.information('Cannot send result (%s)' % s, 'Error')