diff --git a/data/interfaces/default/js/script.js b/data/interfaces/default/js/script.js index 6237e963..e156acb9 100644 --- a/data/interfaces/default/js/script.js +++ b/data/interfaces/default/js/script.js @@ -217,4 +217,20 @@ function isPrivateIP(ip_address) { return true; } return false; +} + +function humanTime(seconds) { + if (seconds >= 86400) { + text = '

/

' + Math.floor(moment.duration(seconds, 'seconds').asDays()) + + '

days

' + Math.floor(moment.duration((seconds % 86400), 'seconds').asHours()) + + '

hrs

' + Math.floor(moment.duration(((seconds % 86400) % 3600), 'seconds').asMinutes()) + '

mins

'; + return text; + } else if (seconds >= 3600) { + text = '

/

' + Math.floor(moment.duration((seconds % 86400), 'seconds').asHours()) + + '

hrs

' + Math.floor(moment.duration(((seconds % 86400) % 3600), 'seconds').asMinutes()) + '

mins

'; + return text; + } else if (seconds >= 60) { + text = '

/

' + Math.floor(moment.duration(((seconds % 86400) % 3600), 'seconds').asMinutes()) + '

mins

'; + return text; + } } \ No newline at end of file diff --git a/data/interfaces/default/user.html b/data/interfaces/default/user.html index 2585cb1d..52fdf409 100644 --- a/data/interfaces/default/user.html +++ b/data/interfaces/default/user.html @@ -190,6 +190,15 @@ + % endfor + +% endif \ No newline at end of file diff --git a/plexpy/plexwatch.py b/plexpy/plexwatch.py index 607c0ccc..8d53794a 100644 --- a/plexpy/plexwatch.py +++ b/plexpy/plexwatch.py @@ -414,9 +414,45 @@ class PlexWatch(object): 'thumb': thumb, 'index': self.get_xml_attr(a, 'index'), 'parentIndex': self.get_xml_attr(a, 'parentIndex'), + 'year': self.get_xml_attr(a, 'year'), 'time': row[0], 'user': row[1] } recently_watched.append(recent_output) - return recently_watched \ No newline at end of file + return recently_watched + + def get_user_watch_time_stats(self, user=None): + myDB = db.DBConnection() + + time_queries = [1, 7, 30, 0] + user_watch_time_stats = [] + + for days in time_queries: + if days > 0: + where = 'WHERE datetime(stopped, "unixepoch", "localtime") >= datetime("now", "-%s days", "localtime") ' \ + 'AND user = "%s"' % (days, user) + else: + where = 'WHERE user = "%s"' % user + + query = 'SELECT (SUM(stopped - time) - SUM(CASE WHEN paused_counter is null THEN 0 ELSE paused_counter END)) as total_time, ' \ + 'COUNT(id) AS total_plays ' \ + 'FROM %s %s' % (self.get_user_table_name(), where) + result = myDB.select(query) + + for item in result: + if item[0]: + total_time = item[0] + total_plays = item[1] + else: + total_time = 0 + total_plays = 0 + + row = {'query_days': days, + 'total_time': total_time, + 'total_plays': total_plays + } + + user_watch_time_stats.append(row) + + return user_watch_time_stats \ No newline at end of file diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 041cd7cb..3d622d58 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -543,7 +543,19 @@ class WebInterface(object): if result: return serve_template(templatename="user_recently_watched.html", recently_watched=result, title="Recently Watched") else: - return serve_template(templatename="user_recently_watched.html", metadata='', title="Recently Watched") + return serve_template(templatename="user_recently_watched.html", recently_watched='', title="Recently Watched") + logger.warn('Unable to retrieve data.') + + @cherrypy.expose + def get_user_watch_time_stats(self, user=None, **kwargs): + + plex_watch = plexwatch.PlexWatch() + result = plex_watch.get_user_watch_time_stats(user) + + if result: + return serve_template(templatename="user_watch_time_stats.html", watch_stats=result, title="Watch Stats") + else: + return serve_template(templatename="user_watch_time_stats.html", watch_stats='', title="Watch Stats") logger.warn('Unable to retrieve data.') @cherrypy.expose @@ -618,3 +630,15 @@ class WebInterface(object): return json.dumps(result) else: logger.warn('Unable to retrieve data.') + + @cherrypy.expose + def get_time_stats(self, user=None, **kwargs): + + plex_watch = plexwatch.PlexWatch() + result = plex_watch.get_user_watch_time_stats(user) + + if result: + cherrypy.response.headers['Content-type'] = 'application/json' + return json.dumps(result) + else: + logger.warn('Unable to retrieve data.') \ No newline at end of file