platypush/platypush/plugins/music/mpd/__init__.py

102 lines
2.5 KiB
Python
Raw Normal View History

import mpd
from platypush.message.response import Response
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
self.client = mpd.MPDClient(use_unicode=True)
2017-12-18 01:10:51 +01:00
self.client.connect(self.host, self.port)
def _exec(self, method, *args, **kwargs):
getattr(self.client, method)(*args, **kwargs)
return self.status()
def play(self, resource=None):
if resource:
self.clear()
self.add(resource)
return self._exec('play')
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')
def stop(self):
return self._exec('stop')
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')
2017-11-03 15:06:29 +01:00
def next(self):
return self._exec('next')
2017-11-03 15:06:29 +01:00
def previous(self):
return self._exec('previous')
2017-11-03 15:06:29 +01:00
def setvol(self, vol):
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()
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)
return self.play()
2017-11-03 15:06:29 +01:00
def clear(self):
return self._exec('clear')
2017-11-03 15:06:29 +01:00
def forward(self):
return self._exec('seekcur', '+15')
def back(self):
return self._exec('seekcur', '-15')
def status(self):
return Response(output=self.client.status())
2018-01-13 02:52:06 +01:00
def currentsong(self):
return Response(output=self.client.currentsong())
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-01-13 02:52:06 +01:00
# vim:sw=4:ts=4:et: