forked from platypush/platypush
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):
|
||||
return Response(output=self.client.status())
|
||||
|
||||
def currentsong(self):
|
||||
return Response(output=self.client.currentsong())
|
||||
|
||||
|
||||
# vim:sw=4:ts=4:et:
|
||||
|
||||
|
|
Loading…
Reference in a new issue