From 423ac2252cc76d9c144d189873388e169e228c21 Mon Sep 17 00:00:00 2001 From: Tomasz Fluxid Kowalczyk Date: Fri, 3 Feb 2012 22:33:09 +0100 Subject: [PATCH] Further changes and fixes in MPC support, pushed filename to manager --- sync_mpc.py | 2 +- sync_mplayer.py | 2 +- syncplay/client.py | 6 ++++-- syncplay/players/mpc.py | 35 +++++++++++++++++++++++++---------- syncplay/players/mplayer.py | 4 +--- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/sync_mpc.py b/sync_mpc.py index 4bf5bfb..f938351 100644 --- a/sync_mpc.py +++ b/sync_mpc.py @@ -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() diff --git a/sync_mplayer.py b/sync_mplayer.py index 96a779e..7a08cc2 100644 --- a/sync_mplayer.py +++ b/sync_mplayer.py @@ -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() diff --git a/syncplay/client.py b/syncplay/client.py index 8330a50..0bc2fd4 100644 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -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): diff --git a/syncplay/players/mpc.py b/syncplay/players/mpc.py index d30ea64..2ccf021 100644 --- a/syncplay/players/mpc.py +++ b/syncplay/players/mpc.py @@ -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() diff --git a/syncplay/players/mplayer.py b/syncplay/players/mplayer.py index 2e36900..71eaae2 100644 --- a/syncplay/players/mplayer.py +++ b/syncplay/players/mplayer.py @@ -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):