mirror of
https://github.com/badaix/snapcast.git
synced 2025-08-03 16:48:52 +02:00
Communicate via stdin/stdout with ctrl script
This commit is contained in:
parent
91ea368121
commit
6e6b63ec26
5 changed files with 226 additions and 82 deletions
|
@ -308,6 +308,7 @@ class MPDWrapper(object):
|
|||
self._metadata = {}
|
||||
self._position = 0
|
||||
self._time = 0
|
||||
self._req_id = 0
|
||||
|
||||
self._bus = dbus.SessionBus()
|
||||
if self._params['mmkeys']:
|
||||
|
@ -458,10 +459,14 @@ class MPDWrapper(object):
|
|||
# def last_currentsong(self):
|
||||
# return self._currentsong.copy()
|
||||
|
||||
def control(self, command): # , param = ""):
|
||||
logger.info(f'Control: {command}')
|
||||
requests.post(f'http://{params["host"]}:{params["port"]}/jsonrpc', json={
|
||||
"id": 1, "jsonrpc": "2.0", "method": "Stream.Control", "params": {"id": "Pipe", "command": command}})
|
||||
def control(self, command, params={}):
|
||||
j = {"id": self._req_id, "jsonrpc": "2.0", "method": "Stream.Control",
|
||||
"params": {"id": "Pipe", "command": command, "params": params}}
|
||||
logger.info(f'Control: {command}, json: {j}')
|
||||
url = f'http://{self._params["host"]}:{self._params["port"]}/jsonrpc'
|
||||
logger.info(f'url: {url}')
|
||||
self._req_id += 1
|
||||
requests.post(url, json=j)
|
||||
|
||||
@property
|
||||
def metadata(self):
|
||||
|
@ -626,6 +631,7 @@ class MPDWrapper(object):
|
|||
class NotifyWrapper(object):
|
||||
|
||||
def __init__(self, params):
|
||||
self._last_notification = None
|
||||
self._notification = None
|
||||
self._enabled = True
|
||||
|
||||
|
@ -673,6 +679,11 @@ class NotifyWrapper(object):
|
|||
if not self._enabled:
|
||||
return
|
||||
|
||||
if self._last_notification == [title, body, uri]:
|
||||
return
|
||||
|
||||
self._last_notification = [title, body, uri]
|
||||
|
||||
# If we did not yet manage to get a notification service,
|
||||
# try again
|
||||
if not self._notification:
|
||||
|
@ -909,37 +920,38 @@ class MPRISInterface(dbus.service.Object):
|
|||
# Player methods
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def Next(self):
|
||||
snapcast_wrapper.control("next")
|
||||
snapcast_wrapper.control("Next")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def Previous(self):
|
||||
snapcast_wrapper.control("previous")
|
||||
snapcast_wrapper.control("Previous")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def Pause(self):
|
||||
snapcast_wrapper.control("pause")
|
||||
snapcast_wrapper.control("Pause")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def PlayPause(self):
|
||||
snapcast_wrapper.control("playpause")
|
||||
snapcast_wrapper.control("PlayPause")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def Stop(self):
|
||||
snapcast_wrapper.control("stop")
|
||||
snapcast_wrapper.control("Stop")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='', out_signature='')
|
||||
def Play(self):
|
||||
snapcast_wrapper.control("play")
|
||||
snapcast_wrapper.control("Play")
|
||||
return
|
||||
|
||||
@ dbus.service.method(__player_interface, in_signature='x', out_signature='')
|
||||
def Seek(self, offset):
|
||||
logger.info(f'Seek {offset}')
|
||||
snapcast_wrapper.control("Seek", {"Offset": offset})
|
||||
# status = mpd_wrapper.status()
|
||||
# current, end = status['time'].split(':')
|
||||
# current = int(current)
|
||||
|
@ -955,7 +967,11 @@ class MPRISInterface(dbus.service.Object):
|
|||
|
||||
@ dbus.service.method(__player_interface, in_signature='ox', out_signature='')
|
||||
def SetPosition(self, trackid, position):
|
||||
logger.info(f'SetPosition trackid: {trackid}, position: {position}')
|
||||
logger.info(f'SetPosition TrackId: {trackid}, Position: {position}')
|
||||
snapcast_wrapper.control(
|
||||
"SetPosition", {"TrackId": trackid, "Position": position})
|
||||
self.Seeked(position)
|
||||
|
||||
# song = mpd_wrapper.last_currentsong()
|
||||
# # FIXME: use real dbus objects
|
||||
# if str(trackid) != '/org/mpris/MediaPlayer2/Track/%s' % song['id']:
|
||||
|
@ -1018,6 +1034,9 @@ Report bugs to https://github.com/eonpatapon/mpDris2/issues""" % params)
|
|||
if __name__ == '__main__':
|
||||
DBusGMainLoop(set_as_default=True)
|
||||
|
||||
# TODO:
|
||||
# -cleanup: remove mpd-ish stuff
|
||||
# -stream id: keep track of the client's stream
|
||||
gettext.bindtextdomain('mpDris2', '@datadir@/locale')
|
||||
gettext.textdomain('mpDris2')
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue