From 5d2dbaaf1eb84b9e38b3fb97b11e77a85faf24a4 Mon Sep 17 00:00:00 2001 From: tomkat83 Date: Thu, 24 Mar 2016 09:08:58 +0100 Subject: [PATCH] Get a machineIdentifier if it is missing - E.g. when PMS IP was entered manually --- resources/lib/PlexFunctions.py | 32 ++++++++++++++++++++++++++------ resources/lib/userclient.py | 9 ++++++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/resources/lib/PlexFunctions.py b/resources/lib/PlexFunctions.py index 6e048df3..ab50e509 100644 --- a/resources/lib/PlexFunctions.py +++ b/resources/lib/PlexFunctions.py @@ -383,7 +383,7 @@ def GetPlexPlaylist(itemid, librarySectionUUID, mediatype='movie'): try: xml[0].tag except (IndexError, TypeError, AttributeError): - logMsg("Error retrieving metadata for %s" % url, -1) + logMsg(title, "Error retrieving metadata for %s" % url, -1) return None return xml @@ -425,16 +425,16 @@ def PMSHttpsEnabled(url): headers={}, timeout=(3, 10)) except requests.exceptions.ConnectionError as e: - logMsg("Server is offline or cannot be reached. Url: %s, " - "Error message: %s" % (url, e), -1) + logMsg(title, "Server is offline or cannot be reached. Url: %s" + ", Error message: %s" % (url, e), -1) return None except requests.exceptions.ReadTimeout: - logMsg("Server timeout reached for Url %s" % url, -1) + logMsg(title, "Server timeout reached for Url %s" % url, -1) return None else: answer = False except requests.exceptions.ReadTimeout: - logMsg("Server timeout reached for Url %s" % url, -1) + logMsg(title, "Server timeout reached for Url %s" % url, -1) return None if res.status_code == requests.codes.ok: return answer @@ -442,6 +442,26 @@ def PMSHttpsEnabled(url): return None +def GetMachineIdentifier(url): + """ + Returns the unique PMS machine identifier of url + + Returns None if something went wrong + """ + xml = downloadutils.DownloadUtils().downloadUrl( + url + '/identity', type="GET") + try: + xml.attrib + except: + logMsg(title, 'Could not get the PMS machineIdentifier for %s' + % url, -1) + return None + machineIdentifier = xml.attrib.get('machineIdentifier') + logMsg(title, 'Found machineIdentifier %s for %s' + % (machineIdentifier, url), 1) + return machineIdentifier + + def scrobble(ratingKey, state): """ Tells the PMS to set an item's watched state to state="watched" or @@ -458,4 +478,4 @@ def scrobble(ratingKey, state): else: return downloadutils.DownloadUtils().downloadUrl(url, type="GET") - logMsg("Toggled watched state for Plex item %s" % ratingKey, 1) + logMsg(title, "Toggled watched state for Plex item %s" % ratingKey, 1) diff --git a/resources/lib/userclient.py b/resources/lib/userclient.py index ea624fde..842bcf87 100644 --- a/resources/lib/userclient.py +++ b/resources/lib/userclient.py @@ -13,6 +13,7 @@ import utils import downloadutils import PlexAPI +from PlexFunctions import GetMachineIdentifier ############################################################################### @@ -76,11 +77,11 @@ class UserClient(threading.Thread): settings = utils.settings # Original host - self.machineIdentifier = settings('plex_machineIdentifier') self.servername = settings('plex_servername') HTTPS = settings('https') == "true" host = settings('ipaddress') port = settings('port') + self.machineIdentifier = settings('plex_machineIdentifier') server = host + ":" + port @@ -94,6 +95,12 @@ class UserClient(threading.Thread): # If https is false elif prefix and not HTTPS: server = "http://%s" % server + # User entered IP; we need to get the machineIdentifier + if self.machineIdentifier == '' and prefix is True: + self.machineIdentifier = GetMachineIdentifier(server) + if self.machineIdentifier is None: + self.machineIdentifier = '' + settings('plex_machineIdentifier', value=self.machineIdentifier) self.logMsg('Returning active server: %s' % server) return server