diff --git a/data/interfaces/default/js/tables/history_table.js b/data/interfaces/default/js/tables/history_table.js index a310ec81..eb918108 100644 --- a/data/interfaces/default/js/tables/history_table.js +++ b/data/interfaces/default/js/tables/history_table.js @@ -46,7 +46,7 @@ history_table_options = { "data":"friendly_name", "createdCell": function (td, cellData, rowData, row, col) { if (cellData !== '') { - if (rowData['user_id'] !== '') { + if (rowData['user_id']) { $(td).html('' + cellData + ''); } else { $(td).html('' + cellData + ''); diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index b7a9e61a..9e077165 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -37,16 +37,18 @@ class DataFactory(object): 'session_history.ip_address', 'COUNT(session_history.id) as plays', 'session_history.user', - 'session_history.user_id' + 'session_history.user_id', + '(case when typeof(session_history.user_id) = "integer" \ + then session_history.user_id else -1 end) as grp_id', ] try: query = data_tables.ssp_query(table_name='session_history', columns=columns, custom_where=[], - group_by=['session_history.user_id'], + group_by=['grp_id'], join_types=['LEFT OUTER JOIN'], join_tables=['users'], - join_evals=[['session_history.user_id', 'users.user_id']], + join_evals=[['grp_id', 'users.user_id']], kwargs=kwargs) except: logger.warn("Unable to execute database query.") @@ -309,60 +311,69 @@ class DataFactory(object): return None def get_user_details(self, user=None, user_id=None): - try: - monitor_db = database.MonitorDatabase() + monitor_db = database.MonitorDatabase() - if user: - query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted ' \ - 'FROM users ' \ - 'WHERE username = ? ' \ - 'UNION ALL ' \ - 'SELECT null, user, null, null, null, null, null, null ' \ - 'FROM session_history ' \ - 'WHERE user = ? ' \ - 'GROUP BY user ' \ - 'LIMIT 1' - result = monitor_db.select(query, args=[user, user]) - elif user_id: - query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted ' \ - 'FROM users ' \ - 'WHERE user_id = ? ' \ - 'UNION ALL ' \ - 'SELECT user_id, user, null, null, null, null, null, null ' \ - 'FROM session_history ' \ - 'WHERE user_id = ? ' \ - 'GROUP BY user ' \ - 'LIMIT 1' - result = monitor_db.select(query, args=[user_id, user_id]) - if result: - for item in result: - if not item['friendly_name']: - friendly_name = item['username'] - else: - friendly_name = item['friendly_name'] - if not item['thumb'] or item['thumb'] == '': - user_thumb = common.DEFAULT_USER_THUMB - else: - user_thumb = item['thumb'] + if user: + query = 'SELECT user_id, username, friendly_name, email, ' \ + 'thumb, is_home_user, is_allow_sync, is_restricted ' \ + 'FROM users ' \ + 'WHERE username = ? ' \ + 'UNION ALL ' \ + 'SELECT null, user, null, null, null, null, null, null ' \ + 'FROM session_history ' \ + 'WHERE user = ? ' \ + 'GROUP BY user ' \ + 'LIMIT 1' + result = monitor_db.select(query, args=[user, user]) + elif user_id: + query = 'SELECT user_id, username, friendly_name, email, ' \ + 'thumb, is_home_user, is_allow_sync, is_restricted ' \ + 'FROM users ' \ + 'WHERE user_id = ? ' \ + 'UNION ALL ' \ + 'SELECT user_id, user, null, null, null, null, null, null ' \ + 'FROM session_history ' \ + 'WHERE user_id = ? ' \ + 'GROUP BY user ' \ + 'LIMIT 1' + result = monitor_db.select(query, args=[user_id, user_id]) + else: + result = None - user_details = {"user_id": item['user_id'], - "username": item['username'], - "friendly_name": friendly_name, - "email": item['email'], - "thumb": user_thumb, - "is_home_user": item['is_home_user'], - "is_allow_sync": item['is_allow_sync'], - "is_restricted": item['is_restricted'] - } - return user_details - else: - return None - except: - return None + if result: + user_details = {} + for item in result: + if not item['friendly_name']: + friendly_name = item['username'] + else: + friendly_name = item['friendly_name'] + if not item['thumb'] or item['thumb'] == '': + user_thumb = common.DEFAULT_USER_THUMB + else: + user_thumb = item['thumb'] - return None + user_details = {"user_id": item['user_id'], + "username": item['username'], + "friendly_name": friendly_name, + "email": item['email'], + "thumb": user_thumb, + "is_home_user": item['is_home_user'], + "is_allow_sync": item['is_allow_sync'], + "is_restricted": item['is_restricted'] + } + return user_details + else: + # If there is no user data we must return something + # Use "Local" user to retain compatibility with PlexWatch database value + return {"user_id": None, + "username": 'Local', + "friendly_name": 'Local', + "email": '', + "thumb": '', + "is_home_user": 0, + "is_allow_sync": 0, + "is_restricted": 0 + } def get_home_stats(self, time_range='30'): monitor_db = database.MonitorDatabase() diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 29d73516..5842bbf0 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -547,7 +547,7 @@ class PmsConnect(object): 'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'), 'thumb': helpers.get_xml_attr(session, 'thumb'), 'bif_thumb': '', - 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), + 'user': user_details['username'], 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), @@ -656,7 +656,7 @@ class PmsConnect(object): 'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'), 'thumb': helpers.get_xml_attr(session, 'thumb'), 'bif_thumb': bif_thumb, - 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), + 'user': user_details['username'], 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),