mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-05 20:51:15 -07:00
Update UI to support season titles
This commit is contained in:
parent
84448600d2
commit
f92ba453c8
8 changed files with 47 additions and 32 deletions
|
@ -62,7 +62,7 @@ DOCUMENTATION :: END
|
|||
% if session is not None:
|
||||
<%
|
||||
from collections import defaultdict
|
||||
from plexpy.helpers import cast_to_int, page
|
||||
from plexpy.helpers import cast_to_int, page, short_season
|
||||
from plexpy.common import VIDEO_RESOLUTION_OVERRIDES, AUDIO_CODEC_OVERRIDES, EXTRA_TYPES
|
||||
import plexpy
|
||||
%>
|
||||
|
@ -74,6 +74,7 @@ DOCUMENTATION :: END
|
|||
parent_href = page('info', data['parent_rating_key'])
|
||||
grandparent_href = page('info', data['grandparent_rating_key'])
|
||||
user_href = page('user', data['user_id']) if data['user_id'] else '#'
|
||||
season = short_season(data['parent_title'])
|
||||
%>
|
||||
<div class="dashboard-activity-instance" id="activity-instance-${sk}" data-key="${sk}" data-id="${data['session_id']}"
|
||||
data-rating_key="${data['rating_key']}" data-parent_rating_key="${data['parent_rating_key']}" data-grandparent_rating_key="${data['grandparent_rating_key']}"
|
||||
|
@ -478,7 +479,7 @@ DOCUMENTATION :: END
|
|||
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
||||
% elif data['media_type'] == 'episode':
|
||||
% if data['media_index']:
|
||||
<a href="${href}" title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</a>
|
||||
<a href="${href}" title="${data['parent_title']}" class="sub-heading">${season}</a>
|
||||
· <a href="${href}" title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</a>
|
||||
% else:
|
||||
<a href="${href}" title="${data['originally_available_at']}" class="sub-heading">${data['originally_available_at']}</a>
|
||||
|
@ -490,7 +491,7 @@ DOCUMENTATION :: END
|
|||
% if data['media_type'] == 'movie':
|
||||
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
||||
% elif data['media_type'] == 'episode':
|
||||
<a href="${parent_href}" title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</a>
|
||||
<a href="${parent_href}" title="${data['parent_title']}" class="sub-heading">${season}</a>
|
||||
· <a href="${href}" title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</a>
|
||||
% elif data['media_type'] == 'track':
|
||||
<a id="metadata-parent_title-${sk}" href="${parent_href}" title="${data['parent_title']}" class="sub-heading">${data['parent_title']}</a>
|
||||
|
@ -507,7 +508,7 @@ DOCUMENTATION :: END
|
|||
% elif data['channel_title']:
|
||||
<span title="${data['channel_title']}" class="sub-heading">${data['channel_title']}</span>
|
||||
% if data['media_type'] == 'episode' and data['parent_media_index'] and data['media_index']:
|
||||
(<span title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</span>
|
||||
(<span title="${data['parent_title']}" class="sub-heading">${season}</span>
|
||||
· <span title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</span>)
|
||||
% elif data['media_type'] == 'episode' and data['originally_available_at']:
|
||||
(<span title="${data['originally_available_at']}" class="sub-heading">${data['originally_available_at']}</span>)
|
||||
|
@ -515,7 +516,7 @@ DOCUMENTATION :: END
|
|||
% else:
|
||||
<span title="Channel" class="sub-heading">Channel</span>
|
||||
% if data['media_type'] == 'episode' and data['parent_media_index'] and data['media_index']:
|
||||
(<span title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</span>
|
||||
(<span title="${data['parent_title']}" class="sub-heading">${season}</span>
|
||||
· <span title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</span>)
|
||||
% elif data['media_type'] == 'episode' and data['originally_available_at']:
|
||||
(<span title="${data['originally_available_at']}" class="sub-heading">${data['originally_available_at']}</span>)
|
||||
|
|
|
@ -41,7 +41,7 @@ DOCUMENTATION :: END
|
|||
|
||||
from plexpy import notifiers
|
||||
from plexpy.common import MEDIA_TYPE_HEADERS, MEDIA_FLAGS_AUDIO, MEDIA_FLAGS_VIDEO
|
||||
from plexpy.helpers import page, get_percent, cast_to_int
|
||||
from plexpy.helpers import page, get_percent, cast_to_int, short_season
|
||||
|
||||
# Get audio codec file
|
||||
def af(codec):
|
||||
|
@ -81,6 +81,11 @@ DOCUMENTATION :: END
|
|||
<%
|
||||
data = defaultdict(lambda: None, **metadata)
|
||||
media_info = defaultdict(lambda: None, **(data['media_info'][0] if data['media_info'] else {}))
|
||||
season = ''
|
||||
if data['media_type'] == 'episode':
|
||||
season = short_season(data['parent_title'])
|
||||
elif data['media_type'] == 'season':
|
||||
season = short_season(data['title'])
|
||||
%>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
@ -105,7 +110,7 @@ DOCUMENTATION :: END
|
|||
<li class="hidden-xs hidden-sm">${data['grandparent_title']}</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
% if data['media_index']:
|
||||
<li>Season ${data['parent_media_index']}</li>
|
||||
<li> ${data['parent_title']}</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="active metadata-xml">Episode ${data['media_index']} - ${data['title']}</li>
|
||||
% else:
|
||||
|
@ -125,13 +130,13 @@ DOCUMENTATION :: END
|
|||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="active metadata-xml">Season ${data['media_index']}</li>
|
||||
<li class="active metadata-xml">${data['title']}</li>
|
||||
% elif data['media_type'] == 'episode':
|
||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="hidden-xs hidden-sm"><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li><a href="${page('info', data['parent_rating_key'])}">Season ${data['parent_media_index']}</a></li>
|
||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="active metadata-xml">Episode ${data['media_index']} - ${data['title']}</li>
|
||||
% elif data['media_type'] == 'artist':
|
||||
|
@ -242,18 +247,18 @@ DOCUMENTATION :: END
|
|||
<h1>${data['grandparent_title']}</h1>
|
||||
<h2>${data['title']}</h2>
|
||||
% if data['media_index']:
|
||||
<h3 class="hidden-xs">S${data['parent_media_index']} · E${data['media_index']}</h3>
|
||||
<h3 class="hidden-xs">${season} · E${data['media_index']}</h3>
|
||||
% endif
|
||||
% endif
|
||||
% elif data['media_type'] in ('movie', 'show', 'artist', 'collection', 'playlist', 'photo_album'):
|
||||
<h1> </h1><h1>${data['title']}</h1>
|
||||
% elif data['media_type'] == 'season':
|
||||
<h1> </h1><h1><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></h1>
|
||||
<h3 class="hidden-xs">S${data['media_index']}</h3>
|
||||
<h3 class="hidden-xs">${season}</h3>
|
||||
% elif data['media_type'] == 'episode':
|
||||
<h1><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></h1>
|
||||
<h2>${data['title']}</h2>
|
||||
<h3 class="hidden-xs">S${data['parent_media_index']} · E${data['media_index']}</h3>
|
||||
<h3 class="hidden-xs">${season} · E${data['media_index']}</h3>
|
||||
% elif data['media_type'] == 'album':
|
||||
<h1><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></h1>
|
||||
<h2>${data['title']}</h2>
|
||||
|
@ -705,6 +710,11 @@ DOCUMENTATION :: END
|
|||
% if metadata:
|
||||
<%
|
||||
data = defaultdict(None, **metadata)
|
||||
season = ''
|
||||
if data['media_type'] == 'episode':
|
||||
season = short_season(data['parent_title'])
|
||||
elif data['media_type'] == 'season':
|
||||
season = short_season(data['title'])
|
||||
%>
|
||||
<div class="modal fade" id="info-modal" tabindex="-1" role="dialog" aria-labelledby="info-modal">
|
||||
</div>
|
||||
|
@ -744,9 +754,9 @@ DOCUMENTATION :: END
|
|||
% elif data['media_type'] == 'show':
|
||||
${data['title']}
|
||||
% elif data['media_type'] == 'season':
|
||||
${data['parent_title']}<br />S${data['media_index']}
|
||||
${data['parent_title']}<br />${data['title']}
|
||||
% elif data['media_type'] == 'episode':
|
||||
${data['grandparent_title']}<br />${data['title']}<br />S${data['parent_media_index']} · E${data['media_index']}
|
||||
${data['grandparent_title']}<br />${data['title']}<br />${season} · E${data['media_index']}
|
||||
% elif data['media_type'] == 'artist':
|
||||
${data['title']}
|
||||
% elif data['media_type'] == 'album':
|
||||
|
|
|
@ -28,7 +28,7 @@ DOCUMENTATION :: END
|
|||
|
||||
% if data != None:
|
||||
<%
|
||||
from plexpy.helpers import cast_to_int, page
|
||||
from plexpy.helpers import cast_to_int, page, short_season
|
||||
%>
|
||||
% if data['children_count'] > 0:
|
||||
<div class="item-children-wrapper">
|
||||
|
@ -71,7 +71,7 @@ DOCUMENTATION :: END
|
|||
</h3>
|
||||
</div>
|
||||
% elif data['children_type'] == 'season':
|
||||
<a href="${page('info', child['rating_key'])}" title="Season ${child['media_index']}">
|
||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
||||
<div class="item-children-poster">
|
||||
% if child['thumb']:
|
||||
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster')});">
|
||||
|
@ -80,7 +80,7 @@ DOCUMENTATION :: END
|
|||
% endif
|
||||
<div class="item-children-card-overlay">
|
||||
<div class="item-children-overlay-text">
|
||||
Season ${child['media_index']}
|
||||
${child['title']}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -193,7 +193,7 @@ DOCUMENTATION :: END
|
|||
${child['title']}
|
||||
</span>
|
||||
</a>
|
||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">S${child['parent_media_index']}</a> · <a class="no-highlight" href="${page('info', child['rating_key'])}" title="${child['title']}">E${child['media_index']}</a>)</span>
|
||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${short_season(child['parent_title'])}</a> · <a class="no-highlight" href="${page('info', child['rating_key'])}" title="${child['title']}">E${child['media_index']}</a>)</span>
|
||||
% elif child['media_type'] == 'track':
|
||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>
|
||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
||||
|
|
|
@ -54,7 +54,7 @@ DOCUMENTATION :: END
|
|||
|
||||
% if data != None:
|
||||
<%
|
||||
from plexpy.helpers import page
|
||||
from plexpy.helpers import page, short_season
|
||||
%>
|
||||
% if data['results_count'] > 0:
|
||||
% if 'collection' in data['results_list'] and data['results_list']['collection']:
|
||||
|
@ -149,7 +149,7 @@ DOCUMENTATION :: END
|
|||
</div>
|
||||
<div class="item-children-instance-text-wrapper poster-item">
|
||||
<h3 title="${child['parent_title']}">${child['parent_title']}</h3>
|
||||
<h3 class="text-muted">S${child['media_index']}</h3>
|
||||
<h3 class="text-muted">${short_season(child['title'])}</h3>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -175,7 +175,7 @@ DOCUMENTATION :: END
|
|||
<div class="item-children-instance-text-wrapper episode-item">
|
||||
<h3 title="${child['grandparent_title']}">${child['grandparent_title']}</h3>
|
||||
<h3 title="${child['title']}">${child['title']}</h3>
|
||||
<h3 class="text-muted">S${child['parent_media_index']} · E${child['media_index']}</h3>
|
||||
<h3 class="text-muted">${short_season(child['parent_title'])} · E${child['media_index']}</h3>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -32,7 +32,8 @@ DOCUMENTATION :: END
|
|||
|
||||
% if data:
|
||||
<%
|
||||
from plexpy.helpers import page
|
||||
from plexpy.helpers import page, short_season
|
||||
|
||||
%>
|
||||
<div class="dashboard-recent-media-row">
|
||||
<div id="recently-added-row-scroller" style="left: 0;">
|
||||
|
@ -77,7 +78,7 @@ DOCUMENTATION :: END
|
|||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
||||
</h3>
|
||||
<h3 class="text-muted">
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="Season ${item['parent_media_index']}">S${item['parent_media_index']}</a>
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||
· <a href="${page('info', item['rating_key'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||
</h3>
|
||||
% elif item['media_type'] == 'movie':
|
||||
|
|
|
@ -32,7 +32,7 @@ DOCUMENTATION :: END
|
|||
|
||||
% if data != None:
|
||||
<%
|
||||
from plexpy.helpers import cast_to_int, page
|
||||
from plexpy.helpers import cast_to_int, page, short_season
|
||||
%>
|
||||
% if data:
|
||||
<div class="dashboard-recent-media-row">
|
||||
|
@ -146,7 +146,7 @@ DOCUMENTATION :: END
|
|||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
||||
</h3>
|
||||
<h3 class="text-muted">
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="Season ${item['parent_media_index']}">S${item['parent_media_index']}</a>
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||
·
|
||||
<a href="${page('info', item['rating_key'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||
</h3>
|
||||
|
|
|
@ -50,13 +50,13 @@ DOCUMENTATION :: END
|
|||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="hidden-xs hidden-sm">${query['grandparent_title']}</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="active">Season ${query['parent_media_index']}</li>
|
||||
<li class="active">${query['parent_title']}</li>
|
||||
% elif query['media_type'] == 'episode':
|
||||
<li class="hidden-xs hidden-sm">TV Shows</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="hidden-xs hidden-sm">${query['grandparent_title']}</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li>Season ${query['parent_media_index']}</li>
|
||||
<li>${query['parent_title']}</li>
|
||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||
<li class="active">Episode ${query['media_index']} - ${query['title']}</li>
|
||||
% elif query['media_type'] == 'artist':
|
||||
|
@ -141,6 +141,9 @@ DOCUMENTATION :: END
|
|||
|
||||
<%def name="modalIncludes()">
|
||||
% if query:
|
||||
<%
|
||||
from plexpy.helpers import short_season
|
||||
%>
|
||||
<div class="modal fade" id="confirm-modal-update" tabindex="-1" role="dialog" aria-labelledby="confirm-modal-update">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
|
@ -157,9 +160,9 @@ DOCUMENTATION :: END
|
|||
% elif query['media_type'] == 'show':
|
||||
${query['grandparent_title']}
|
||||
% elif query['media_type'] == 'season':
|
||||
${query['grandparent_title']}<br />S${query['parent_media_index']}
|
||||
${query['grandparent_title']}<br />${query['parent_title']}
|
||||
% elif query['media_type'] == 'episode':
|
||||
${query['grandparent_title']}<br />${query['title']}<br />S${query['parent_media_index']} · E${query['media_index']}
|
||||
${query['grandparent_title']}<br />${query['title']}<br />${short_season(query['parent_title'])} · E${query['media_index']}
|
||||
% elif query['media_type'] == 'artist':
|
||||
${query['grandparent_title']}
|
||||
% elif query['media_type'] == 'album':
|
||||
|
|
|
@ -28,7 +28,7 @@ DOCUMENTATION :: END
|
|||
|
||||
% if data:
|
||||
<%
|
||||
from plexpy.helpers import page
|
||||
from plexpy.helpers import page, short_season
|
||||
%>
|
||||
<div class="dashboard-recent-media-row">
|
||||
<div id="recently-watched-row-scroller" style="left: 0;">
|
||||
|
@ -68,7 +68,7 @@ DOCUMENTATION :: END
|
|||
</h3>
|
||||
% if item['media_index']:
|
||||
<h3 class="text-muted">
|
||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="Season ${item['parent_media_index']}">S${item['parent_media_index']}</a>
|
||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||
· <a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||
</h3>
|
||||
% else:
|
||||
|
@ -84,7 +84,7 @@ DOCUMENTATION :: END
|
|||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">${item['title']}</a>
|
||||
</h3>
|
||||
<h3 class="text-muted">
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="Season ${item['parent_media_index']}">S${item['parent_media_index']}</a>
|
||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||
· <a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||
</h3>
|
||||
% endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue