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'),