mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-10 23:42:37 -07:00
Add server token and shared libraries to user refresh
This commit is contained in:
parent
522684b2ab
commit
6009fb24b6
2 changed files with 51 additions and 38 deletions
|
@ -266,6 +266,14 @@ class PlexTV(object):
|
||||||
|
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
def get_plextv_shared_servers(self, machine_id='', output_format=''):
|
||||||
|
uri = '/api/servers/%s/shared_servers' % machine_id
|
||||||
|
request = self.request_handler.make_request(uri=uri,
|
||||||
|
request_type='GET',
|
||||||
|
output_format=output_format)
|
||||||
|
|
||||||
|
return request
|
||||||
|
|
||||||
def get_plextv_sync_lists(self, machine_id='', output_format=''):
|
def get_plextv_sync_lists(self, machine_id='', output_format=''):
|
||||||
uri = '/servers/%s/sync_lists' % machine_id
|
uri = '/servers/%s/sync_lists' % machine_id
|
||||||
request = self.request_handler.make_request(uri=uri,
|
request = self.request_handler.make_request(uri=uri,
|
||||||
|
@ -329,15 +337,18 @@ class PlexTV(object):
|
||||||
return request
|
return request
|
||||||
|
|
||||||
def get_full_users_list(self):
|
def get_full_users_list(self):
|
||||||
friends_list = self.get_plextv_friends(output_format='xml')
|
|
||||||
own_account = self.get_plextv_user_details(output_format='xml')
|
own_account = self.get_plextv_user_details(output_format='xml')
|
||||||
|
friends_list = self.get_plextv_friends(output_format='xml')
|
||||||
|
shared_servers = self.get_plextv_shared_servers(machine_id=plexpy.CONFIG.PMS_IDENTIFIER,
|
||||||
|
output_format='xml')
|
||||||
|
|
||||||
users_list = []
|
users_list = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
xml_head = own_account.getElementsByTagName('user')
|
xml_head = own_account.getElementsByTagName('user')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn(u"Tautulli PlexTV :: Unable to parse own account XML for get_full_users_list: %s." % e)
|
logger.warn(u"Tautulli PlexTV :: Unable to parse own account XML for get_full_users_list: %s." % e)
|
||||||
return {}
|
return []
|
||||||
|
|
||||||
for a in xml_head:
|
for a in xml_head:
|
||||||
own_details = {"user_id": helpers.get_xml_attr(a, 'id'),
|
own_details = {"user_id": helpers.get_xml_attr(a, 'id'),
|
||||||
|
@ -346,13 +357,16 @@ class PlexTV(object):
|
||||||
"email": helpers.get_xml_attr(a, 'email'),
|
"email": helpers.get_xml_attr(a, 'email'),
|
||||||
"is_home_user": helpers.get_xml_attr(a, 'home'),
|
"is_home_user": helpers.get_xml_attr(a, 'home'),
|
||||||
"is_admin": 1,
|
"is_admin": 1,
|
||||||
"is_allow_sync": None,
|
"is_allow_sync": 1,
|
||||||
"is_restricted": helpers.get_xml_attr(a, 'restricted'),
|
"is_restricted": helpers.get_xml_attr(a, 'restricted'),
|
||||||
"filter_all": helpers.get_xml_attr(a, 'filterAll'),
|
"filter_all": helpers.get_xml_attr(a, 'filterAll'),
|
||||||
"filter_movies": helpers.get_xml_attr(a, 'filterMovies'),
|
"filter_movies": helpers.get_xml_attr(a, 'filterMovies'),
|
||||||
"filter_tv": helpers.get_xml_attr(a, 'filterTelevision'),
|
"filter_tv": helpers.get_xml_attr(a, 'filterTelevision'),
|
||||||
"filter_music": helpers.get_xml_attr(a, 'filterMusic'),
|
"filter_music": helpers.get_xml_attr(a, 'filterMusic'),
|
||||||
"filter_photos": helpers.get_xml_attr(a, 'filterPhotos')
|
"filter_photos": helpers.get_xml_attr(a, 'filterPhotos'),
|
||||||
|
"user_token": helpers.get_xml_attr(a, 'authToken'),
|
||||||
|
"server_token": helpers.get_xml_attr(a, 'authToken'),
|
||||||
|
"shared_libraries": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
users_list.append(own_details)
|
users_list.append(own_details)
|
||||||
|
@ -361,7 +375,7 @@ class PlexTV(object):
|
||||||
xml_head = friends_list.getElementsByTagName('User')
|
xml_head = friends_list.getElementsByTagName('User')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn(u"Tautulli PlexTV :: Unable to parse friends list XML for get_full_users_list: %s." % e)
|
logger.warn(u"Tautulli PlexTV :: Unable to parse friends list XML for get_full_users_list: %s." % e)
|
||||||
return {}
|
return []
|
||||||
|
|
||||||
for a in xml_head:
|
for a in xml_head:
|
||||||
friend = {"user_id": helpers.get_xml_attr(a, 'id'),
|
friend = {"user_id": helpers.get_xml_attr(a, 'id'),
|
||||||
|
@ -381,6 +395,28 @@ class PlexTV(object):
|
||||||
|
|
||||||
users_list.append(friend)
|
users_list.append(friend)
|
||||||
|
|
||||||
|
try:
|
||||||
|
xml_head = shared_servers.getElementsByTagName('SharedServer')
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn(u"Tautulli PlexTV :: Unable to parse shared server list XML for get_full_users_list: %s." % e)
|
||||||
|
return []
|
||||||
|
|
||||||
|
user_map = {}
|
||||||
|
for a in xml_head:
|
||||||
|
user_id = helpers.get_xml_attr(a, 'userID')
|
||||||
|
server_token = helpers.get_xml_attr(a, 'accessToken')
|
||||||
|
|
||||||
|
sections = a.getElementsByTagName('Section')
|
||||||
|
shared_libraries = [helpers.get_xml_attr(s, 'key')
|
||||||
|
for s in sections if helpers.get_xml_attr(s, 'shared') == '1']
|
||||||
|
|
||||||
|
user_map[user_id] = {'server_token': server_token,
|
||||||
|
'shared_libraries': shared_libraries}
|
||||||
|
|
||||||
|
for u in users_list:
|
||||||
|
d = user_map.get(u['user_id'], {})
|
||||||
|
u.update(d)
|
||||||
|
|
||||||
return users_list
|
return users_list
|
||||||
|
|
||||||
def get_synced_items(self, machine_id=None, client_id_filter=None, user_id_filter=None,
|
def get_synced_items(self, machine_id=None, client_id_filter=None, user_id_filter=None,
|
||||||
|
|
|
@ -31,52 +31,29 @@ def refresh_users():
|
||||||
logger.info(u"Tautulli Users :: Requesting users list refresh...")
|
logger.info(u"Tautulli Users :: Requesting users list refresh...")
|
||||||
result = plextv.PlexTV().get_full_users_list()
|
result = plextv.PlexTV().get_full_users_list()
|
||||||
|
|
||||||
monitor_db = database.MonitorDatabase()
|
|
||||||
user_data = Users()
|
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
monitor_db = database.MonitorDatabase()
|
||||||
|
|
||||||
for item in result:
|
for item in result:
|
||||||
|
|
||||||
shared_libraries = ''
|
if item.get('shared_libraries'):
|
||||||
user_tokens = user_data.get_tokens(user_id=item['user_id'])
|
item['shared_libraries'] = ';'.join(item['shared_libraries'])
|
||||||
if user_tokens and user_tokens['server_token']:
|
|
||||||
pms_connect = pmsconnect.PmsConnect(token=user_tokens['server_token'])
|
|
||||||
library_details = pms_connect.get_server_children()
|
|
||||||
|
|
||||||
if library_details:
|
keys_dict = {"user_id": item.pop('user_id')}
|
||||||
shared_libraries = ';'.join(d['section_id'] for d in library_details['libraries_list'])
|
|
||||||
else:
|
|
||||||
shared_libraries = ''
|
|
||||||
|
|
||||||
control_value_dict = {"user_id": item['user_id']}
|
|
||||||
new_value_dict = {"username": item['username'],
|
|
||||||
"thumb": item['thumb'],
|
|
||||||
"email": item['email'],
|
|
||||||
"is_admin": item['is_admin'],
|
|
||||||
"is_home_user": item['is_home_user'],
|
|
||||||
"is_allow_sync": item['is_allow_sync'],
|
|
||||||
"is_restricted": item['is_restricted'],
|
|
||||||
"shared_libraries": shared_libraries,
|
|
||||||
"filter_all": item['filter_all'],
|
|
||||||
"filter_movies": item['filter_movies'],
|
|
||||||
"filter_tv": item['filter_tv'],
|
|
||||||
"filter_music": item['filter_music'],
|
|
||||||
"filter_photos": item['filter_photos']
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if we've set a custom avatar if so don't overwrite it.
|
# Check if we've set a custom avatar if so don't overwrite it.
|
||||||
if item['user_id']:
|
if keys_dict['user_id']:
|
||||||
avatar_urls = monitor_db.select('SELECT thumb, custom_avatar_url '
|
avatar_urls = monitor_db.select('SELECT thumb, custom_avatar_url '
|
||||||
'FROM users WHERE user_id = ?',
|
'FROM users WHERE user_id = ?',
|
||||||
[item['user_id']])
|
[keys_dict['user_id']])
|
||||||
if avatar_urls:
|
if avatar_urls:
|
||||||
if not avatar_urls[0]['custom_avatar_url'] or \
|
if not avatar_urls[0]['custom_avatar_url'] or \
|
||||||
avatar_urls[0]['custom_avatar_url'] == avatar_urls[0]['thumb']:
|
avatar_urls[0]['custom_avatar_url'] == avatar_urls[0]['thumb']:
|
||||||
new_value_dict['custom_avatar_url'] = item['thumb']
|
item['custom_avatar_url'] = item['thumb']
|
||||||
else:
|
else:
|
||||||
new_value_dict['custom_avatar_url'] = item['thumb']
|
item['custom_avatar_url'] = item['thumb']
|
||||||
|
|
||||||
monitor_db.upsert('users', new_value_dict, control_value_dict)
|
monitor_db.upsert('users', item, keys_dict)
|
||||||
|
|
||||||
logger.info(u"Tautulli Users :: Users list refreshed.")
|
logger.info(u"Tautulli Users :: Users list refreshed.")
|
||||||
return True
|
return True
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue