diff --git a/resources/lib/PlexCompanion.py b/resources/lib/PlexCompanion.py index 7d012ba0..25a6a78a 100644 --- a/resources/lib/PlexCompanion.py +++ b/resources/lib/PlexCompanion.py @@ -157,11 +157,14 @@ class PlexCompanion(Thread): def run(self): """ - Ensure that sockets will be closed no matter what + Ensure that + - STOP sent to PMS + - sockets will be closed no matter what """ try: self._run() finally: + self.subscription_manager.signal_stop() try: self.httpd.socket.shutdown(SHUT_RDWR) except AttributeError: @@ -184,6 +187,7 @@ class PlexCompanion(Thread): request_mgr = httppersist.RequestMgr() subscription_manager = subscribers.SubscriptionMgr( request_mgr, self.player, self.mgr) + self.subscription_manager = subscription_manager queue = Queue(maxsize=100) self.queue = queue diff --git a/resources/lib/plexbmchelper/subscribers.py b/resources/lib/plexbmchelper/subscribers.py index c773dbb7..b37ddad6 100644 --- a/resources/lib/plexbmchelper/subscribers.py +++ b/resources/lib/plexbmchelper/subscribers.py @@ -98,6 +98,16 @@ class SubscriptionMgr(object): LOG.debug('msg is: %s', msg) return msg + def signal_stop(self): + """ + Externally called on PKC shutdown to ensure that PKC signals a stop to + the PMS. Otherwise, PKC might be stuck at "currently playing" + """ + LOG.info('Signaling a complete stop to PMS') + for _, player in self.lastplayers.iteritems(): + self.last_params['state'] = 'stopped' + self._send_pms_notification(player['playerid'], self.last_params) + def _get_container_key(self, playerid): key = None playlistid = state.PLAYER_STATES[playerid]['playlistid'] @@ -233,7 +243,7 @@ class SubscriptionMgr(object): except KeyError: pass # Process the players we have left (to signal a stop) - for typus, player in self.lastplayers.iteritems(): + for _, player in self.lastplayers.iteritems(): self.last_params['state'] = 'stopped' self._send_pms_notification(player['playerid'], self.last_params)