diff --git a/data/interfaces/default/css/plexpy.css b/data/interfaces/default/css/plexpy.css index 4df273da..5ef61179 100644 --- a/data/interfaces/default/css/plexpy.css +++ b/data/interfaces/default/css/plexpy.css @@ -1188,6 +1188,9 @@ a .dashboard-activity-metadata-user-thumb:hover { -webkit-flex-grow: 1; flex-grow: 1; } +.dashboard-stats-info-title.library h4 { + flex-basis: 200px; +} .dashboard-stats-info-title .dashboard-stats-stats-units { color: #aaa; font-size: 12px; @@ -1198,6 +1201,9 @@ a .dashboard-activity-metadata-user-thumb:hover { white-space: nowrap; max-width: 125px; } +.dashboard-stats-info-title .dashboard-stats-stats-units.library { + max-width: 200px; +} .dashboard-stats-info-scroller { height: 120px; width: 100%; @@ -1238,7 +1244,7 @@ a .dashboard-activity-metadata-user-thumb:hover { .dashboard-stats-info-item:last-of-type { margin-bottom: 0; } -.dashboard-stats-info-item .sub-heading { +.dashboard-stats-info-item .sub-list { height: 100%; width: 15px; color: #aaa; @@ -1269,6 +1275,16 @@ a .dashboard-activity-metadata-user-thumb:hover { -webkit-flex-shrink: 0; flex-shrink: 0; } +.dashboard-stats-info-item .sub-divider { + height: 100%; + margin-left: 10px; + color: #aaa; + font-size: 12px; + text-align: left; + text-transform: uppercase; + -webkit-flex-shrink: 0; + flex-shrink: 0; +} .dashboard-stats-info-item.expanded { padding: 5px 5px; line-height: 20px; @@ -1282,6 +1298,9 @@ a .dashboard-activity-metadata-user-thumb:hover { .dashboard-stats-info-item.expanded .sub-count { font-size: 16px; } +.dashboard-stats-info-item.expanded .sub-divider { + font-size: 16px; +} .dashboard-stats-info-item:hover { background-color: rgba(255,255,255,0.05); } diff --git a/data/interfaces/default/home_stats.html b/data/interfaces/default/home_stats.html index db109cbd..a35fc719 100644 --- a/data/interfaces/default/home_stats.html +++ b/data/interfaces/default/home_stats.html @@ -126,7 +126,7 @@ DOCUMENTATION :: END data-art="${row.get('art')}" data-thumb="${row.get('thumb')}" data-platform="${row.get('platform_type')}" data-user_id="${row.get('user_id')}" data-friendly_name="${row.get('friendly_name')}" data-last_watch="${row.get('last_watch')}" data-started="${row.get('started')}"> -
${loop.index + 1}
+
${loop.index + 1}
% if stat_id in ('top_movies', 'popular_movies', 'top_tv', 'popular_tv', 'top_music', 'popular_music', 'last_watched'): % if top_stat['rows'][loop.index]['rating_key']: diff --git a/data/interfaces/default/library_stats.html b/data/interfaces/default/library_stats.html index a5e89a1d..05d81231 100644 --- a/data/interfaces/default/library_stats.html +++ b/data/interfaces/default/library_stats.html @@ -24,75 +24,55 @@ DOCUMENTATION :: END % if data: -% for library in data: <% - section_id = library['section_id'] + types = ('movie', 'show', 'artist', 'photo') + headers = {'movie': ('Movie Libraries', ('Movies', '', '')), + 'show': ('TV Show Libraries', ('Shows', 'Seasons', 'Episodes')), + 'artist': ('Music Libraries', ('Artists', 'Albums', 'Tracks')), + 'photo': ('Photo Libraries', ('Albums', '', 'Photos'))} %> -
+% for section_type in types: +% if section_type in data: +
-
- - % if library['thumb'].startswith("http"): - - % else: - - % endif - +
+
-
-

- ${library['section_name']} -

- items +
+

${headers[section_type][0]}

+ ${' / '.join(u for u in headers[section_type][1] if u)}
    - <% - h1 = h2 = h3 = '' - if library['section_type'] == 'movie': - h1 = 'Movies' - if library['section_type'] == 'show': - h1, h2, h3 = 'Shows', 'Seasons', 'Episodes' - elif library['section_type'] == 'artist': - h1, h2, h3 = 'Artists', 'Albums', 'Tracks' - elif library['section_type'] == 'photo': - h1, h3 = 'Albums', 'Photos' - %> - % if h1: -
  • -
    + % for section in data[section_type]: +
  • +
    ${loop.index + 1}
    + % if headers[section_type][1][0]:
    - ${library['count']} -
    -
  • - % endif - % if h2: -
  • -
    -
    - ${h2} + ${section['count']}
    + % endif + % if headers[section_type][1][1]: +
    /
    - ${library['parent_count']} -
    -
  • - % endif - % if h3: -
  • -
    -
    - ${h3} + ${section['child_count']}
    + % endif + % if headers[section_type][1][2]: +
    /
    - ${library['child_count']} + ${section['grandchild_count']}
    + % endif
  • - % endif + % endfor
@@ -100,6 +80,7 @@ DOCUMENTATION :: END
+% endif % endfor % else:
No stats to show.

diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index b5f502dd..08c82b65 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -14,6 +14,7 @@ # along with PlexPy. If not, see . import json +from itertools import groupby import plexpy import common @@ -832,36 +833,37 @@ class DataFactory(object): library_stats = [] - for id in library_cards: - if id.isdigit(): - try: - query = 'SELECT section_id, section_name, section_type, thumb AS library_thumb, ' \ - 'custom_thumb_url AS custom_thumb, art, count, parent_count, child_count ' \ - 'FROM library_sections ' \ - 'WHERE section_id = %s ' % id - result = monitor_db.select(query) - except Exception as e: - logger.warn(u"PlexPy DataFactory :: Unable to execute database query for get_library_stats: %s." % e) - return None + try: + query = 'SELECT section_id, section_name, section_type, thumb AS library_thumb, ' \ + 'custom_thumb_url AS custom_thumb, art, count, parent_count, child_count ' \ + 'FROM library_sections ' \ + 'WHERE section_id IN (%s) ' \ + 'ORDER BY section_type, count DESC, parent_count DESC, child_count DESC ' % ','.join(library_cards) + result = monitor_db.select(query) + except Exception as e: + logger.warn(u"PlexPy DataFactory :: Unable to execute database query for get_library_stats: %s." % e) + return None - for item in result: - if item['custom_thumb'] and item['custom_thumb'] != item['library_thumb']: - library_thumb = item['custom_thumb'] - elif item['library_thumb']: - library_thumb = item['library_thumb'] - else: - library_thumb = common.DEFAULT_COVER_THUMB + for item in result: + if item['custom_thumb'] and item['custom_thumb'] != item['library_thumb']: + library_thumb = item['custom_thumb'] + elif item['library_thumb']: + library_thumb = item['library_thumb'] + else: + library_thumb = common.DEFAULT_COVER_THUMB - library = {'section_id': item['section_id'], - 'section_name': item['section_name'], - 'section_type': item['section_type'], - 'thumb': library_thumb, - 'art': item['art'], - 'count': item['count'], - 'parent_count': item['parent_count'], - 'child_count': item['child_count'] - } - library_stats.append(library) + library = {'section_id': item['section_id'], + 'section_name': item['section_name'], + 'section_type': item['section_type'], + 'thumb': library_thumb, + 'art': item['art'], + 'count': item['count'], + 'child_count': item['parent_count'], + 'grandchild_count': item['child_count'] + } + library_stats.append(library) + + library_stats = {k: list(v) for k, v in groupby(library_stats, key=lambda x: x['section_type'])} return library_stats