2017-11-03 04:08:47 +01:00
|
|
|
import mpd
|
|
|
|
|
2017-12-13 04:21:26 +01:00
|
|
|
from platypush.message.response import Response
|
2017-12-13 03:37:28 +01:00
|
|
|
|
2017-11-03 04:08:47 +01:00
|
|
|
from .. import MusicPlugin
|
|
|
|
|
|
|
|
class MusicMpdPlugin(MusicPlugin):
|
2017-12-18 01:10:51 +01:00
|
|
|
def __init__(self, host, port):
|
|
|
|
"""
|
|
|
|
Constructor
|
|
|
|
Params:
|
|
|
|
host -- MPD host
|
|
|
|
port -- MPD port
|
|
|
|
"""
|
|
|
|
|
|
|
|
self.host = host
|
|
|
|
self.port = port
|
2017-11-03 04:08:47 +01:00
|
|
|
self.client = mpd.MPDClient(use_unicode=True)
|
2017-12-18 01:10:51 +01:00
|
|
|
self.client.connect(self.host, self.port)
|
2017-11-03 04:08:47 +01:00
|
|
|
|
2017-12-13 03:37:28 +01:00
|
|
|
def _exec(self, method, *args, **kwargs):
|
|
|
|
getattr(self.client, method)(*args, **kwargs)
|
|
|
|
return self.status()
|
|
|
|
|
2017-12-27 10:18:51 +01:00
|
|
|
def play(self, resource=None):
|
|
|
|
if resource:
|
|
|
|
self.clear()
|
|
|
|
self.add(resource)
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('play')
|
2017-11-03 04:08:47 +01:00
|
|
|
|
|
|
|
def pause(self):
|
2017-12-24 13:15:37 +01:00
|
|
|
status = self.status().output['state']
|
|
|
|
if status == 'play': return self._exec('pause')
|
|
|
|
else: return self._exec('play')
|
2017-11-03 04:08:47 +01:00
|
|
|
|
|
|
|
def stop(self):
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('stop')
|
2017-11-03 04:08:47 +01:00
|
|
|
|
2017-12-28 13:13:09 +01:00
|
|
|
def play_or_stop(self):
|
|
|
|
status = self.status().output['state']
|
|
|
|
if status == 'play': return self._exec('stop')
|
|
|
|
else: return self._exec('play')
|
|
|
|
|
2018-02-05 00:55:19 +01:00
|
|
|
def playid(self, track_id):
|
|
|
|
return self._exec('playid', track_id)
|
|
|
|
|
2017-11-03 15:06:29 +01:00
|
|
|
def next(self):
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('next')
|
2017-11-03 15:06:29 +01:00
|
|
|
|
|
|
|
def previous(self):
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('previous')
|
2017-11-03 15:06:29 +01:00
|
|
|
|
|
|
|
def setvol(self, vol):
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('setvol', vol)
|
2017-11-03 15:06:29 +01:00
|
|
|
|
2017-12-24 13:15:37 +01:00
|
|
|
def volup(self, delta=10):
|
|
|
|
volume = int(self.status().output['volume'])
|
|
|
|
new_volume = volume+delta
|
|
|
|
if new_volume <= 100:
|
|
|
|
self.setvol(str(new_volume))
|
|
|
|
return self.status()
|
|
|
|
|
|
|
|
def voldown(self, delta=10):
|
|
|
|
volume = int(self.status().output['volume'])
|
|
|
|
new_volume = volume-delta
|
|
|
|
if new_volume >= 0:
|
|
|
|
self.setvol(str(new_volume))
|
|
|
|
return self.status()
|
|
|
|
|
2018-01-31 01:32:07 +01:00
|
|
|
def random(self, value=None):
|
|
|
|
if value is None:
|
|
|
|
value = int(self.status().output['random'])
|
|
|
|
value = 1 if value == 0 else 0
|
2018-01-31 01:39:04 +01:00
|
|
|
return self._exec('random', value)
|
2018-01-31 01:32:07 +01:00
|
|
|
|
|
|
|
def repeat(self, value=None):
|
|
|
|
if value is None:
|
|
|
|
value = int(self.status().output['repeat'])
|
|
|
|
value = 1 if value == 0 else 0
|
2018-01-31 01:39:04 +01:00
|
|
|
return self._exec('repeat', value)
|
2018-01-31 01:32:07 +01:00
|
|
|
|
2017-12-27 10:18:51 +01:00
|
|
|
def add(self, resource):
|
|
|
|
return self._exec('add', resource)
|
2017-11-03 15:06:29 +01:00
|
|
|
|
2017-12-29 12:48:14 +01:00
|
|
|
def load(self, playlist):
|
|
|
|
self._exec('load', playlist)
|
2017-12-29 12:44:49 +01:00
|
|
|
return self.play()
|
2017-11-03 15:06:29 +01:00
|
|
|
|
|
|
|
def clear(self):
|
2017-12-13 03:37:28 +01:00
|
|
|
return self._exec('clear')
|
2017-11-03 15:06:29 +01:00
|
|
|
|
2018-01-31 10:35:14 +01:00
|
|
|
def seekcur(self, value):
|
|
|
|
return self._exec('seekcur', value)
|
|
|
|
|
2017-12-27 10:18:51 +01:00
|
|
|
def forward(self):
|
|
|
|
return self._exec('seekcur', '+15')
|
|
|
|
|
|
|
|
def back(self):
|
|
|
|
return self._exec('seekcur', '-15')
|
|
|
|
|
2017-11-03 04:08:47 +01:00
|
|
|
def status(self):
|
2017-12-13 03:37:28 +01:00
|
|
|
return Response(output=self.client.status())
|
2017-11-03 04:08:47 +01:00
|
|
|
|
2018-01-13 02:52:06 +01:00
|
|
|
def currentsong(self):
|
|
|
|
return Response(output=self.client.currentsong())
|
|
|
|
|
2018-01-30 00:54:46 +01:00
|
|
|
def playlistinfo(self):
|
|
|
|
return Response(output=self.client.playlistinfo())
|
|
|
|
|
|
|
|
def listplaylists(self):
|
|
|
|
return Response(output=sorted(self.client.listplaylists(),
|
|
|
|
key=lambda p: p['playlist']))
|
|
|
|
|
|
|
|
def lsinfo(self):
|
|
|
|
return Response(output=self.client.lsinfo())
|
|
|
|
|
2018-02-05 00:55:19 +01:00
|
|
|
def plchanges(self, version):
|
|
|
|
return Response(output=self.client.plchanges(version))
|
|
|
|
|
2018-01-13 02:52:06 +01:00
|
|
|
|
2017-11-03 04:08:47 +01:00
|
|
|
# vim:sw=4:ts=4:et:
|
|
|
|
|