diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html index 11b8e5f0..ead534a1 100644 --- a/data/interfaces/default/info.html +++ b/data/interfaces/default/info.html @@ -878,7 +878,7 @@ DOCUMENTATION :: END transcode_decision: transcode_decision, user_id: "${history_user_id}", % if data['live']: - guid: "${data['guid']} + guid: "${data['guid']}" % elif data['media_type'] in ('show', 'artist'): grandparent_rating_key: "${data['rating_key']}" % elif data['media_type'] in ('season', 'album'): @@ -947,8 +947,12 @@ DOCUMENTATION :: END url: 'item_watch_time_stats', async: true, data: { + % if data['live']: + guid: "${data['guid']}" + % else: rating_key: "${data['rating_key']}", - media_type: "${data['media_type']}" + media_type: "${data['media_type']}" + % endif }, complete: function(xhr, status) { $("#watch-time-stats").html(xhr.responseText); @@ -959,8 +963,12 @@ DOCUMENTATION :: END url: 'item_user_stats', async: true, data: { + % if data['live']: + guid: "${data['guid']}" + % else: rating_key: "${data['rating_key']}", - media_type: "${data['media_type']}" + media_type: "${data['media_type']}" + % endif }, complete: function(xhr, status) { $("#user-stats").html(xhr.responseText); diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 041c3e41..d525c9c9 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -1203,8 +1203,8 @@ class DataFactory(object): return library_stats - def get_watch_time_stats(self, rating_key=None, media_type=None, grouping=None, query_days=None): - if rating_key is None: + def get_watch_time_stats(self, rating_key=None, guid=None, media_type=None, grouping=None, query_days=None): + if rating_key is None and guid is None: return [] if grouping is None: @@ -1253,6 +1253,16 @@ class DataFactory(object): ) result = monitor_db.select(query, args=[timestamp_query] + rating_keys * 3) + elif guid: + query = "SELECT (SUM(stopped - started) - " \ + "SUM(CASE WHEN paused_counter IS NULL THEN 0 ELSE paused_counter END)) AS total_time, " \ + "COUNT(DISTINCT %s) AS total_plays, section_id " \ + "FROM session_history " \ + "JOIN session_history_metadata ON session_history_metadata.id = session_history.id " \ + "WHERE stopped >= ? " \ + "AND session_history_metadata.guid = ? " % group_by + + result = monitor_db.select(query, args=[timestamp_query, guid]) else: result = [] else: @@ -1269,6 +1279,15 @@ class DataFactory(object): ) result = monitor_db.select(query, args=rating_keys * 3) + elif guid: + query = "SELECT (SUM(stopped - started) - " \ + "SUM(CASE WHEN paused_counter IS NULL THEN 0 ELSE paused_counter END)) AS total_time, " \ + "COUNT(DISTINCT %s) AS total_plays, section_id " \ + "FROM session_history " \ + "JOIN session_history_metadata ON session_history_metadata.id = session_history.id " \ + "WHERE session_history_metadata.guid = ? " % group_by + + result = monitor_db.select(query, args=[guid]) else: result = [] except Exception as e: @@ -1297,7 +1316,7 @@ class DataFactory(object): return item_watch_time_stats - def get_user_stats(self, rating_key=None, media_type=None, grouping=None): + def get_user_stats(self, rating_key=None, guid=None, media_type=None, grouping=None): if grouping is None: grouping = plexpy.CONFIG.GROUP_HISTORY_TABLES @@ -1338,6 +1357,21 @@ class DataFactory(object): ) result = monitor_db.select(query, args=rating_keys * 3) + elif guid: + query = "SELECT (CASE WHEN users.friendly_name IS NULL OR TRIM(users.friendly_name) = '' " \ + "THEN users.username ELSE users.friendly_name END) AS friendly_name, " \ + "users.user_id, users.username, users.thumb, users.custom_avatar_url AS custom_thumb, " \ + "COUNT(DISTINCT %s) AS total_plays, (SUM(stopped - started) - " \ + "SUM(CASE WHEN paused_counter IS NULL THEN 0 ELSE paused_counter END)) AS total_time, " \ + "section_id " \ + "FROM session_history " \ + "JOIN session_history_metadata ON session_history_metadata.id = session_history.id " \ + "JOIN users ON users.user_id = session_history.user_id " \ + "WHERE session_history_metadata.guid = ? " \ + "GROUP BY users.user_id " \ + "ORDER BY total_plays DESC, total_time DESC" % group_by + + result = monitor_db.select(query, args=[guid]) else: result = [] except Exception as e: diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 87196b12..7e0c083b 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -4497,10 +4497,10 @@ class WebInterface(object): @cherrypy.expose @requireAuth() - def item_watch_time_stats(self, rating_key=None, media_type=None, **kwargs): - if rating_key: + def item_watch_time_stats(self, rating_key=None, guid=None, media_type=None, **kwargs): + if rating_key or guid: item_data = datafactory.DataFactory() - result = item_data.get_watch_time_stats(rating_key=rating_key, media_type=media_type) + result = item_data.get_watch_time_stats(rating_key=rating_key, guid=guid, media_type=media_type) else: result = None @@ -4512,10 +4512,10 @@ class WebInterface(object): @cherrypy.expose @requireAuth() - def item_user_stats(self, rating_key=None, media_type=None, **kwargs): - if rating_key: + def item_user_stats(self, rating_key=None, guid=None, media_type=None, **kwargs): + if rating_key or guid: item_data = datafactory.DataFactory() - result = item_data.get_user_stats(rating_key=rating_key, media_type=media_type) + result = item_data.get_user_stats(rating_key=rating_key, guid=guid, media_type=media_type) else: result = None