Add shared libraries and filters to database

This commit is contained in:
JonnyWong16 2016-04-30 21:09:34 -07:00
parent ae60b21375
commit 2aa059a170
3 changed files with 74 additions and 15 deletions

View file

@ -449,7 +449,8 @@ def dbcheck():
'thumb TEXT, custom_avatar_url TEXT, email TEXT, is_home_user INTEGER DEFAULT NULL, '
'is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL, do_notify INTEGER DEFAULT 1, '
'keep_history INTEGER DEFAULT 1, deleted_user INTEGER DEFAULT 0, allow_guest INTEGER DEFAULT 0, '
'user_token TEXT, server_token TEXT)'
'user_token TEXT, server_token TEXT, shared_libraries TEXT, filter_all TEXT, filter_movies TEXT, filter_tv TEXT, '
'filter_music TEXT, filter_photos TEXT)'
)
# notify_log table :: This is a table which logs notifications sent
@ -768,6 +769,30 @@ def dbcheck():
'ALTER TABLE users ADD COLUMN server_token TEXT'
)
# Upgrade users table from earlier versions
try:
c_db.execute('SELECT shared_libraries FROM users')
except sqlite3.OperationalError:
logger.debug(u"Altering database. Updating database table users.")
c_db.execute(
'ALTER TABLE users ADD COLUMN shared_libraries TEXT'
)
c_db.execute(
'ALTER TABLE users ADD COLUMN filter_all TEXT'
)
c_db.execute(
'ALTER TABLE users ADD COLUMN filter_movies TEXT'
)
c_db.execute(
'ALTER TABLE users ADD COLUMN filter_tv TEXT'
)
c_db.execute(
'ALTER TABLE users ADD COLUMN filter_music TEXT'
)
c_db.execute(
'ALTER TABLE users ADD COLUMN filter_photos TEXT'
)
# Upgrade notify_log table from earlier versions
try:
c_db.execute('SELECT poster_url FROM notify_log')

View file

@ -22,23 +22,39 @@ import xmltodict
from xml.dom import minidom
import plexpy
from plexpy import logger, helpers, http_handler, database, users, session
from plexpy import logger, helpers, http_handler, database, users, session, pmsconnect
def refresh_users():
logger.info(u"PlexPy PlexTV :: Requesting users list refresh...")
result = PlexTV().get_full_users_list()
monitor_db = database.MonitorDatabase()
if len(result) > 0:
monitor_db = database.MonitorDatabase()
user_data = users.Users()
if result:
for item in result:
shared_libraries = ''
user_tokens = user_data.get_tokens(user_id=item['user_id'])
if user_tokens and user_tokens['server_token']:
pms_connect = pmsconnect.PmsConnect(token=user_tokens['server_token'])
library_details = pms_connect.get_server_children()
shared_libraries = ';'.join(d['section_id'] for d in library_details['libraries_list'])
control_value_dict = {"user_id": item['user_id']}
new_value_dict = {"username": item['username'],
"thumb": item['thumb'],
"email": item['email'],
"is_home_user": item['is_home_user'],
"is_allow_sync": item['is_allow_sync'],
"is_restricted": item['is_restricted']
"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.
@ -115,7 +131,16 @@ class PlexTV(object):
self.password = password
self.ssl_verify = plexpy.CONFIG.VERIFY_SSL_CERT
token = token if token else plexpy.CONFIG.PMS_TOKEN
if token == 'admin':
token = plexpy.CONFIG.PMS_TOKEN
elif not token:
# Check if we should use the admin token, or the guest server token
if session.get_session_user_id():
user_data = users.Users()
user_tokens = user_data.get_tokens(user_id=session.get_session_user_id())
token = user_tokens['server_token']
else:
token = plexpy.CONFIG.PMS_TOKEN
self.request_handler = http_handler.HTTPHandler(host='plex.tv',
port=443,
@ -262,7 +287,12 @@ class PlexTV(object):
"email": helpers.get_xml_attr(a, 'email'),
"is_home_user": helpers.get_xml_attr(a, 'home'),
"is_allow_sync": None,
"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_movies": helpers.get_xml_attr(a, 'filterMovies'),
"filter_tv": helpers.get_xml_attr(a, 'filterTelevision'),
"filter_music": helpers.get_xml_attr(a, 'filterMusic'),
"filter_photos": helpers.get_xml_attr(a, 'filterPhotos')
}
users_list.append(own_details)
@ -287,7 +317,12 @@ class PlexTV(object):
"email": helpers.get_xml_attr(a, 'email'),
"is_home_user": helpers.get_xml_attr(a, 'home'),
"is_allow_sync": helpers.get_xml_attr(a, 'allowSync'),
"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_movies": helpers.get_xml_attr(a, 'filterMovies'),
"filter_tv": helpers.get_xml_attr(a, 'filterTelevision'),
"filter_music": helpers.get_xml_attr(a, 'filterMusic'),
"filter_photos": helpers.get_xml_attr(a, 'filterPhotos')
}
users_list.append(friend)

View file

@ -526,9 +526,8 @@ class PmsConnect(object):
'added_at': helpers.get_xml_attr(item, 'addedAt')
}
recents_list.append(recent_items)
output = {'recently_added': session.filter_session_info(
sorted(recents_list, key=lambda k: k['added_at'], reverse=True), filter_key='section_id')}
output = {'recently_added': sorted(recents_list, key=lambda k: k['added_at'], reverse=True)}
return output
@ -595,8 +594,8 @@ class PmsConnect(object):
genres.append(helpers.get_xml_attr(genre, 'tag'))
if metadata_main.getElementsByTagName('Label'):
for labels in metadata_main.getElementsByTagName('Label'):
labels.append(helpers.get_xml_attr(labels, 'tag'))
for label in metadata_main.getElementsByTagName('Label'):
labels.append(helpers.get_xml_attr(label, 'tag'))
if metadata_type == 'movie':
metadata = {'media_type': metadata_type,
@ -1531,7 +1530,7 @@ class PmsConnect(object):
output = {'children_count': helpers.get_xml_attr(xml_head[0], 'size'),
'children_type': helpers.get_xml_attr(xml_head[0], 'viewGroup'),
'title': helpers.get_xml_attr(xml_head[0], 'title2'),
'children_list': session.filter_session_info(children_list, 'section_id')
'children_list': children_list
}
return output
@ -1979,7 +1978,7 @@ class PmsConnect(object):
search_results_count += 1
output = {'results_count': search_results_count,
'results_list': {k: session.filter_session_info(v, 'section_id') for k, v in search_results_list.iteritems()}
'results_list': {k: v for k, v in search_results_list.iteritems()}
}
return output