diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 2ab7c792..b3c8bd5d 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -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') diff --git a/plexpy/plextv.py b/plexpy/plextv.py index 4dae8f92..4a122baf 100644 --- a/plexpy/plextv.py +++ b/plexpy/plextv.py @@ -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) diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 7ab65a84..f0ac4b66 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -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