From 76b9b3e47478c75cedc2c7cc47514f0a2de8c560 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Mon, 18 Mar 2019 11:57:08 -0700 Subject: [PATCH] Improve terminate stream error messages --- plexpy/plextv.py | 4 ++++ plexpy/pmsconnect.py | 34 +++++++++++++++++++++++++--------- plexpy/webserve.py | 6 ++++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/plexpy/plextv.py b/plexpy/plextv.py index 433f86bd..1405a937 100644 --- a/plexpy/plextv.py +++ b/plexpy/plextv.py @@ -842,9 +842,13 @@ class PlexTV(object): return False if subscription and helpers.get_xml_attr(subscription[0], 'active') == '1': + plexpy.CONFIG.__setattr__('PMS_PLEXPASS', 1) + plexpy.CONFIG.write() return True else: logger.debug(u"Tautulli PlexTV :: Plex Pass subscription not found.") + plexpy.CONFIG.__setattr__('PMS_PLEXPASS', 0) + plexpy.CONFIG.write() return False def get_devices_list(self): diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 734d676d..fcb08b5d 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -101,7 +101,7 @@ class PmsConnect(object): Output: array """ - uri = '/status/sessions/terminate?sessionId=%s&reason=%s' % (session_id, reason) + uri = '/status/sessions/terminate?sessionId=%s&reason=%s' % (session_id, urllib.quote_plus(reason)) request = self.request_handler.make_request(uri=uri, request_type='GET', output_format=output_format) @@ -2018,25 +2018,41 @@ class PmsConnect(object): Output: bool """ - message = message.encode('utf-8') or 'The server owner has ended the stream.' + plex_tv = plextv.PlexTV() + if not plex_tv.get_plexpass_status(): + msg = 'No Plex Pass subscription' + logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg) + return msg - if session_key and not session_id: + message = message.encode('utf-8') or 'The server owner has ended the stream.' + session = None + + if not session_key and not session_id: + session_key = session_id = None + + elif session_key and not session_id: ap = activity_processor.ActivityProcessor() session = ap.get_session_by_key(session_key=session_key) - session_id = session['session_id'] + session_id = session['session_id'] if session else None elif session_id and not session_key: ap = activity_processor.ActivityProcessor() session = ap.get_session_by_id(session_id=session_id) - session_key = session['session_key'] + session_key = session['session_key'] if session else None + + if not session: + msg = 'Invalid session_key (%s) or session_id (%s)' % (session_key, session_id) + logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg) + return msg if session_id: logger.info(u"Tautulli Pmsconnect :: Terminating session %s (session_id %s)." % (session_key, session_id)) - result = self.get_sessions_terminate(session_id=session_id, reason=urllib.quote_plus(message)) - return result + result = self.get_sessions_terminate(session_id=session_id, reason=message) + return True else: - logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session %s. Missing session_id." % session_key) - return False + msg = 'Missing session_id' + logger.warn(u"Tautulli Pmsconnect :: Failed to terminate session: %s." % msg) + return msg def get_item_children(self, rating_key='', get_grandchildren=False): """ diff --git a/plexpy/webserve.py b/plexpy/webserve.py index ff8986af..2174bea1 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -246,7 +246,7 @@ class WebInterface(object): @cherrypy.tools.json_out() @requireAuth(member_of("admin")) @addtoapi() - def terminate_session(self, session_key=None, session_id=None, message=None, **kwargs): + def terminate_session(self, session_key='', session_id='', message='', **kwargs): """ Stop a streaming session. ``` @@ -264,8 +264,10 @@ class WebInterface(object): pms_connect = pmsconnect.PmsConnect() result = pms_connect.terminate_session(session_key=session_key, session_id=session_id, message=message) - if result: + if result is True: return {'result': 'success', 'message': 'Session terminated.'} + elif result: + return {'result': 'error', 'message': 'Failed to terminate session: {}.'.format(result)} else: return {'result': 'error', 'message': 'Failed to terminate session.'}