From dc16df919218215c8a770c90aca36f75f55d1cd1 Mon Sep 17 00:00:00 2001 From: herby2212 <12448284+herby2212@users.noreply.github.com> Date: Sun, 29 Jan 2023 17:13:08 +0100 Subject: [PATCH] watch_time_stats for collection --- data/interfaces/default/info.html | 5 ++++- plexpy/datafactory.py | 31 ++++++++++++++++++++++--------- plexpy/webserve.py | 4 ++-- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html index 15e960af..2d71ec2b 100644 --- a/data/interfaces/default/info.html +++ b/data/interfaces/default/info.html @@ -931,7 +931,10 @@ DOCUMENTATION :: END $.ajax({ url: 'item_watch_time_stats', async: true, - data: { rating_key: "${data['rating_key']}" }, + data: { + rating_key: "${data['rating_key']}", + media_type: "${data['media_type']}" + }, complete: function(xhr, status) { $("#watch-time-stats").html(xhr.responseText); } diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 33070a60..eef38b6b 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -1134,7 +1134,7 @@ class DataFactory(object): return library_stats - def get_watch_time_stats(self, rating_key=None, grouping=None, query_days=None): + def get_watch_time_stats(self, rating_key=None, media_type=None, grouping=None, query_days=None): if rating_key is None: return [] @@ -1156,6 +1156,18 @@ class DataFactory(object): group_by = 'session_history.reference_id' if grouping else 'session_history.id' + _rating_keys = [] + if media_type == 'collection': + pms_connect = pmsconnect.PmsConnect() + result = pms_connect.get_item_children(rating_key=rating_key) + + for child in result['children_list']: + _rating_keys.append(child['rating_key']) + else: + _rating_keys.append(rating_key) + + rating_keys = '(' + ','.join(_rating_keys) + ')' + for days in query_days: timestamp_query = timestamp - days * 24 * 60 * 60 @@ -1168,10 +1180,11 @@ class DataFactory(object): 'FROM session_history ' \ 'JOIN session_history_metadata ON session_history_metadata.id = session_history.id ' \ 'WHERE stopped >= %s ' \ - 'AND (session_history.grandparent_rating_key = ? ' \ - 'OR session_history.parent_rating_key = ? ' \ - 'OR session_history.rating_key = ?)' % (group_by, timestamp_query) - result = monitor_db.select(query, args=[rating_key, rating_key, rating_key]) + 'AND (session_history.grandparent_rating_key IN %s ' \ + 'OR session_history.parent_rating_key IN %s ' \ + 'OR session_history.rating_key IN %s)' % (group_by, timestamp_query, + rating_keys, rating_keys, rating_keys) + result = monitor_db.select(query) else: result = [] else: @@ -1181,10 +1194,10 @@ class DataFactory(object): '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.grandparent_rating_key = ? ' \ - 'OR session_history.parent_rating_key = ? ' \ - 'OR session_history.rating_key = ?)' % group_by - result = monitor_db.select(query, args=[rating_key, rating_key, rating_key]) + 'WHERE (session_history.grandparent_rating_key IN %s ' \ + 'OR session_history.parent_rating_key IN %s ' \ + 'OR session_history.rating_key IN %s)' % (group_by, rating_keys, rating_keys, rating_keys) + result = monitor_db.select(query) else: result = [] except Exception as e: diff --git a/plexpy/webserve.py b/plexpy/webserve.py index e38f5f8f..ef4d6101 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -4431,10 +4431,10 @@ class WebInterface(object): @cherrypy.expose @requireAuth() - def item_watch_time_stats(self, rating_key=None, **kwargs): + def item_watch_time_stats(self, rating_key=None, media_type=None, **kwargs): if rating_key: item_data = datafactory.DataFactory() - result = item_data.get_watch_time_stats(rating_key=rating_key) + result = item_data.get_watch_time_stats(rating_key=rating_key, media_type=media_type) else: result = None