Added mpd backend
This commit is contained in:
parent
76f7bbc529
commit
4fa7a08006
4 changed files with 97 additions and 0 deletions
0
platypush/backend/music/__init__.py
Normal file
0
platypush/backend/music/__init__.py
Normal file
61
platypush/backend/music/mpd/__init__.py
Normal file
61
platypush/backend/music/mpd/__init__.py
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
|
from platypush.backend import Backend
|
||||||
|
from platypush.context import get_plugin
|
||||||
|
from platypush.message.event.music import \
|
||||||
|
MusicPlayEvent, MusicPauseEvent, MusicStopEvent, NewPlayingTrackEvent
|
||||||
|
|
||||||
|
|
||||||
|
class MusicMpdBackend(Backend):
|
||||||
|
def __init__(self, server='localhost', port=6600, poll_seconds=3, **kwargs):
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
self.server = server
|
||||||
|
self.port = port
|
||||||
|
self.poll_seconds = poll_seconds
|
||||||
|
|
||||||
|
|
||||||
|
def send_message(self, msg):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
super().run()
|
||||||
|
|
||||||
|
plugin = get_plugin('music.mpd')
|
||||||
|
last_state = None
|
||||||
|
last_track = None
|
||||||
|
|
||||||
|
while not self.should_stop():
|
||||||
|
status = plugin.status().output
|
||||||
|
state = status['state'].lower()
|
||||||
|
track = plugin.currentsong().output
|
||||||
|
|
||||||
|
if state != last_state:
|
||||||
|
if state == 'stop':
|
||||||
|
self.bus.post(MusicStopEvent(status=status, track=track))
|
||||||
|
elif state == 'pause':
|
||||||
|
self.bus.post(MusicPauseEvent(status=status, track=track))
|
||||||
|
elif state == 'play':
|
||||||
|
self.bus.post(MusicPlayEvent(status=status, track=track))
|
||||||
|
|
||||||
|
if 'title' in track and ('artist' not in track
|
||||||
|
or not track['artist']
|
||||||
|
or re.search('^tunein:', track_info['file'])):
|
||||||
|
m = re.match('^\s*(.+?)\s+-\s+(.*)\s*$', track['title'])
|
||||||
|
if m and m.group(1) and m.group(2):
|
||||||
|
track['artist'] = m.group(1)
|
||||||
|
track['title'] = m.group(2)
|
||||||
|
|
||||||
|
if state == 'play' and track != last_track:
|
||||||
|
self.bus.post(NewPlayingTrackEvent(status=status, track=track))
|
||||||
|
|
||||||
|
last_state = state
|
||||||
|
last_track = track
|
||||||
|
time.sleep(self.poll_seconds)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
32
platypush/message/event/music/__init__.py
Normal file
32
platypush/message/event/music/__init__.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from platypush.message.event import Event
|
||||||
|
|
||||||
|
|
||||||
|
class MusicEvent(Event):
|
||||||
|
""" Base class for music events """
|
||||||
|
|
||||||
|
def __init__(self, status, track, *args, **kwargs):
|
||||||
|
super().__init__(*args, status=status, track=track, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MusicPlayEvent(MusicEvent):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MusicStopEvent(MusicEvent):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MusicPauseEvent(MusicEvent):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class NewPlayingTrackEvent(MusicEvent):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
|
@ -83,5 +83,9 @@ class MusicMpdPlugin(MusicPlugin):
|
||||||
def status(self):
|
def status(self):
|
||||||
return Response(output=self.client.status())
|
return Response(output=self.client.status())
|
||||||
|
|
||||||
|
def currentsong(self):
|
||||||
|
return Response(output=self.client.currentsong())
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue