mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 07:46:07 -07:00
Update info page for Live TV
This commit is contained in:
parent
3d65ffc6d3
commit
ca55900d40
3 changed files with 81 additions and 18 deletions
|
@ -79,7 +79,7 @@ DOCUMENTATION :: END
|
||||||
data-rating_key="${data['rating_key']}" data-parent_rating_key="${data['parent_rating_key']}" data-grandparent_rating_key="${data['grandparent_rating_key']}">
|
data-rating_key="${data['rating_key']}" data-parent_rating_key="${data['parent_rating_key']}" data-grandparent_rating_key="${data['grandparent_rating_key']}">
|
||||||
<div class="dashboard-activity-container">
|
<div class="dashboard-activity-container">
|
||||||
<%
|
<%
|
||||||
if data['live'] == 1:
|
if data['live']:
|
||||||
background_url = 'pms_image_proxy?img=' + data['art'] + '&width=500&height=280&opacity=40&background=282828&blur=3&fallback=art-live&refresh=true'
|
background_url = 'pms_image_proxy?img=' + data['art'] + '&width=500&height=280&opacity=40&background=282828&blur=3&fallback=art-live&refresh=true'
|
||||||
elif data['channel_stream'] == 0:
|
elif data['channel_stream'] == 0:
|
||||||
background_url = 'pms_image_proxy?img=' + data['art'] + '&width=500&height=280&opacity=40&background=282828&blur=3&fallback=art&refresh=true'
|
background_url = 'pms_image_proxy?img=' + data['art'] + '&width=500&height=280&opacity=40&background=282828&blur=3&fallback=art&refresh=true'
|
||||||
|
@ -91,8 +91,18 @@ DOCUMENTATION :: END
|
||||||
% if data['media_type'] == 'track':
|
% if data['media_type'] == 'track':
|
||||||
<div id="poster-${sk}-bg" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['parent_thumb']}&width=300&height=300&opacity=60&background=282828&blur=3&fallback=cover&refresh=true);"></div>
|
<div id="poster-${sk}-bg" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['parent_thumb']}&width=300&height=300&opacity=60&background=282828&blur=3&fallback=cover&refresh=true);"></div>
|
||||||
% endif
|
% endif
|
||||||
% if data['live'] == 1:
|
% if data['live']:
|
||||||
|
% if data['media_type'] == 'movie':
|
||||||
|
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
||||||
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=300&height=450&fallback=poster-live&refresh=true);"></div>
|
||||||
|
</a>
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
|
<a id="poster-url-${sk}" href="${href}" title="${data['grandparent_title']}">
|
||||||
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['grandparent_thumb']}&width=300&height=450&fallback=poster-live&refresh=true);"></div>
|
||||||
|
</a>
|
||||||
|
% else:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['grandparent_thumb'] or data['thumb']}&width=300&height=450&fallback=poster-live&refresh=true);"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['grandparent_thumb'] or data['thumb']}&width=300&height=450&fallback=poster-live&refresh=true);"></div>
|
||||||
|
% endif
|
||||||
% elif data['channel_stream'] == 0:
|
% elif data['channel_stream'] == 0:
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
||||||
|
@ -337,7 +347,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% if data['media_type'] != 'photo':
|
% if data['media_type'] != 'photo':
|
||||||
<div class="dashboard-activity-info-time">
|
<div class="dashboard-activity-info-time">
|
||||||
% if data['live'] == 1:
|
% if data['live']:
|
||||||
<br />Live
|
<br />Live
|
||||||
% elif data['view_offset']:
|
% elif data['view_offset']:
|
||||||
ETA:
|
ETA:
|
||||||
|
@ -367,7 +377,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-activity-progress">
|
<div class="dashboard-activity-progress">
|
||||||
<div class="dashboard-activity-progress-bar">
|
<div class="dashboard-activity-progress-bar">
|
||||||
% if data['live'] == 1:
|
% if data['live']:
|
||||||
<div id="progress-bar-${sk}" class="progress-bar" style="width: 100%" data-state="live" data-toggle="tooltip" title="Stream Progress Live">Live</div>
|
<div id="progress-bar-${sk}" class="progress-bar" style="width: 100%" data-state="live" data-toggle="tooltip" title="Stream Progress Live">Live</div>
|
||||||
% else:
|
% else:
|
||||||
<div id="buffer-bar-${sk}" class="buffer-bar" style="width: ${data['transcode_progress']}%" data-toggle="tooltip" title="Transcoder Progress ${data['transcode_progress']}%">${data['transcode_progress']}%</div>
|
<div id="buffer-bar-${sk}" class="buffer-bar" style="width: ${data['transcode_progress']}%" data-toggle="tooltip" title="Transcoder Progress ${data['transcode_progress']}%">${data['transcode_progress']}%</div>
|
||||||
|
@ -391,12 +401,12 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-activity-metadata-title">
|
<div class="dashboard-activity-metadata-title">
|
||||||
% if data['live'] == 1:
|
% if data['live']:
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<span title="${data['title']}">${data['title']}</span>
|
<a href="${href}" title="${data['title']}">${data['title']}</a>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<span title="${data['grandparent_title']}">${data['grandparent_title']}</span>
|
<a href="${href}" title="${data['grandparent_title']}">${data['grandparent_title']}</a>
|
||||||
- <span title="${data['title']}">${data['title']}</span>
|
- <a href="${href}" title="${data['title']}">${data['title']}</a>
|
||||||
% else:
|
% else:
|
||||||
<span title="${data['title']}">${data['title']}</span>
|
<span title="${data['title']}">${data['title']}</span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -453,8 +463,8 @@ DOCUMENTATION :: END
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<span title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</span>
|
<a href="${href}" title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</a>
|
||||||
· <span title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</span>
|
· <a href="${href}" title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</a>
|
||||||
% else:
|
% else:
|
||||||
<span title="Live TV" class="sub-heading">Live TV</span>
|
<span title="Live TV" class="sub-heading">Live TV</span>
|
||||||
% endif
|
% endif
|
||||||
|
|
|
@ -36,6 +36,7 @@ DOCUMENTATION :: END
|
||||||
</%doc>
|
</%doc>
|
||||||
|
|
||||||
<%!
|
<%!
|
||||||
|
from collections import defaultdict
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from plexpy import notifiers
|
from plexpy import notifiers
|
||||||
|
@ -68,8 +69,11 @@ DOCUMENTATION :: END
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
% if data:
|
% if metadata:
|
||||||
<% media_info = data['media_info'][0] if data['media_info'] else {} %>
|
<%
|
||||||
|
data = defaultdict(lambda: None, **metadata)
|
||||||
|
media_info = defaultdict(lambda: None, **(data['media_info'][0] if data['media_info'] else {}))
|
||||||
|
%>
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="art-face" style="background-image:url(pms_image_proxy?img=${data['art']}&width=1920&height=1080)"></div>
|
<div class="art-face" style="background-image:url(pms_image_proxy?img=${data['art']}&width=1920&height=1080)"></div>
|
||||||
|
@ -81,7 +85,23 @@ DOCUMENTATION :: END
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="summary-navbar-list">
|
<div class="summary-navbar-list">
|
||||||
<ul class="list-unstyled breadcrumb">
|
<ul class="list-unstyled breadcrumb">
|
||||||
% if data['media_type'] in ('movie', 'collection'):
|
% if media_info['live']:
|
||||||
|
<li>Live TV</li>
|
||||||
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
% if data['media_type'] == 'movie':
|
||||||
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
|
<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>
|
||||||
|
<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:
|
||||||
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
|
% endif
|
||||||
|
% endif
|
||||||
|
% elif data['media_type'] in ('movie', 'collection'):
|
||||||
<li><a href="library?section_id=${data['section_id']}">${data['library_name']}</a></li>
|
<li><a href="library?section_id=${data['section_id']}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
|
@ -134,6 +154,13 @@ DOCUMENTATION :: END
|
||||||
% else:
|
% else:
|
||||||
<a href="${config['pms_web_url']}#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}" target="_blank" title="View on Plex Web">
|
<a href="${config['pms_web_url']}#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}" target="_blank" title="View on Plex Web">
|
||||||
% endif
|
% endif
|
||||||
|
% if media_info['live']:
|
||||||
|
<div class="summary-poster-face" style="background-image: url(pms_image_proxy?img=${data['grandparent_thumb'] or data['thumb']}&width=300&height=450&fallback=poster-live);">
|
||||||
|
<div class="summary-poster-face-overlay">
|
||||||
|
<span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
% else:
|
||||||
% if data['media_type'] == 'episode':
|
% if data['media_type'] == 'episode':
|
||||||
<div class="summary-poster-face-episode" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=500&height=280&fallback=art);">
|
<div class="summary-poster-face-episode" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=500&height=280&fallback=art);">
|
||||||
<div class="summary-poster-face-overlay">
|
<div class="summary-poster-face-overlay">
|
||||||
|
@ -162,10 +189,21 @@ DOCUMENTATION :: END
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
% endif
|
% endif
|
||||||
|
% endif
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-content-title">
|
<div class="summary-content-title">
|
||||||
% if data['media_type'] in ('movie', 'show', 'artist', 'collection'):
|
% if media_info['live']:
|
||||||
|
% if data['media_type'] == 'movie':
|
||||||
|
<h1> </h1><h1>${data['title']}</h1>
|
||||||
|
% elif data['media_type'] == 'eipsode':
|
||||||
|
<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>
|
||||||
|
% endif
|
||||||
|
% endif
|
||||||
|
% elif data['media_type'] in ('movie', 'show', 'artist', 'collection'):
|
||||||
<h1> </h1><h1>${data['title']}</h1>
|
<h1> </h1><h1>${data['title']}</h1>
|
||||||
% elif data['media_type'] == 'season':
|
% elif data['media_type'] == 'season':
|
||||||
<h1> </h1><h1><a href="info?rating_key=${data['parent_rating_key']}">${data['parent_title']}</a></h1>
|
<h1> </h1><h1><a href="info?rating_key=${data['parent_rating_key']}">${data['parent_title']}</a></h1>
|
||||||
|
@ -187,7 +225,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-content-wrapper">
|
<div class="summary-content-wrapper">
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie' or media_info['live']:
|
||||||
<div class="summary-content-padding hidden-xs hidden-sm" style="height: 305px;">
|
<div class="summary-content-padding hidden-xs hidden-sm" style="height: 305px;">
|
||||||
% elif data['media_type'] in ('show', 'season', 'collection'):
|
% elif data['media_type'] in ('show', 'season', 'collection'):
|
||||||
<div class="summary-content-padding hidden-xs hidden-sm" style="height: 270px;">
|
<div class="summary-content-padding hidden-xs hidden-sm" style="height: 270px;">
|
||||||
|
@ -245,12 +283,14 @@ DOCUMENTATION :: END
|
||||||
Year <strong> ${data['year']}</strong>
|
Year <strong> ${data['year']}</strong>
|
||||||
% elif data['media_type'] == 'show':
|
% elif data['media_type'] == 'show':
|
||||||
Aired <strong> ${data['year']}</strong>
|
Aired <strong> ${data['year']}</strong>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode' and data['originally_available_at']:
|
||||||
Aired <strong> <span id="airdate">${data['originally_available_at']}</span></strong>
|
Aired <strong> <span id="airdate">${data['originally_available_at']}</span></strong>
|
||||||
% elif data['media_type'] == 'album' or data['media_type'] == 'track':
|
% elif data['media_type'] == 'album' or data['media_type'] == 'track':
|
||||||
Released <strong> ${data['year']}</strong>
|
Released <strong> ${data['year']}</strong>
|
||||||
% elif data['media_type'] == 'collection':
|
% elif data['media_type'] == 'collection':
|
||||||
Year <strong> ${data['min_year']} - ${data['max_year']}</strong>
|
Year <strong> ${data['min_year']} - ${data['max_year']}</strong>
|
||||||
|
% elif data['year']:
|
||||||
|
Year <strong> ${data['year']}</strong>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-content-details-tag">
|
<div class="summary-content-details-tag">
|
||||||
|
@ -263,6 +303,11 @@ DOCUMENTATION :: END
|
||||||
Rated <strong> ${data['content_rating']} </strong>
|
Rated <strong> ${data['content_rating']} </strong>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
|
<div class="summary-content-details-tag">
|
||||||
|
% if media_info['channel_identifier']:
|
||||||
|
Channel <strong> ${data['channel_call_sign']} ${data['channel_identifier']} </strong>
|
||||||
|
% endif
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
% if data['tagline']:
|
% if data['tagline']:
|
||||||
<div class="summary-content-summary">
|
<div class="summary-content-summary">
|
||||||
|
@ -474,6 +519,10 @@ DOCUMENTATION :: END
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="modalIncludes()">
|
<%def name="modalIncludes()">
|
||||||
|
% if metadata:
|
||||||
|
<%
|
||||||
|
data = defaultdict(None, **metadata)
|
||||||
|
%>
|
||||||
<div class="modal fade" id="info-modal" tabindex="-1" role="dialog" aria-labelledby="info-modal">
|
<div class="modal fade" id="info-modal" tabindex="-1" role="dialog" aria-labelledby="info-modal">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal fade" id="ip-info-modal" tabindex="-1" role="dialog" aria-labelledby="ip-info-modal">
|
<div class="modal fade" id="ip-info-modal" tabindex="-1" role="dialog" aria-labelledby="ip-info-modal">
|
||||||
|
@ -549,6 +598,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
% endif
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
|
@ -558,7 +608,10 @@ DOCUMENTATION :: END
|
||||||
<script src="${http_root}js/dataTables.bootstrap.pagination.js"></script>
|
<script src="${http_root}js/dataTables.bootstrap.pagination.js"></script>
|
||||||
<script src="${http_root}js/moment-with-locale.js"></script>
|
<script src="${http_root}js/moment-with-locale.js"></script>
|
||||||
|
|
||||||
% if data:
|
% if metadata:
|
||||||
|
<%
|
||||||
|
data = defaultdict(None, **metadata)
|
||||||
|
%>
|
||||||
<script src="${http_root}js/tables/history_table.js${cache_param}"></script>
|
<script src="${http_root}js/tables/history_table.js${cache_param}"></script>
|
||||||
% if data['media_type'] in ('show', 'artist'):
|
% if data['media_type'] in ('show', 'artist'):
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -3934,7 +3934,7 @@ class WebInterface(object):
|
||||||
if metadata['section_id'] and not allow_session_library(metadata['section_id']):
|
if metadata['section_id'] and not allow_session_library(metadata['section_id']):
|
||||||
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
||||||
|
|
||||||
return serve_template(templatename="info.html", data=metadata, title="Info", config=config, source=source)
|
return serve_template(templatename="info.html", metadata=metadata, title="Info", config=config, source=source)
|
||||||
else:
|
else:
|
||||||
if get_session_user_id():
|
if get_session_user_id():
|
||||||
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue