diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 79b8530d..ef892a09 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -155,6 +155,22 @@ class PmsConnect(object): return request + def get_sessions_terminate(self, session_id='', reason='', output_format=''): + """ + Return current sessions. + + Optional parameters: output_format { dict, json } + + Output: array + """ + uri = '/status/sessions/terminate?sessionId=%s&reason=%s' % (session_id, reason) + request = self.request_handler.make_request(uri=uri, + proto=self.protocol, + request_type='GET', + output_format=output_format) + + return request + def get_metadata(self, rating_key='', output_format=''): """ Return metadata for request item. @@ -1360,6 +1376,21 @@ class PmsConnect(object): return session_output + def terminate_session(self, session_id='', message=''): + """ + Terminates a streaming session. + + Output: bool + """ + message = message or 'The server owner has ended the stream.' + + if session_id: + result = self.get_sessions_terminate(session_id=session_id, reason=urllib.quote_plus(message)) + return result + else: + return False + + def get_item_children(self, rating_key=''): """ Return processed and validated children list. diff --git a/plexpy/webserve.py b/plexpy/webserve.py index aa3aa0b8..2e11f9a2 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -280,6 +280,33 @@ class WebInterface(object): logger.warn(u"Unable to retrieve data for get_current_activity_header.") return serve_template(templatename="current_activity_header.html", data=None) + @cherrypy.expose + @cherrypy.tools.json_out() + @requireAuth(member_of("admin")) + @addtoapi() + def terminate_session(self, session_id=None, message=None, **kwargs): + """ Add a new notification agent. + + ``` + Required parameters: + session_id (str): The id of the session to terminate + message (str): A custom message to send to the client + + Optional parameters: + None + + Returns: + None + ``` + """ + pms_connect = pmsconnect.PmsConnect() + result = pms_connect.terminate_session(session_id=session_id, message=message) + + if result: + return {'result': 'success', 'message': 'Session terminated.'} + else: + return {'result': 'error', 'message': 'Failed to terminate session.'} + @cherrypy.expose @requireAuth() def home_stats(self, **kwargs):