diff --git a/data/interfaces/default/css/plexpy.css b/data/interfaces/default/css/plexpy.css index fedbf8d4..22e749c2 100644 --- a/data/interfaces/default/css/plexpy.css +++ b/data/interfaces/default/css/plexpy.css @@ -961,14 +961,24 @@ a:hover .dashboard-recent-media-cover { white-space: nowrap; overflow: hidden; } -.summary-navbar-list span { - display: inline-block; - margin-right: 15px; +.summary-navbar-list .breadcrumb { + padding: 0; + margin: 0; + background: none; } -.summary-navbar-list span a { +.summary-navbar-list .breadcrumb > li + li:before { + color: #444; + font-family: FontAwesome; + content: "\f054"; + padding: 0 15px; +} +.summary-navbar-list .breadcrumb > .active { + color: #eee; +} +.summary-navbar-list .breadcrumb a { color: #999; } -.summary-navbar-list span a:hover { +.summary-navbar-list .breadcrumb a:hover { color: #F9AA03; } .summary-content-title-wrapper { @@ -1565,19 +1575,19 @@ a:hover .item-children-poster { top: 3px; left: 3px; } -.user-platforms ul { +.user-player ul { list-style: none; margin: 0; } -.user-platforms-instance { +.user-player-instance { float: left; width: 240px; height: 80px; margin-bottom: 25px; } -.user-platforms-instance li { +.user-player-instance li { } -.user-platforms-instance-box { +.user-player-instance-box { float: left; width: 75px; border-radius: 3px; @@ -1589,7 +1599,7 @@ a:hover .item-children-poster { height: 80px; width: 80px; } -.user-platforms-instance-name { +.user-player-instance-name { float: left; padding-top: 14px; color: #fff; @@ -1602,7 +1612,7 @@ a:hover .item-children-poster { width: 140px; margin-left: 10px; } -.user-platforms-instance-playcount h3 { +.user-player-instance-playcount h3 { font-size: 30px; font-weight: bold; color: #F9AA03; @@ -1612,7 +1622,7 @@ a:hover .item-children-poster { margin: 0 5px 0 10px; float: left; } -.user-platforms-instance-playcount p { +.user-player-instance-playcount p { color: #aaa; font-size: 12px; float: left; diff --git a/data/interfaces/default/current_activity.html b/data/interfaces/default/current_activity.html index 12bb2f84..b118d47f 100644 --- a/data/interfaces/default/current_activity.html +++ b/data/interfaces/default/current_activity.html @@ -137,9 +137,9 @@ DOCUMENTATION :: END
% if a['audio_decision'] == 'direct play': Audio  Direct Play (${a['audio_codec']}) (${a['audio_channels']}ch) - % elif a['audio_decision'] == 'Copy': + % elif a['audio_decision'] == 'copy': Audio  Direct Stream (${a['transcode_audio_codec']}) (${a['transcode_audio_channels']}ch) - % elif a['audio_decision'] != 'transcode': + % elif a['audio_decision'] == 'transcode': Audio  Transcode (${a['transcode_audio_codec']}) (${a['transcode_audio_channels']}ch) % endif % elif a['media_type'] == 'episode' or a['media_type'] == 'movie' or a['media_type'] == 'clip': diff --git a/data/interfaces/default/history.html b/data/interfaces/default/history.html index 0615ea28..3f589390 100644 --- a/data/interfaces/default/history.html +++ b/data/interfaces/default/history.html @@ -30,6 +30,7 @@ User IP Address Platform + Player Title Started Paused @@ -84,7 +85,7 @@ } } history_table = $('#history_table').DataTable(history_table_options); - var colvis = new $.fn.dataTable.ColVis(history_table, { buttonText: ' Select columns', buttonClass: 'btn btn-dark', exclude: [0, 10] }); + var colvis = new $.fn.dataTable.ColVis(history_table, { buttonText: ' Select columns', buttonClass: 'btn btn-dark', exclude: [0, 11] }); $(colvis.button()).appendTo('div.colvis-button-bar'); clearSearchButton('history_table', history_table); diff --git a/data/interfaces/default/history_table_modal.html b/data/interfaces/default/history_table_modal.html index 58345fcf..19de1faf 100644 --- a/data/interfaces/default/history_table_modal.html +++ b/data/interfaces/default/history_table_modal.html @@ -16,7 +16,7 @@ Started Stopped User - Platform + Player Title diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html index 0dd8012f..c7f15dd3 100644 --- a/data/interfaces/default/info.html +++ b/data/interfaces/default/info.html @@ -60,61 +60,61 @@ DOCUMENTATION :: END % if data:
+ % if data['type'] != 'library':
+ % endif
- % if data['type'] == 'movie': - Movies - - ${data['title']} - % elif data['type'] == 'show': - TV Shows - - ${data['title']} - % elif data['type'] == 'season': - - - ${data['parent_title']} - - Season ${data['index']} - % elif data['type'] == 'episode': - - - - - Season ${data['parent_index']} - - Episode ${data['index']} - ${data['title']} - % elif data['type'] == 'artist': - Music - - ${data['title']} - % elif data['type'] == 'album': - - - ${data['parent_title']} - - ${data['title']} - % elif data['type'] == 'track': - - - - - ${data['parent_title']} - - Track ${data['index']} - ${data['title']} +
+ % if data['type'] != 'library': + % endif
+ % if data['type'] != 'library':
% if data['type'] == 'movie' or data['type'] == 'show' or data['type'] == 'season': @@ -311,6 +313,7 @@ DOCUMENTATION :: END
% endif + % endif
@@ -333,6 +336,7 @@ DOCUMENTATION :: END User IP Address Platform + Player Title Started Paused @@ -506,7 +510,20 @@ DOCUMENTATION :: END % if data: -% if data['type'] == 'show' or data['type'] == 'artist': +% if data['type'] == 'library': + +% elif data['type'] == 'show' or data['type'] == 'artist': % endif -% if data['rating']: +% if data['type'] != 'library' and data['rating']: % endfor % else: diff --git a/data/interfaces/default/users.html b/data/interfaces/default/users.html index b493f997..f4bc65c2 100644 --- a/data/interfaces/default/users.html +++ b/data/interfaces/default/users.html @@ -29,6 +29,7 @@ Last Seen Last Known IP Last Platform + Last Player Last Watched Total Plays diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 7718de11..d10dc7e0 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -42,6 +42,7 @@ class DataFactory(object): 'session_history.user_id', 'session_history.user', '(CASE WHEN users.friendly_name IS NULL THEN user ELSE users.friendly_name END) as friendly_name', + 'platform', 'player', 'ip_address', 'session_history_metadata.media_type', @@ -104,6 +105,12 @@ class DataFactory(object): else: watched_status = 0 + # Rename Mystery platform names + platform_names = {'Mystery 3': 'Playstation 3', + 'Mystery 4': 'Playstation 4', + 'Mystery 5': 'Xbox 360'} + platform = platform_names.get(item["platform"], item["platform"]) + row = {"reference_id": item["reference_id"], "id": item["id"], "date": item["date"], @@ -114,6 +121,7 @@ class DataFactory(object): "user_id": item["user_id"], "user": item["user"], "friendly_name": item["friendly_name"], + "platform": platform, "player": item["player"], "ip_address": item["ip_address"], "media_type": item["media_type"], diff --git a/plexpy/users.py b/plexpy/users.py index d6b32c5b..1983a290 100644 --- a/plexpy/users.py +++ b/plexpy/users.py @@ -32,7 +32,8 @@ class Users(object): 'MAX(session_history.started) as last_seen', 'session_history.ip_address as ip_address', 'COUNT(session_history.id) as plays', - 'session_history.player as platform', + 'session_history.platform as platform', + 'session_history.player as player', 'session_history_metadata.full_title as last_watched', 'session_history_metadata.thumb', 'session_history_metadata.parent_thumb', @@ -83,12 +84,19 @@ class Users(object): else: user_thumb = item['user_thumb'] + # Rename Mystery platform names + platform_names = {'Mystery 3': 'Playstation 3', + 'Mystery 4': 'Playstation 4', + 'Mystery 5': 'Xbox 360'} + platform = platform_names.get(item["platform"], item["platform"]) + row = {"id": item['id'], "plays": item['plays'], "last_seen": item['last_seen'], "friendly_name": item['friendly_name'], "ip_address": item['ip_address'], - "platform": item['platform'], + "platform": platform, + "player": item['player'], "last_watched": item['last_watched'], "thumb": thumb, "media_type": item['media_type'], @@ -121,7 +129,8 @@ class Users(object): 'session_history.started as last_seen', 'session_history.ip_address as ip_address', 'COUNT(session_history.id) as play_count', - 'session_history.player as platform', + 'session_history.platform as platform', + 'session_history.player as player', 'session_history_metadata.full_title as last_watched', 'session_history_metadata.thumb', 'session_history_metadata.parent_thumb', @@ -169,11 +178,18 @@ class Users(object): else: thumb = item["thumb"] + # Rename Mystery platform names + platform_names = {'Mystery 3': 'Playstation 3', + 'Mystery 4': 'Playstation 4', + 'Mystery 5': 'Xbox 360'} + platform = platform_names.get(item["platform"], item["platform"]) + row = {"id": item['id'], "last_seen": item['last_seen'], "ip_address": item['ip_address'], "play_count": item['play_count'], - "platform": item['platform'], + "platform": platform, + "player": item['player'], "last_watched": item['last_watched'], "thumb": thumb, "media_type": item['media_type'], @@ -490,10 +506,10 @@ class Users(object): return user_watch_time_stats - def get_user_platform_stats(self, user=None, user_id=None): + def get_user_player_stats(self, user=None, user_id=None): monitor_db = database.MonitorDatabase() - platform_stats = [] + player_stats = [] result_id = 0 try: @@ -522,12 +538,12 @@ class Users(object): 'Mystery 5': 'Xbox 360'} platform_type = platform_names.get(item[2], item[2]) - row = {'platform_name': item[0], + row = {'player_name': item[0], 'platform_type': platform_type, 'total_plays': item[1], 'result_id': result_id } - platform_stats.append(row) + player_stats.append(row) result_id += 1 - return platform_stats \ No newline at end of file + return player_stats \ No newline at end of file diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 3129e493..940052ad 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -587,6 +587,9 @@ class WebInterface(object): if 'reference_id' in kwargs: reference_id = kwargs.get('reference_id', "") custom_where = [['session_history.reference_id', reference_id]] + if 'media_type' in kwargs: + media_type = kwargs.get('media_type', "") + custom_where = [['session_history_metadata.media_type', media_type]] data_factory = datafactory.DataFactory() history = data_factory.get_history(kwargs=kwargs, custom_where=custom_where, grouping=grouping, watched_percent=watched_percent) @@ -771,6 +774,12 @@ class WebInterface(object): if source == 'history': data_factory = datafactory.DataFactory() metadata = data_factory.get_metadata_details(row_id=item_id) + elif item_id == 'movie': + metadata = {'type': 'library', 'library': 'movie', 'media_type': 'movie', 'title': 'Movies'} + elif item_id == 'show': + metadata = {'type': 'library', 'library': 'show', 'media_type': 'episode', 'title': 'TV Shows'} + elif item_id == 'artist': + metadata = {'type': 'library', 'library': 'artist', 'media_type': 'track', 'title': 'Music'} else: pms_connect = pmsconnect.PmsConnect() result = pms_connect.get_metadata_details(rating_key=item_id) @@ -813,17 +822,17 @@ class WebInterface(object): return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats") @cherrypy.expose - def get_user_platform_stats(self, user=None, user_id=None, **kwargs): + def get_user_player_stats(self, user=None, user_id=None, **kwargs): user_data = users.Users() - result = user_data.get_user_platform_stats(user_id=user_id, user=user) + result = user_data.get_user_player_stats(user_id=user_id, user=user) if result: - return serve_template(templatename="user_platform_stats.html", data=result, - title="Platform Stats") + return serve_template(templatename="user_player_stats.html", data=result, + title="Player Stats") else: logger.warn('Unable to retrieve data.') - return serve_template(templatename="user_platform_stats.html", data=None, title="Platform Stats") + return serve_template(templatename="user_player_stats.html", data=None, title="Player Stats") @cherrypy.expose def get_item_children(self, rating_key='', **kwargs):