mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-13 00:32:58 -07:00
Add channels to activity
This commit is contained in:
parent
e1dc299cba
commit
67bac92849
5 changed files with 88 additions and 62 deletions
|
@ -749,8 +749,7 @@ a .users-poster-face:hover {
|
||||||
.dashboard-activity-terminate-session {
|
.dashboard-activity-terminate-session {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding-top: 3px;
|
font-size: 31px;
|
||||||
font-size: 30px;
|
|
||||||
color: #eee;
|
color: #eee;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|
|
@ -69,46 +69,44 @@ 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">
|
||||||
<div class="dashboard-activity-background-overlay">
|
<div class="dashboard-activity-background-overlay">
|
||||||
% if data['media_type'] != 'clip':
|
% if data['channel_stream'] == '0':
|
||||||
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(pms_image_proxy?img=${data['art']}&width=500&height=280&fallback=art&refresh=true);"></div>
|
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(pms_image_proxy?img=${data['art']}&width=500&height=280&fallback=art&refresh=true);"></div>
|
||||||
% else:
|
% else:
|
||||||
% if data['art'].startswith('http'):
|
% if (data['art'] and data['art'].startswith('http')) or (data['thumb'] and data['thumb'].startswith('http')):
|
||||||
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(${data['art']});"></div>
|
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(${data['art']});"></div>
|
||||||
% else:
|
% else:
|
||||||
<!--Hacky solution to escape the image url until I come up with something better-->
|
<!--Hacky solution to escape the image url until I come up with something better-->
|
||||||
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(pms_image_proxy?img=${quote(data['art'])}&width=500&height=280&fallback=art&refresh=true&clip=true);"></div>
|
<div id="background-${data['session_key']}" class="dashboard-activity-background" style="background-image: url(pms_image_proxy?img=${quote(data['art'] or data['thumb'])}&width=500&height=280&fallback=art&refresh=true&clip=true);"></div>
|
||||||
% endif
|
% endif
|
||||||
% endif
|
% endif
|
||||||
<%
|
% if data['channel_stream'] == '0':
|
||||||
if data['media_type'] in ('movie', 'clip'):
|
% if data['media_type'] == 'movie':
|
||||||
rating_key = data['rating_key']
|
<a id="poster-url-${data['session_key']}" href="info?rating_key=${data['rating_key']}" title="${data['title']}" class="hidden-xs">
|
||||||
title = data['title']
|
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=300&height=450&fallback=poster&refresh=true);"></div>
|
||||||
thumb = data['thumb']
|
</a>
|
||||||
elif data['media_type'] in ('track', 'photo'):
|
% elif data['media_type'] == 'episode':
|
||||||
rating_key = data['parent_rating_key']
|
<a id="poster-url-${data['session_key']}" href="info?rating_key=${data['grandparent_rating_key']}" title="${data['grandparent_title']}" class="hidden-xs">
|
||||||
title = data['parent_title']
|
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['grandparent_thumb']}&width=300&height=450&fallback=poster&refresh=true);"></div>
|
||||||
thumb = data['parent_thumb']
|
</a>
|
||||||
elif data['media_type'] in ('episode'):
|
% elif data['media_type'] == 'track':
|
||||||
rating_key = data['grandparent_rating_key']
|
<a id="poster-url-${data['session_key']}" href="info?rating_key=${data['parent_rating_key']}" title="${data['parent_title']}" class="hidden-xs">
|
||||||
title = data['grandparent_title']
|
<div id="poster-${data['session_key']}" class="dashboard-activity-cover" style="background-image: url(pms_image_proxy?img=${data['parent_thumb']}&width=300&height=300&fallback=cover&refresh=true);"></div>
|
||||||
thumb = data['grandparent_thumb']
|
</a>
|
||||||
else:
|
% elif data['media_type'] in ('photo', 'clip'):
|
||||||
rating_key = ''
|
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${data['parent_thumb']}&width=300&height=450&fallback=poster&refresh=true);"></div>
|
||||||
title = ''
|
% else:
|
||||||
thumb = ''
|
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(images/art.png);"></div>
|
||||||
%>
|
% endif
|
||||||
% if data['rating_key'] and data['media_type'] not in ('photo', 'clip'):
|
|
||||||
<a id="poster-url-${data['session_key']}" href="info?rating_key=${rating_key}" title="${title}" class="hidden-xs">
|
|
||||||
<div id="poster-${data['session_key']}" class="dashboard-activity-${'cover' if data['media_type'] == 'track' else 'poster'}" style="background-image: url(pms_image_proxy?img=${thumb}&width=300&height=450&fallback=poster&refresh=true);"></div>
|
|
||||||
</a>
|
|
||||||
% elif data['media_type']:
|
|
||||||
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(pms_image_proxy?img=${thumb}&width=300&height=450&fallback=poster&refresh=true);"></div>
|
|
||||||
% else:
|
% else:
|
||||||
<div id="poster-${data['session_key']}" class="dashboard-activity-poster" style="background-image: url(images/art.png);"></div>
|
% if data['channel_icon'].startswith('http'):
|
||||||
|
<div id="poster-${data['session_key']}" class="dashboard-activity-cover" style="background-image: url(${data['channel_icon']});"></div>
|
||||||
|
% else:
|
||||||
|
<div id="poster-${data['session_key']}" class="dashboard-activity-cover" style="background-image: url(pms_image_proxy?img=${data['channel_icon']}&width=300&height=300&fallback=cover&refresh=true);"></div>
|
||||||
|
% endif
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-activity-info-icon">
|
<div class="dashboard-activity-info-icon">
|
||||||
<%
|
<%
|
||||||
if not _session['user_group'] == 'admin' or data['synced_version'] == '1':
|
if not _session['user_group'] == 'admin' or not data['session_id']:
|
||||||
no_terminate = '-no-terminate'
|
no_terminate = '-no-terminate'
|
||||||
else:
|
else:
|
||||||
no_terminate = ''
|
no_terminate = ''
|
||||||
|
@ -120,7 +118,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% if _session['user_group'] == 'admin' and plexpy.CONFIG.PMS_PLEXPASS and data['session_id']:
|
% if _session['user_group'] == 'admin' and plexpy.CONFIG.PMS_PLEXPASS and data['session_id']:
|
||||||
<div class="dashboard-activity-terminate-session" id="terminate-button-${data['session_key']}" data-key="${data['session_key']}" data-id="${data['session_id']}" data-toggle="tooltip" title="Terminate Stream">
|
<div class="dashboard-activity-terminate-session" id="terminate-button-${data['session_key']}" data-key="${data['session_key']}" data-id="${data['session_id']}" data-toggle="tooltip" title="Terminate Stream">
|
||||||
<i class="fa fa-times"></i>
|
<i class="fa fa-times" style="padding-top: 8px;"></i>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -180,14 +178,14 @@ DOCUMENTATION :: END
|
||||||
% elif data['transcode_decision'] == 'copy':
|
% elif data['transcode_decision'] == 'copy':
|
||||||
Direct Stream
|
Direct Stream
|
||||||
% else:
|
% else:
|
||||||
Direct Play ${'(Synced)' if data['synced_version'] else ''}
|
Direct Play ${'(Synced)' if data['synced_version'] == '1' else ''}
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="dashboard-activity-info-item">
|
<li class="dashboard-activity-info-item">
|
||||||
<div class="sub-heading">Container</div>
|
<div class="sub-heading">Container</div>
|
||||||
<div class="sub-value" id="transcode_container-${data['session_key']}">
|
<div class="sub-value" id="transcode_container-${data['session_key']}">
|
||||||
% if data['stream_container_decision'] == 'transcode':
|
% if data.get('stream_container_decision') == 'transcode':
|
||||||
Transcode (${data['container'].upper()} → ${data['stream_container'].upper()})
|
Transcode (${data['container'].upper()} → ${data['stream_container'].upper()})
|
||||||
% else:
|
% else:
|
||||||
Direct Play (${data['container'].upper()})
|
Direct Play (${data['container'].upper()})
|
||||||
|
@ -199,7 +197,7 @@ DOCUMENTATION :: END
|
||||||
<div class="sub-heading">Video</div>
|
<div class="sub-heading">Video</div>
|
||||||
<div class="sub-value" id="video_decision-${data['session_key']}">
|
<div class="sub-value" id="video_decision-${data['session_key']}">
|
||||||
% if data['media_type'] in ('movie', 'episode', 'clip'):
|
% if data['media_type'] in ('movie', 'episode', 'clip'):
|
||||||
% if data['stream_video_decision'] == 'transcode':
|
% if data.get('stream_video_decision') == 'transcode':
|
||||||
<%
|
<%
|
||||||
hw_d = hw_e = ''
|
hw_d = hw_e = ''
|
||||||
if data['transcode_hw_requested'] == '1' and data['transcode_hw_full_pipeline'] == '0':
|
if data['transcode_hw_requested'] == '1' and data['transcode_hw_full_pipeline'] == '0':
|
||||||
|
@ -208,7 +206,7 @@ DOCUMENTATION :: END
|
||||||
hw_d = hw_e = ' (HW)'
|
hw_d = hw_e = ' (HW)'
|
||||||
%>
|
%>
|
||||||
Transcode (${data['video_codec'].upper()}${hw_d} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['video_resolution'], data['video_resolution'])} → ${data['stream_video_codec'].upper()}${hw_e} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['stream_video_resolution'], data['stream_video_resolution'])})
|
Transcode (${data['video_codec'].upper()}${hw_d} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['video_resolution'], data['video_resolution'])} → ${data['stream_video_codec'].upper()}${hw_e} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['stream_video_resolution'], data['stream_video_resolution'])})
|
||||||
% elif data['stream_video_decision'] == 'copy':
|
% elif data.get('stream_video_decision') == 'copy':
|
||||||
Direct Stream (${data['stream_video_codec'].upper()} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['stream_video_resolution'], data['stream_video_resolution'])})
|
Direct Stream (${data['stream_video_codec'].upper()} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['stream_video_resolution'], data['stream_video_resolution'])})
|
||||||
% else:
|
% else:
|
||||||
Direct Play (${data['video_codec'].upper()} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['video_resolution'], data['video_resolution'])})
|
Direct Play (${data['video_codec'].upper()} ${plexpy.common.VIDEO_RESOLUTION_OVERRIDES.get(data['video_resolution'], data['video_resolution'])})
|
||||||
|
@ -223,9 +221,9 @@ DOCUMENTATION :: END
|
||||||
<li class="dashboard-activity-info-item">
|
<li class="dashboard-activity-info-item">
|
||||||
<div class="sub-heading">Audio</div>
|
<div class="sub-heading">Audio</div>
|
||||||
<div class="sub-value" id="audio_decision-${data['session_key']}">
|
<div class="sub-value" id="audio_decision-${data['session_key']}">
|
||||||
% if data['stream_audio_decision'] == 'transcode':
|
% if data.get('stream_audio_decision') == 'transcode':
|
||||||
Transcode (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['audio_codec'], data['audio_codec'].upper())} ${data['audio_channel_layout'].split('(')[0].capitalize()} → ${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['stream_audio_codec'], data['stream_audio_codec'].upper())} ${data['stream_audio_channel_layout'].split('(')[0].capitalize()})
|
Transcode (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['audio_codec'], data['audio_codec'].upper())} ${data['audio_channel_layout'].split('(')[0].capitalize()} → ${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['stream_audio_codec'], data['stream_audio_codec'].upper())} ${data['stream_audio_channel_layout'].split('(')[0].capitalize()})
|
||||||
% elif data['stream_audio_decision'] == 'copy':
|
% elif data.get('stream_audio_decision') == 'copy':
|
||||||
Direct Stream (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['stream_audio_codec'], data['stream_audio_codec'].upper())} ${data['stream_audio_channel_layout'].split('(')[0].capitalize()})
|
Direct Stream (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['stream_audio_codec'], data['stream_audio_codec'].upper())} ${data['stream_audio_channel_layout'].split('(')[0].capitalize()})
|
||||||
% else:
|
% else:
|
||||||
Direct Play (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['audio_codec'], data['audio_codec'].upper())} ${data['audio_channel_layout'].split('(')[0].capitalize()})
|
Direct Play (${plexpy.common.AUDIO_CODEC_OVERRIDES.get(data['audio_codec'], data['audio_codec'].upper())} ${data['audio_channel_layout'].split('(')[0].capitalize()})
|
||||||
|
@ -278,9 +276,9 @@ DOCUMENTATION :: END
|
||||||
<li class="dashboard-activity-info-item">
|
<li class="dashboard-activity-info-item">
|
||||||
<div class="sub-heading">Bandwidth</div>
|
<div class="sub-heading">Bandwidth</div>
|
||||||
<div class="sub-value">
|
<div class="sub-value">
|
||||||
% if data['media_type'] != 'photo' and data['bandwidth']:
|
% if data['media_type'] != 'photo' and helpers.cast_to_int(data['bandwidth']):
|
||||||
<%
|
<%
|
||||||
bw = helpers.cast_to_int(data['bandwidth']) or "Unknown"
|
bw = helpers.cast_to_int(data['bandwidth'])
|
||||||
if bw != "Unknown":
|
if bw != "Unknown":
|
||||||
if bw > 1000:
|
if bw > 1000:
|
||||||
bw = str(round(bw / 1000.0, 1)) + ' Mbps'
|
bw = str(round(bw / 1000.0, 1)) + ' Mbps'
|
||||||
|
@ -289,7 +287,7 @@ DOCUMENTATION :: END
|
||||||
%>
|
%>
|
||||||
<span id="stream-bandwidth-${data['session_key']}">${bw}</span>
|
<span id="stream-bandwidth-${data['session_key']}">${bw}</span>
|
||||||
<span id="streaming-brain-${data['session_key']}" data-toggle="tooltip" title="Streaming Brain Estimate"><i class="fa fa-info-circle"></i></span>
|
<span id="streaming-brain-${data['session_key']}" data-toggle="tooltip" title="Streaming Brain Estimate"><i class="fa fa-info-circle"></i></span>
|
||||||
% elif data['synced_version'] == '1':
|
% elif data['synced_version'] == '1' or data['channel_stream'] == '1':
|
||||||
<span id="stream-bandwidth-${data['session_key']}">None</span>
|
<span id="stream-bandwidth-${data['session_key']}">None</span>
|
||||||
% else:
|
% else:
|
||||||
<span id="stream-bandwidth-${data['session_key']}">Unknown</span>
|
<span id="stream-bandwidth-${data['session_key']}">Unknown</span>
|
||||||
|
@ -301,6 +299,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['view_offset']:
|
||||||
ETA:
|
ETA:
|
||||||
<span id="stream-eta-${data['session_key']}">
|
<span id="stream-eta-${data['session_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -315,6 +314,13 @@ DOCUMENTATION :: END
|
||||||
$("#stream-duration-${data['session_key']}").html(millisecondsToMinutes(parseInt("${data['duration']}"), false));
|
$("#stream-duration-${data['session_key']}").html(millisecondsToMinutes(parseInt("${data['duration']}"), false));
|
||||||
</script>
|
</script>
|
||||||
</span>
|
</span>
|
||||||
|
% else:
|
||||||
|
ETA: Unknown<br />0:00 / <span class="progress_time_total" id="stream-duration-${data['session_key']}">
|
||||||
|
<script>
|
||||||
|
$("#stream-duration-${data['session_key']}").html(millisecondsToMinutes(parseInt("${data['duration']}"), false));
|
||||||
|
</script>
|
||||||
|
</span>
|
||||||
|
% endif
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -343,28 +349,31 @@ DOCUMENTATION :: END
|
||||||
<i class="fa fa-fw fa-spinner"></i>
|
<i class="fa fa-fw fa-spinner"></i>
|
||||||
% endif
|
% endif
|
||||||
</span>
|
</span>
|
||||||
% if data['rating_key']:
|
% if data['channel_stream'] == '0':
|
||||||
% if data['media_type'] == 'episode':
|
% if data['media_type'] == 'movie':
|
||||||
|
<a href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
<a href="info?rating_key=${data['grandparent_rating_key']}" title="${data['grandparent_title']}">${data['grandparent_title']}</a>
|
<a href="info?rating_key=${data['grandparent_rating_key']}" title="${data['grandparent_title']}">${data['grandparent_title']}</a>
|
||||||
- <a href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
- <a href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
||||||
% elif data['media_type'] == 'movie':
|
|
||||||
<a href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
|
||||||
% elif data['media_type'] == 'clip':
|
|
||||||
<span title="${data['title']}">${data['title']}</span>
|
|
||||||
% elif data['media_type'] == 'track':
|
% elif data['media_type'] == 'track':
|
||||||
<a id="metadata-grandparent_title-${data['session_key']}" href="info?rating_key=${data['grandparent_rating_key']}" title="${data['grandparent_title']}">${data['grandparent_title']}</a>
|
<a id="metadata-grandparent_title-${data['session_key']}" href="info?rating_key=${data['grandparent_rating_key']}" title="${data['grandparent_title']}">${data['grandparent_title']}</a>
|
||||||
- <a id="metadata-title-${data['session_key']}" href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
- <a id="metadata-title-${data['session_key']}" href="info?rating_key=${data['rating_key']}" title="${data['title']}">${data['title']}</a>
|
||||||
% elif data['media_type'] == 'photo':
|
% elif data['media_type'] == 'photo':
|
||||||
<span title="${data['parent_title']}">${data['parent_title']}</span>
|
<span title="${data['parent_title']}">${data['parent_title']}</span>
|
||||||
|
% elif data['media_type'] == 'clip':
|
||||||
|
<span title="${data['title']}">${data['title']}</span>
|
||||||
% else:
|
% else:
|
||||||
<span title="${data['title']}">${data['title']}</span>
|
<span title="${data['title']}">${data['title']}</span>
|
||||||
% endif
|
% endif
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
|
<span title="${data['channel_title']}">${data['channel_title']}</span>
|
||||||
|
- <span title="${data['title']}">${data['title']}</span>
|
||||||
% else:
|
% else:
|
||||||
${data['title']}
|
<span title="${data['title']}">${data['title']}</span>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-activity-metadata-subtitle">
|
<div class="dashboard-activity-metadata-subtitle">
|
||||||
% if data['rating_key']:
|
% if data['channel_stream'] == '0':
|
||||||
<span id="media-type-${data['session_key']}" title="${data['media_type'].capitalize()}">
|
<span id="media-type-${data['session_key']}" title="${data['media_type'].capitalize()}">
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<i class="fa fa-fw fa-film"></i>
|
<i class="fa fa-fw fa-film"></i>
|
||||||
|
@ -378,13 +387,17 @@ DOCUMENTATION :: END
|
||||||
<i class="fa fa-fw fa-video-camera"></i>
|
<i class="fa fa-fw fa-video-camera"></i>
|
||||||
% endif
|
% endif
|
||||||
</span>
|
</span>
|
||||||
|
% else:
|
||||||
|
<span id="media-type-${data['session_key']}" title="Channel">
|
||||||
|
<i class="fa fa-fw fa-cloud"></i>
|
||||||
|
</span>
|
||||||
% endif
|
% endif
|
||||||
% if data['rating_key']:
|
% if data['channel_stream'] == '0':
|
||||||
% if data['media_type'] == 'episode':
|
% if data['media_type'] == 'movie':
|
||||||
|
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
<a href="info?rating_key=${data['parent_rating_key']}" title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</a>
|
<a href="info?rating_key=${data['parent_rating_key']}" title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</a>
|
||||||
· <a href="info?rating_key=${data['rating_key']}" title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</a>
|
· <a href="info?rating_key=${data['rating_key']}" title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</a>
|
||||||
% elif data['media_type'] == 'movie':
|
|
||||||
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
|
||||||
% elif data['media_type'] == 'track':
|
% elif data['media_type'] == 'track':
|
||||||
<a id="metadata-parent_title-${data['session_key']}" href="info?rating_key=${data['parent_rating_key']}" title="${data['parent_title']}" class="sub-heading">${data['parent_title']}</a>
|
<a id="metadata-parent_title-${data['session_key']}" href="info?rating_key=${data['parent_rating_key']}" title="${data['parent_title']}" class="sub-heading">${data['parent_title']}</a>
|
||||||
% elif data['media_type'] == 'photo':
|
% elif data['media_type'] == 'photo':
|
||||||
|
@ -392,6 +405,11 @@ DOCUMENTATION :: END
|
||||||
% else:
|
% else:
|
||||||
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
<span title="${data['year']}" class="sub-heading">${data['year']}</span>
|
||||||
% endif
|
% endif
|
||||||
|
% elif data['media_type'] == 'episode':
|
||||||
|
<span title="Season ${data['parent_media_index']}" class="sub-heading">S${data['parent_media_index']}</span>
|
||||||
|
· <span title="Episode ${data['media_index']}" class="sub-heading">E${data['media_index']}</span>
|
||||||
|
% elif data['channel_title']:
|
||||||
|
<span title="${data['channel_title']}" class="sub-heading">${data['channel_title']}</span>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-activity-metadata-user">
|
<div class="dashboard-activity-metadata-user">
|
||||||
|
|
|
@ -422,8 +422,8 @@
|
||||||
}
|
}
|
||||||
$('#optimized_version-' + key).html(s.optimized_version_profile);
|
$('#optimized_version-' + key).html(s.optimized_version_profile);
|
||||||
|
|
||||||
if (s.media_type != 'photo' && s.bandwidth) {
|
if (s.media_type != 'photo' && parseInt(s.bandwidth)) {
|
||||||
var bw = parseInt(s.bandwidth) || 'Unknown';
|
var bw = parseInt(s.bandwidth);
|
||||||
if (bw != "Unknown") {
|
if (bw != "Unknown") {
|
||||||
if (bw > 1000) {
|
if (bw > 1000) {
|
||||||
bw = (bw / 1000).toFixed(1) + ' Mbps';
|
bw = (bw / 1000).toFixed(1) + ' Mbps';
|
||||||
|
@ -496,14 +496,14 @@
|
||||||
|
|
||||||
setInterval( function(){
|
setInterval( function(){
|
||||||
$('.progress_time_offset').each(function () {
|
$('.progress_time_offset').each(function () {
|
||||||
if ($(this).data('state') === 'playing') {
|
if ($(this).data('state') === 'playing' && $(this).data('view_offset')) {
|
||||||
var view_offset = parseInt($(this).data('view_offset'));
|
var view_offset = parseInt($(this).data('view_offset'));
|
||||||
var timestamp = millisecondsToMinutes(view_offset, false);
|
var timestamp = millisecondsToMinutes(view_offset, false);
|
||||||
$(this).html(timestamp).data('view_offset', view_offset + 1000)
|
$(this).html(timestamp).data('view_offset', view_offset + 1000)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('.progress-bar').each(function () {
|
$('.progress-bar').each(function () {
|
||||||
if ($(this).data('state') === 'playing') {
|
if ($(this).data('state') === 'playing' && $(this).data('view_offset')) {
|
||||||
var view_offset = parseInt($(this).data('view_offset'));
|
var view_offset = parseInt($(this).data('view_offset'));
|
||||||
var duration = parseInt($(this).data('stream_duration'));
|
var duration = parseInt($(this).data('stream_duration'));
|
||||||
var progress_percent = Math.trunc(view_offset / duration * 100)
|
var progress_percent = Math.trunc(view_offset / duration * 100)
|
||||||
|
|
|
@ -61,6 +61,7 @@ AUDIO_CODEC_OVERRIDES = {'truehd': 'TrueHD'}
|
||||||
|
|
||||||
VIDEO_RESOLUTION_OVERRIDES = {'sd': 'SD',
|
VIDEO_RESOLUTION_OVERRIDES = {'sd': 'SD',
|
||||||
'480': '480p',
|
'480': '480p',
|
||||||
|
'540': '540p',
|
||||||
'576': '576p',
|
'576': '576p',
|
||||||
'720': '720p',
|
'720': '720p',
|
||||||
'1080': '1080p',
|
'1080': '1080p',
|
||||||
|
|
|
@ -1418,7 +1418,8 @@ class PmsConnect(object):
|
||||||
transcode_decision = 'direct play'
|
transcode_decision = 'direct play'
|
||||||
|
|
||||||
# Determine if a synced version is being played
|
# Determine if a synced version is being played
|
||||||
if media_type not in ('photo', 'clip') and not session.getElementsByTagName('Session') and transcode_decision == 'direct play':
|
if media_type not in ('photo', 'clip') and not session.getElementsByTagName('Session') \
|
||||||
|
and helpers.get_xml_attr(session, 'ratingKey').isdigit() and transcode_decision == 'direct play':
|
||||||
synced_version = 1
|
synced_version = 1
|
||||||
else:
|
else:
|
||||||
synced_version = 0
|
synced_version = 0
|
||||||
|
@ -1498,7 +1499,7 @@ class PmsConnect(object):
|
||||||
'stream_aspect_ratio': helpers.get_xml_attr(stream_media_info, 'aspectRatio'),
|
'stream_aspect_ratio': helpers.get_xml_attr(stream_media_info, 'aspectRatio'),
|
||||||
'stream_audio_codec': helpers.get_xml_attr(stream_media_info, 'audioCodec'),
|
'stream_audio_codec': helpers.get_xml_attr(stream_media_info, 'audioCodec'),
|
||||||
'stream_audio_channels': stream_audio_channels,
|
'stream_audio_channels': stream_audio_channels,
|
||||||
'stream_audio_channel_layout': audio_details['stream_audio_channel_layout_'] or common.AUDIO_CHANNELS.get(stream_audio_channels, stream_audio_channels),
|
'stream_audio_channel_layout': audio_details.get('stream_audio_channel_layout_') or common.AUDIO_CHANNELS.get(stream_audio_channels, stream_audio_channels),
|
||||||
'stream_video_codec': helpers.get_xml_attr(stream_media_info, 'videoCodec'),
|
'stream_video_codec': helpers.get_xml_attr(stream_media_info, 'videoCodec'),
|
||||||
'stream_video_framerate': helpers.get_xml_attr(stream_media_info, 'videoFrameRate'),
|
'stream_video_framerate': helpers.get_xml_attr(stream_media_info, 'videoFrameRate'),
|
||||||
'stream_video_resolution': stream_video_resolution,
|
'stream_video_resolution': stream_video_resolution,
|
||||||
|
@ -1519,7 +1520,9 @@ class PmsConnect(object):
|
||||||
source_media_details = source_media_part_details = \
|
source_media_details = source_media_part_details = \
|
||||||
source_video_details = source_audio_details = source_subtitle_details = {}
|
source_video_details = source_audio_details = source_subtitle_details = {}
|
||||||
|
|
||||||
if media_type == 'clip' and not helpers.get_xml_attr(session, 'ratingKey').isdigit():
|
if not helpers.get_xml_attr(session, 'ratingKey').isdigit():
|
||||||
|
channel_stream = 1
|
||||||
|
|
||||||
clip_media = session.getElementsByTagName('Media')[0]
|
clip_media = session.getElementsByTagName('Media')[0]
|
||||||
audio_channels = helpers.get_xml_attr(clip_media, 'audioChannels')
|
audio_channels = helpers.get_xml_attr(clip_media, 'audioChannels')
|
||||||
metadata_details = {'media_type': media_type,
|
metadata_details = {'media_type': media_type,
|
||||||
|
@ -1565,9 +1568,13 @@ class PmsConnect(object):
|
||||||
'video_resolution': helpers.get_xml_attr(clip_media, 'videoResolution'),
|
'video_resolution': helpers.get_xml_attr(clip_media, 'videoResolution'),
|
||||||
'audio_codec': helpers.get_xml_attr(clip_media, 'audioCodec'),
|
'audio_codec': helpers.get_xml_attr(clip_media, 'audioCodec'),
|
||||||
'audio_channels': audio_channels,
|
'audio_channels': audio_channels,
|
||||||
'audio_channel_layout': common.AUDIO_CHANNELS.get(audio_channels, audio_channels)
|
'audio_channel_layout': common.AUDIO_CHANNELS.get(audio_channels, audio_channels),
|
||||||
|
'channel_icon': helpers.get_xml_attr(session, 'sourceIcon'),
|
||||||
|
'channel_title': helpers.get_xml_attr(session, 'sourceTitle')
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
|
channel_stream = 0
|
||||||
|
|
||||||
media_id = helpers.get_xml_attr(stream_media_info, 'id')
|
media_id = helpers.get_xml_attr(stream_media_info, 'id')
|
||||||
part_id = helpers.get_xml_attr(stream_media_parts_info, 'id')
|
part_id = helpers.get_xml_attr(stream_media_parts_info, 'id')
|
||||||
|
|
||||||
|
@ -1616,7 +1623,8 @@ class PmsConnect(object):
|
||||||
'view_offset': progress,
|
'view_offset': progress,
|
||||||
'progress_percent': str(helpers.get_percent(progress, stream_details['stream_duration'])),
|
'progress_percent': str(helpers.get_percent(progress, stream_details['stream_duration'])),
|
||||||
'quality_profile': quality_profile,
|
'quality_profile': quality_profile,
|
||||||
'user': user_details['username'] # Keep for backwards compatibility
|
'user': user_details['username'], # Keep for backwards compatibility
|
||||||
|
'channel_stream': channel_stream
|
||||||
}
|
}
|
||||||
|
|
||||||
if 'rating_key' not in session_output:
|
if 'rating_key' not in session_output:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue