Further changes and fixes in MPC support, pushed filename to manager

This commit is contained in:
Tomasz Fluxid Kowalczyk 2012-02-03 22:33:09 +01:00
parent 8ed7f061bc
commit 423ac2252c
5 changed files with 32 additions and 17 deletions

View File

@ -17,6 +17,6 @@ if __name__ == '__main__':
else:
port = 8999
manager = client.Manager(host, port, name, lambda: mpc.MPCHCPlayer(manager))
manager = client.Manager(host, port, name, lambda m: mpc.run_mpc(m))
manager.start()

View File

@ -19,6 +19,6 @@ if __name__ == '__main__':
args.extend(('-slave', '-msglevel', 'all=1:global=4'))
manager = client.Manager(host, port, name, lambda: mplayer.run_mplayer(manager, 'mplayer', args))
manager = client.Manager(host, port, name, lambda m: mplayer.run_mplayer(m, 'mplayer', args))
manager.start()

View File

@ -96,6 +96,7 @@ class Manager(object):
self.player_position = 0.0
self.last_player_update = None
self.player_speed_fix = False
self.player_filename = None
self.make_player = make_player
self.running = False
@ -139,8 +140,9 @@ class Manager(object):
return position
def init_player(self, player):
def init_player(self, player, filename=None):
self.player = player
self.player_filename = filename
if self.last_global_update:
self.player.set_position(self.get_global_position())
self.player.set_paused(self.global_paused)
@ -149,7 +151,7 @@ class Manager(object):
def init_protocol(self, protocol):
self.protocol = protocol
self.schedule_send_status()
self.make_player()
self.make_player(self)
def schedule_ask_player(self, when=0.2):

View File

@ -70,11 +70,16 @@ class MPCHCPlayer(object):
self.manager = manager
self.host = 'localhost:13579'
self.filename = None # To be moved to Manager
self.pinged = False
manager.player = self
self.agent = Agent(reactor)
def drop(self):
pass
def make_ping(self):
self.ask_for_status()
def set_paused(self, value):
self.send_post_request('wm_command=%d' % (888 if value else 887))
@ -87,8 +92,6 @@ class MPCHCPlayer(object):
hours, minutes, seconds, mseconds
))
self.send_post_request(body)
def status_response(self, status, headers, body):
m = RE_MPC_STATUS.match(body)
if not m:
@ -98,19 +101,21 @@ class MPCHCPlayer(object):
paused = PLAYING_STATUSES.get(paused)
if paused is None:
return
if self.filename is None:
self.filename = filename
position = float(position)/1000
self.manager.update_player_status(paused, position)
if self.pinged:
self.manager.update_player_status(paused, position)
else:
self.pinged = True
self.manager.init_player(self, filename)
def ask_for_status(self, propertyName):
def ask_for_status(self):
request = self.agent.request(
'GET',
'http://localhost:13579/status.html',
Headers(),
None,
)
request.addCallback(handle_response(self.status_response))
request.addCallbacks(handle_response(self.status_response), self.mpc_error)
def send_post_request(self, body):
request = self.agent.request(
@ -119,5 +124,15 @@ class MPCHCPlayer(object):
Headers({'Content-Type': ['application/x-www-form-urlencoded']}),
BodyProducer(body),
)
request.addCallback(handle_response(null_response_handler))
request.addCallbacks(handle_response(null_response_handler), self.mpc_error)
def mpc_error(self, error):
if self.manager.running:
print 'Failed to connect to MPC-HC web interface'
self.manager.stop()
def run_mpc(manager, host=None):
mpc = MPCHCPlayer(manager, host)
mpc.make_ping()

View File

@ -19,7 +19,6 @@ class MplayerProtocol(LineProcessProtocol):
self.manager = manager
self.ignore_end = False
self.error_lines = deque(maxlen=50)
self.filename = None # To be moved to Manager
self.tmp_paused = None
def connectionMade(self):
@ -61,7 +60,6 @@ class MplayerProtocol(LineProcessProtocol):
self.set_paused(True)
self.set_position(0)
self.send_get_filename()
self.manager.init_player(self)
def ask_for_status(self):
self.send_get_paused()
@ -79,7 +77,7 @@ class MplayerProtocol(LineProcessProtocol):
self.send_get_property('filename')
def mplayer_answer_filename(self, value):
self.filename = value
self.manager.init_player(self, value)
def set_paused(self, value):