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