Don't show delet context menu if now allowed by PMS

This commit is contained in:
tomkat83 2016-10-23 19:38:21 +02:00
parent f595455776
commit 9869131464
7 changed files with 46 additions and 5 deletions

View file

@ -543,3 +543,16 @@ def delete_item_from_pms(plexid):
else:
log.error('Could not delete Plex id %s from the PMS' % plexid)
return False
def get_PMS_settings(url, token):
"""
Retrieve the PMS' settings via <url>/:/
Call with url: scheme://ip:port
"""
return downloadutils.DownloadUtils().downloadUrl(
'%s/:/prefs' % url,
authenticate=False,
verifySSL=False,
headerOptions={'X-Plex-Token': token} if token else None)

View file

@ -10,7 +10,7 @@ import xbmcaddon
import PlexAPI
from PlexFunctions import GetPlexMetadata, delete_item_from_pms
import embydb_functions as embydb
from utils import settings, dialog, language as lang, kodiSQL
from utils import window, settings, dialog, language as lang, kodiSQL
from dialogs import context
###############################################################################
@ -110,7 +110,8 @@ class ContextMenu(object):
# Refresh item
options.append(OPTIONS['Refresh'])
# Delete item, only if the Plex Home main user is logged in
if settings('plex_restricteduser') != 'true':
if (window('plex_restricteduser') != 'true' and
window('plex_allows_mediaDeletion') == 'true'):
options.append(OPTIONS['Delete'])
# Addon settings
options.append(OPTIONS['Addon'])

View file

@ -1290,7 +1290,7 @@ def watchlater():
if window('plex_token') == '':
log.error('No watch later - not signed in to plex.tv')
return xbmcplugin.endOfDirectory(int(sys.argv[1]), False)
if settings('plex_restricteduser') == 'true':
if window('plex_restricteduser') == 'true':
log.error('No watch later - restricted user')
return xbmcplugin.endOfDirectory(int(sys.argv[1]), False)

View file

@ -12,7 +12,7 @@ import downloadutils
import userclient
import PlexAPI
from PlexFunctions import GetMachineIdentifier
from PlexFunctions import GetMachineIdentifier, get_PMS_settings
###############################################################################
@ -42,6 +42,8 @@ class InitialSetup():
self.plexLogin = plexdict['plexLogin']
self.plexToken = plexdict['plexToken']
self.plexid = plexdict['plexid']
# Token for the PMS, not plex.tv
self.pms_token = settings('accessToken')
if self.plexToken:
log.debug('Found a plex.tv token in the settings')
@ -197,8 +199,28 @@ class InitialSetup():
server = self._UserPickPMS()
else:
server = self._AutoPickPMS()
if server is not None:
self._write_PMS_settings(server['baseURL'], server['accesstoken'])
return server
def _write_PMS_settings(self, url, token):
"""
Sets certain settings for server by asking for the PMS' settings
Call with url: scheme://ip:port
"""
xml = get_PMS_settings(url, token)
try:
xml.attrib
except AttributeError:
log.error('Could not get PMS settings for %s' % url)
return
for entry in xml:
if entry.attrib.get('id', '') == 'allowMediaDeletion':
settings('plex_allows_mediaDeletion',
value=entry.attrib.get('value', 'true'))
window('plex_allows_mediaDeletion',
value=entry.attrib.get('value', 'true'))
def _AutoPickPMS(self):
"""
Will try to pick PMS based on machineIdentifier saved in file settings
@ -401,6 +423,7 @@ class InitialSetup():
if getNewIP is False:
log.info("Using PMS %s with machineIdentifier %s"
% (self.server, self.serverid))
self._write_PMS_settings(self.server, self.pms_token)
return
# If not already retrieved myplex info, optionally let user sign in

View file

@ -170,6 +170,7 @@ class UserClient(threading.Thread):
# This is the token for plex.tv for the current user
# Is only '' if user is not signed in to plex.tv
window('plex_token', value=settings('plexToken'))
window('plex_restricteduser', value=settings('plex_restricteduser'))
window('pms_server', value=self.currServer)
window('plex_machineIdentifier', value=self.machineIdentifier)
window('plex_servername', value=self.servername)
@ -298,6 +299,7 @@ class UserClient(threading.Thread):
window('plex_servername', clear=True)
window('currUserId', clear=True)
window('plex_username', clear=True)
window('plex_restricteduser', clear=True)
settings('username', value='')
settings('userid', value='')

View file

@ -40,6 +40,7 @@
<setting id="companionPort" label="39005" type="number" default="3005" option="int" visible="eq(-3,true)" subsetting="true" />
<setting id="plex_restricteduser" type="bool" default="false" visible="false"/>
<setting id="plex_allows_mediaDeletion" type="bool" default="true" visible="false"/>
</category>
<category label="30506"><!-- Sync Options -->

View file

@ -102,7 +102,8 @@ class Service():
"pms_server", "plex_machineIdentifier", "plex_servername",
"plex_authenticated", "PlexUserImage", "useDirectPaths",
"suspend_LibraryThread", "plex_terminateNow",
"kodiplextimeoffset", "countError", "countUnauthorized"
"kodiplextimeoffset", "countError", "countUnauthorized",
"plex_restricteduser", "plex_allows_mediaDeletion"
]
for prop in properties:
window(prop, clear=True)