Ejemplo n.º 1
0
                
                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,)")
Ejemplo n.º 2
0
 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()
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
                    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,)")