77 lines
3 KiB
Python
77 lines
3 KiB
Python
|
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()
|