PlexKodiConnect/resources/lib/plexnet/myplexmanager.py

77 lines
3 KiB
Python
Raw Normal View History

2018-09-30 21:16:17 +10:00
from defusedxml import ElementTree
import urllib
import plexapp
import plexconnection
import plexserver
import myplexrequest
import callback
import util
class MyPlexManager(object):
def publish(self):
util.LOG('MyPlexManager().publish() - NOT IMPLEMENTED')
return # TODO: ----------------------------------------------------------------------------------------------------------------------------- IMPLEMENT?
request = myplexrequest.MyPlexRequest("/devices/" + plexapp.INTERFACE.getGlobal("clientIdentifier"))
context = request.createRequestContext("publish")
addrs = plexapp.INTERFACE.getGlobal("roDeviceInfo").getIPAddrs()
for iface in addrs:
request.addParam(urllib.quote("Connection[][uri]"), "http://{0):8324".format(addrs[iface]))
plexapp.APP.startRequest(request, context, "_method=PUT")
def refreshResources(self, force=False):
if force:
plexapp.SERVERMANAGER.resetLastTest()
request = myplexrequest.MyPlexRequest("/pms/resources")
context = request.createRequestContext("resources", callback.Callable(self.onResourcesResponse))
if plexapp.ACCOUNT.isSecure:
request.addParam("includeHttps", "1")
plexapp.APP.startRequest(request, context)
def onResourcesResponse(self, request, response, context):
servers = []
response.parseResponse()
# Save the last successful response to cache
if response.isSuccess() and response.event:
plexapp.INTERFACE.setRegistry("mpaResources", response.event.text.encode('utf-8'), "xml_cache")
util.DEBUG_LOG("Saved resources response to registry")
# Load the last successful response from cache
elif plexapp.INTERFACE.getRegistry("mpaResources", None, "xml_cache"):
data = ElementTree.fromstring(plexapp.INTERFACE.getRegistry("mpaResources", None, "xml_cache"))
response.parseFakeXMLResponse(data)
util.DEBUG_LOG("Using cached resources")
if response.container:
for resource in response.container:
util.DEBUG_LOG(
"Parsed resource from plex.tv: type:{0} clientIdentifier:{1} name:{2} product:{3} provides:{4}".format(
resource.type,
resource.clientIdentifier,
resource.name.encode('utf-8'),
resource.product.encode('utf-8'),
resource.provides.encode('utf-8')
)
)
for conn in resource.connections:
util.DEBUG_LOG(' {0}'.format(conn))
if 'server' in resource.provides:
server = plexserver.createPlexServerForResource(resource)
util.DEBUG_LOG(' {0}'.format(server))
servers.append(server)
plexapp.SERVERMANAGER.updateFromConnectionType(servers, plexconnection.PlexConnection.SOURCE_MYPLEX)
MANAGER = MyPlexManager()