Add watch time and user stats to info pages (#1471)

* watch time stats for show

* watch time stats for movie

* User Stats for movies and shows

* implementation for missing media types

* cleanup

* no data + rescrict guest access implementation

Co-authored-by: herby2212 <jannes.nagel@gmx.de>
This commit is contained in:
herby2212 2021-10-22 02:33:29 +02:00 committed by GitHub
parent 22f4b33087
commit c6ff8940b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 322 additions and 1 deletions

View file

@ -458,7 +458,6 @@ class WebInterface(object):
else:
return {'result': 'error', 'message': 'Flush recently added failed.'}
##### Libraries #####
@cherrypy.expose
@ -4486,6 +4485,136 @@ class WebInterface(object):
else:
return serve_template(templatename="info_collection_list.html", data=None, title=title)
@cherrypy.expose
@requireAuth()
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, media_type=media_type)
else:
result = None
if result:
return serve_template(templatename="user_watch_time_stats.html", data=result, title="Watch Stats")
else:
logger.warn("Unable to retrieve data for item_watch_time_stats.")
return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats")
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
@addtoapi()
def get_item_watch_time_stats(self, rating_key=None, media_type=None, **kwargs):
""" Get the watch time stats for the media item.
```
Required parameters:
rating_key (str): Rating key of the item
media_type (str): Media type of the item
Optional parameters:
None
Returns:
json:
[
{
"query_days": 1,
"total_time": 0,
"total_plays": 0
},
{
"query_days": 7,
"total_time": 0,
"total_plays": 0
},
{
"query_days": 30,
"total_time": 0,
"total_plays": 0
},
{
"query_days": 0,
"total_time": 57776,
"total_plays": 13
}
]
```
"""
if rating_key:
item_data = datafactory.DataFactory()
stats = item_data.get_watch_time_stats(rating_key=rating_key, media_type=media_type)
else:
stats = None
if stats:
return stats
else:
logger.warn("Unable to retrieve data for get_item_watch_time_stats.")
return stats
@cherrypy.expose
@requireAuth()
def item_user_stats(self, rating_key=None, media_type=None, **kwargs):
if rating_key:
item_data = datafactory.DataFactory()
result = item_data.get_user_stats(rating_key=rating_key, media_type=media_type)
else:
result = None
if result:
return serve_template(templatename="library_user_stats.html", data=result, title="Player Stats")
else:
logger.warn("Unable to retrieve data for item_user_stats.")
return serve_template(templatename="library_user_stats.html", data=None, title="Player Stats")
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
@addtoapi()
def get_item_user_stats(self, rating_key=None, media_type=None, **kwargs):
""" Get the user stats for the media item.
```
Required parameters:
rating_key (str): Rating key of the item
media_type (str): Media type of the item
Optional parameters:
None
Returns:
json:
[
{
"friendly_name": "Jon Snow",
"user_id": 1601089,
"user_thumb": "",
"username": "jsnow@thewinteriscoming.com",
"total_plays": 6
},
{
"friendly_name": "DanyKhaleesi69",
"user_id": 8008135,
"user_thumb": "",
"username": "DanyKhaleesi69",
"total_plays": 5
}
]
```
"""
if rating_key:
item_data = datafactory.DataFactory()
stats = item_data.get_user_stats(rating_key=rating_key, media_type=media_type)
else:
stats = None
if stats:
return stats
else:
logger.warn("Unable to retrieve data for get_item_user_stats.")
return stats
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))