httpd.handle_request() message_count+=1 if message_count > 30: if client.check_client_registration(): printDebug("Client is still registered") else: printDebug("Client is no longer registered") printDebug( "PlexBMC Helper still running on port %s" % settings['myport']) message_count=0 if not is_running: print "PleXBMC Helper -> PleXBMC Helper has started" xbmc.executebuiltin("XBMC.Notification(PleXBMC Helper has started,)") is_running=True if message_count % 1 == 0: subMgr.notify() settings['serverList'] = client.getServerList() except: printDebug("Error in loop") print traceback.print_exc() break httpd.socket.shutdown(socket.SHUT_RDWR) requests.dumpConnections() client.stop_all() print "PleXBMC Helper -> PleXBMC Helper has been stopped" xbmc.executebuiltin("XBMC.Notification(PleXBMC Helper has been stopped,)")
def answer_request(s, sendData): try: request_path = s.path[1:] request_path = re.sub(r"\?.*", "", request_path) url = urlparse(s.path) paramarrays = parse_qs(url.query) params = {} for key in paramarrays: params[key] = paramarrays[key][0] printDebug("request path is: [%s]" % (request_path, )) printDebug("params are: %s" % params) subMgr.updateCommandID( s.headers.get('X-Plex-Client-Identifier', s.client_address[0]), params.get('commandID', False)) if request_path == "version": s.response( "PleXBMC Helper Remote Redirector: Running\r\nVersion: %s" % settings['version']) elif request_path == "verify": result = jsonrpc("ping") s.response("XBMC JSON connection test:\r\n" + result) elif "resources" == request_path: resp = getXMLHeader() resp += "<MediaContainer>" resp += "<Player" resp += ' title="%s"' % settings['client_name'] resp += ' protocol="plex"' resp += ' protocolVersion="1"' resp += ' protocolCapabilities="navigation,playback,timeline"' resp += ' machineIdentifier="%s"' % settings['uuid'] resp += ' product="PleXBMC"' resp += ' platform="%s"' % getPlatform() resp += ' platformVersion="%s"' % settings['plexbmc_version'] resp += ' deviceClass="pc"' resp += "/>" resp += "</MediaContainer>" printDebug("crafted resources response: %s" % resp) s.response(resp, getPlexHeaders()) elif "/subscribe" in request_path: s.response(getOKMsg(), getPlexHeaders()) protocol = params.get('protocol', False) host = s.client_address[0] port = params.get('port', False) uuid = s.headers.get('X-Plex-Client-Identifier', "") commandID = params.get('commandID', 0) subMgr.addSubscriber(protocol, host, port, uuid, commandID) elif "/poll" in request_path: if params.get('wait', False) == '1': xbmc.sleep(950) commandID = params.get('commandID', 0) s.response( re.sub(r"INSERTCOMMANDID", str(commandID), subMgr.msg(getPlayers())), { 'X-Plex-Client-Identifier': settings['uuid'], 'Access-Control-Expose-Headers': 'X-Plex-Client-Identifier', 'Access-Control-Allow-Origin': '*', 'Content-Type': 'text/xml' }) elif "/unsubscribe" in request_path: s.response(getOKMsg(), getPlexHeaders()) uuid = s.headers.get('X-Plex-Client-Identifier', False) or s.client_address[0] subMgr.removeSubscriber(uuid) elif request_path == "player/playback/setParameters": s.response(getOKMsg(), getPlexHeaders()) if 'volume' in params: volume = int(params['volume']) printDebug("adjusting the volume to %s%%" % volume) jsonrpc("Application.SetVolume", {"volume": volume}) elif "/playMedia" in request_path: s.response(getOKMsg(), getPlexHeaders()) resume = params.get('viewOffset', params.get('offset', "0")) protocol = params.get('protocol', "http") address = params.get('address', s.client_address[0]) server = getServerByHost(address) port = params.get('port', server.get('port', '32400')) fullurl = protocol + "://" + address + ":" + port + params[ 'key'] printDebug("playMedia command -> fullurl: %s" % fullurl) jsonrpc("playmedia", [fullurl, resume]) subMgr.lastkey = params['key'] subMgr.server = server subMgr.port = port subMgr.protocol = protocol subMgr.notify() elif request_path == "player/playback/play": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.PlayPause", { "playerid": playerid, "play": True }) elif request_path == "player/playback/pause": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.PlayPause", { "playerid": playerid, "play": False }) elif request_path == "player/playback/stop": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Stop", {"playerid": playerid}) elif request_path == "player/playback/seekTo": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc( "Player.Seek", { "playerid": playerid, "value": millisToTime(params.get('offset', 0)) }) subMgr.notify() elif request_path == "player/playback/stepForward": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", { "playerid": playerid, "value": "smallforward" }) subMgr.notify() elif request_path == "player/playback/stepBack": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", { "playerid": playerid, "value": "smallbackward" }) subMgr.notify() elif request_path == "player/playback/skipNext": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", { "playerid": playerid, "value": "bigforward" }) subMgr.notify() elif request_path == "player/playback/skipPrevious": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", { "playerid": playerid, "value": "bigbackward" }) subMgr.notify() elif request_path == "player/navigation/moveUp": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Up") elif request_path == "player/navigation/moveDown": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Down") elif request_path == "player/navigation/moveLeft": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Left") elif request_path == "player/navigation/moveRight": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Right") elif request_path == "player/navigation/select": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Select") elif request_path == "player/navigation/home": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Home") elif request_path == "player/navigation/back": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Back") except: traceback.print_exc()
def answer_request(s, sendData): try: request_path = s.path[1:] request_path = re.sub(r"\?.*", "", request_path) url = urlparse(s.path) paramarrays = parse_qs(url.query) params = {} for key in paramarrays: params[key] = paramarrays[key][0] printDebug("request path is: [%s]" % (request_path,)) printDebug("params are: %s" % params) subMgr.updateCommandID( s.headers.get("X-Plex-Client-Identifier", s.client_address[0]), params.get("commandID", False) ) if request_path == "version": s.response("PleXBMC Helper Remote Redirector: Running\r\nVersion: %s" % settings["version"]) elif request_path == "verify": result = jsonrpc("ping") s.response("XBMC JSON connection test:\r\n" + result) elif "resources" == request_path: resp = getXMLHeader() resp += "<MediaContainer>" resp += "<Player" resp += ' title="%s"' % settings["client_name"] resp += ' protocol="plex"' resp += ' protocolVersion="1"' resp += ' protocolCapabilities="navigation,playback,timeline"' resp += ' machineIdentifier="%s"' % settings["uuid"] resp += ' product="PleXBMC"' resp += ' platform="%s"' % getPlatform() resp += ' platformVersion="%s"' % settings["plexbmc_version"] resp += ' deviceClass="pc"' resp += "/>" resp += "</MediaContainer>" printDebug("crafted resources response: %s" % resp) s.response(resp, getPlexHeaders()) elif "/subscribe" in request_path: s.response(getOKMsg(), getPlexHeaders()) protocol = params.get("protocol", False) host = s.client_address[0] port = params.get("port", False) uuid = s.headers.get("X-Plex-Client-Identifier", "") commandID = params.get("commandID", 0) subMgr.addSubscriber(protocol, host, port, uuid, commandID) elif "/poll" in request_path: if params.get("wait", False) == "1": xbmc.sleep(950) commandID = params.get("commandID", 0) s.response( re.sub(r"INSERTCOMMANDID", str(commandID), subMgr.msg(getPlayers())), { "X-Plex-Client-Identifier": settings["uuid"], "Access-Control-Expose-Headers": "X-Plex-Client-Identifier", "Access-Control-Allow-Origin": "*", "Content-Type": "text/xml", }, ) elif "/unsubscribe" in request_path: s.response(getOKMsg(), getPlexHeaders()) uuid = s.headers.get("X-Plex-Client-Identifier", False) or s.client_address[0] subMgr.removeSubscriber(uuid) elif request_path == "player/playback/setParameters": s.response(getOKMsg(), getPlexHeaders()) if "volume" in params: volume = int(params["volume"]) printDebug("adjusting the volume to %s%%" % volume) jsonrpc("Application.SetVolume", {"volume": volume}) elif "/playMedia" in request_path: s.response(getOKMsg(), getPlexHeaders()) resume = params.get("viewOffset", params.get("offset", "0")) protocol = params.get("protocol", "http") address = params.get("address", s.client_address[0]) server = getServerByHost(address) port = params.get("port", server.get("port", "32400")) fullurl = protocol + "://" + address + ":" + port + params["key"] printDebug("playMedia command -> fullurl: %s" % fullurl) jsonrpc("playmedia", [fullurl, resume]) subMgr.lastkey = params["key"] subMgr.server = server.get("server", "localhost") subMgr.port = port subMgr.protocol = protocol subMgr.notify() elif request_path == "player/playback/play": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.PlayPause", {"playerid": playerid, "play": True}) elif request_path == "player/playback/pause": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.PlayPause", {"playerid": playerid, "play": False}) elif request_path == "player/playback/stop": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Stop", {"playerid": playerid}) elif request_path == "player/playback/seekTo": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", {"playerid": playerid, "value": millisToTime(params.get("offset", 0))}) subMgr.notify() elif request_path == "player/playback/stepForward": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", {"playerid": playerid, "value": "smallforward"}) subMgr.notify() elif request_path == "player/playback/stepBack": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", {"playerid": playerid, "value": "smallbackward"}) subMgr.notify() elif request_path == "player/playback/skipNext": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", {"playerid": playerid, "value": "bigforward"}) subMgr.notify() elif request_path == "player/playback/skipPrevious": s.response(getOKMsg(), getPlexHeaders()) for playerid in getPlayerIds(): jsonrpc("Player.Seek", {"playerid": playerid, "value": "bigbackward"}) subMgr.notify() elif request_path == "player/navigation/moveUp": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Up") elif request_path == "player/navigation/moveDown": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Down") elif request_path == "player/navigation/moveLeft": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Left") elif request_path == "player/navigation/moveRight": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Right") elif request_path == "player/navigation/select": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Select") elif request_path == "player/navigation/home": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Home") elif request_path == "player/navigation/back": s.response(getOKMsg(), getPlexHeaders()) jsonrpc("Input.Back") except: traceback.print_exc()
if client.check_client_registration(): printDebug("Client is still registered") else: printDebug("Client is no longer registered") printDebug("PlexBMC Helper still running on port %s" % settings['myport']) message_count = 0 if not is_running: print "PleXBMC Helper -> PleXBMC Helper has started" xbmc.executebuiltin( "XBMC.Notification(PleXBMC Helper has started,)") is_running = True if message_count % 1 == 0: subMgr.notify() settings['serverList'] = client.getServerList() except: printDebug("Error in loop, continuing anyway") print traceback.print_exc() try: httpd.socket.shutdown(socket.SHUT_RDWR) finally: httpd.socket.close() requests.dumpConnections() client.stop_all() print "PleXBMC Helper -> PleXBMC Helper has been stopped" xbmc.executebuiltin( "XBMC.Notification(PleXBMC Helper has been stopped,)")