From 708ca5d32f73411fb3038e47631f7017c8615c71 Mon Sep 17 00:00:00 2001
From: Luke Pulverenti
Date: Thu, 2 Jan 2014 23:58:22 -0500
Subject: [PATCH] added live channel playback
---
dashboard-ui/css/icons.css | 7 ++
dashboard-ui/css/images/icons/tv.png | Bin 0 -> 346 bytes
dashboard-ui/css/images/media/tvflyout.png | Bin 0 -> 916 bytes
dashboard-ui/dashboard.html | 2 +-
dashboard-ui/scripts/librarybrowser.js | 7 +-
dashboard-ui/scripts/mediaplayer.js | 118 +++++++++++++++++++--
dashboard-ui/scripts/site.js | 3 +
7 files changed, 124 insertions(+), 13 deletions(-)
create mode 100644 dashboard-ui/css/images/icons/tv.png
create mode 100644 dashboard-ui/css/images/media/tvflyout.png
diff --git a/dashboard-ui/css/icons.css b/dashboard-ui/css/icons.css
index c2fd9d62c..77e096d2f 100644
--- a/dashboard-ui/css/icons.css
+++ b/dashboard-ui/css/icons.css
@@ -92,4 +92,11 @@
/* Fallback */
.ui-nosvg .ui-icon-subtitles:after {
background-image: url("images/icons/subtitles.png");
+}
+.ui-icon-tv:after {
+ background-image: url("images/icons/tv.png");
+}
+/* Fallback */
+.ui-nosvg .ui-icon-tv:after {
+ background-image: url("images/icons/tv.png");
}
\ No newline at end of file
diff --git a/dashboard-ui/css/images/icons/tv.png b/dashboard-ui/css/images/icons/tv.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8fe67ac7e37ddd2ceb9dbbc3376c60350b071a6
GIT binary patch
literal 346
zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}Ea{HEjtmSN
z`?>!lvI6;>1s;*bKn;gMnDKc2iWH#Wdrud~5DWjQ6BPLlIS9D!mhfR+q{5M+%I=^b
z;KA46pkTo?O<@NETP#bT@`6C1m(c(e`EzcWpOZw}V~sAW
zYg%7wwrn($cj9gP<~ie4mwT?P#v@~$*%vOvr5cnq%SSJD%y+YuOrBP#efZ{ws|}5U
zhux(XD_y{mU=8x60gZ!F1&x|jaiEh8f|#dx$K3`z7hes
zJvolH9h$N#Pd2{wlI{5ad}X;)>8q$cY=)sLU2pUj_r-oZdCboD{JhT>5)TPqnX;M9
lQ1?`Cf!-ZfqwmKG<4#m8N_ys1>;&{WgQu&X%Q~loCIHUVf-nF8
literal 0
HcmV?d00001
diff --git a/dashboard-ui/css/images/media/tvflyout.png b/dashboard-ui/css/images/media/tvflyout.png
new file mode 100644
index 0000000000000000000000000000000000000000..af467a9de86e783d778813c87fe98f4f789dc2e1
GIT binary patch
literal 916
zcmV;F18e+=P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D11U*FK~#8N?U_wz
z6G0TmH_0BFFDRsnCJKT*lpw@pL$G>?2M>x~6c6G}Jg8tnQNe?t)k~p>h!+on7e&EK
z@dNBZY`n&NiA20Lm!xP99s)^Vv++Oe(~H)oo!Lzm-w%fO=FM)%{AcFPWTG()!!QiP
zFbu;m{~q9e4w!Hc*!cmvaI(gCBraI
zQfOV`@p#DN@w|e&59Pp0&>@ry03M+;dau`e){h9;Y*zRC{V(v&1m0OPP4faZIfC*f
zfa&`V(|8me+KMfd2)tDmDK>BoeugXHVl<6ZUASRQg0sj-Xrs0XjV2j|i9{=kd&K
zs-7(ti!aG{3|j;ctS17J#zWRt(BXS9mmq>z=Tq>npp2vbx!rD0R;$&fcy16lB7oqR2&*+sL+6*e-R@+i
zQdy+XK#&puoq9}ezld!yBpe7(#%w4HUzS3laE9CsBP&3U+<^iCHr)?f1iC-%CO|M4oFi8W*d2brEUeb-LzMuFxm>PIzA~@`zLIMjcKjN26)XT*x6njlRJzpM
zB*1hi6xxEkuoEIYr$-joF_W65;2c19sKK-!Yc`wLv)SxO
zB9Rz1O;el_b!wJks0F|@kC7|52@$^ge7*)ce~Mz#47C7%8D(*OK0>|{T$2MZ8^qm#
zxH6xHuk1I1D+CZ3A5;Gbc7TT{w=fIDwVD##k_5~7eE#>Sw_2^YZ`W`K^ZFK-yejZ`Z2z_P53-bJp7DgnmG+6F|}26G4YB8sw|K$QR?@wYhn
zN)U%0O#Q=DwGCxU0AF@i{LM{OX>jPdN~3NoN^gZ}e_p^Bm$}K=Ek+)n(f6_%id*49
qG8DJM48t%C!!QiPFbv}sH0>t<3q~F-H7OPV0000A new version of Media Browser Server is available!
Please shutdown the server and
update manually.
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index 19410ce27..b308e6a14 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -564,6 +564,9 @@
if (item.Type == "Channel") {
return "livetvchannel.html?id=" + id;
}
+ if (item.Type == "Program") {
+ return "livetvprogram.html?id=" + id;
+ }
if (item.Type == "Series") {
return "itemdetails.html?id=" + id;
}
@@ -599,9 +602,7 @@
}
if (item.Type == "MusicArtist") {
- if (itemByNameContext == "music") {
- return "itembynamedetails.html?musicartist=" + ApiClient.encodeName(item.Name) + "&context=" + (itemByNameContext || "music");
- }
+ return "itembynamedetails.html?musicartist=" + ApiClient.encodeName(item.Name) + "&context=" + (itemByNameContext || "music");
}
return item.IsFolder ? (id ? "itemlist.html?parentId=" + id : "#") : "itemdetails.html?id=" + id;
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index 268c460ea..d5ac238e3 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -24,6 +24,7 @@
self.playlist = [];
var currentPlaylistIndex = 0;
+ var channelsList;
function requestFullScreen(element) {
// Supports most browsers and their versions.
@@ -35,7 +36,7 @@
$('.itemVideo').addClass('fullscreenVideo');
}
}
-
+
function exitFullScreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
@@ -283,6 +284,16 @@
hideFlyout($('#qualityFlyout'));
});
+
+ $('#channelsFlyout').on('click', '.mediaFlyoutOption', function () {
+
+ if (!$(this).hasClass('selectedMediaFlyoutOption')) {
+ var channelId = this.getAttribute('data-channelid');
+ self.playById(channelId, 'Channel');
+ }
+
+ hideFlyout($('#channelsFlyout'));
+ });
});
function endsWith(text, pattern) {
@@ -312,7 +323,7 @@
positionSlider.val(percent).slider('enable').slider('refresh');
}
} else {
- positionSlider.slider('disable');
+ positionSlider.slider('disable').slider('refresh');
}
currentTimeElement.html(timeText);
@@ -389,6 +400,7 @@
$('#audioTracksButton', nowPlayingBar).hide();
$('#subtitleButton', nowPlayingBar).hide();
$('#chaptersButton', nowPlayingBar).hide();
+ $('#channelsButton', nowPlayingBar).hide();
$('#mediaElement', nowPlayingBar).html(html);
var audioElement = $("audio", nowPlayingBar);
@@ -485,7 +497,7 @@
else if (videoStream.Width >= 720) {
baseParams.videoBitrate = 700000;
}
-
+
if ((videoStream.Codec || '').toLowerCase().indexOf('h264') != -1) {
}
@@ -583,6 +595,8 @@
$('#fullscreenButton', nowPlayingBar).show();
}
+ var channelsButton = $('#channelsButton', nowPlayingBar).hide();
+
var videoElement = $("video", nowPlayingBar);
var initialVolume = localStorage.getItem("volume") || 0.5;
@@ -641,6 +655,22 @@
currentItem = item;
curentDurationTicks = item.RunTimeTicks;
+ if (!channelsList) {
+
+ ApiClient.getLiveTvChannels({
+
+ userId: Dashboard.getCurrentUserId()
+
+ }).done(function (result) {
+
+ channelsList = result.Items;
+
+ if (result.Items.length) {
+ channelsButton.show();
+ }
+ });
+ }
+
return videoElement[0];
};
@@ -919,13 +949,24 @@
tag: item.ImageTags.Thumb
});
- } else {
+ }
+ else if (item.Type == "Channel" || item.Type == "Recording") {
+ url = "css/images/items/detail/tv.png";
+ }
+ else if (item.MediaType == "Audio") {
+ url = "css/images/items/detail/audio.png";
+ }
+ else {
url = "css/images/items/detail/video.png";
}
var name = item.Name;
var seriesName = '';
+ // Channel number
+ if (item.Number) {
+ name = item.Number + ' ' + name;
+ }
if (item.IndexNumber != null) {
name = item.IndexNumber + " - " + name;
}
@@ -935,10 +976,15 @@
if (item.SeriesName || item.Album || item.ProductionYear) {
seriesName = item.SeriesName || item.Album || item.ProductionYear;
}
+ if (item.CurrentProgram) {
+ seriesName = item.CurrentProgram.Name;
+ }
- html += "

";
+ var href = LibraryBrowser.getHref(item.CurrentProgram || item);
- if (item.SeriesName || item.Album) {
+ html += "
";
+
+ if (item.SeriesName || item.Album || item.CurrentProgram) {
html += '
' + seriesName + '
' + name + '
';
} else {
html += '
' + name + '
' + seriesName + '
';
@@ -1340,7 +1386,9 @@
};
function hideFlyout(flyout) {
+
flyout.hide().empty();
+
$(document.body).off("mousedown.hidesearchhints");
}
@@ -1579,8 +1627,8 @@
var html = '';
- var videoStream = item.MediaStreams.filter(function (i) {
- return i.Type == "Video";
+ var videoStream = (item.MediaStreams || []).filter(function (stream) {
+ return stream.Type == "Video";
})[0];
var currentVideoBitrate = getParameterByName('videoBitrate', currentMediaElement.currentSrc);
@@ -1607,7 +1655,7 @@
}
if (maxAllowedWidth >= 480) {
- options.push({ name: '480p+', maxWidth: 720, videoBitrate: 700000 });
+ options.push({ name: '480p+', maxWidth: 720, videoBitrate: 700000 });
options.push({ name: '480p', maxWidth: 720, videoBitrate: 420000 });
}
if (maxAllowedWidth >= 360) {
@@ -1641,6 +1689,58 @@
return html;
}
+ function getChannelsFlyoutHtml(channels) {
+
+ var html = '';
+
+ for (var i = 0, length = channels.length; i < length; i++) {
+
+ var channel = channels[i];
+
+ html += '
";
+ }
+
+ return html;
+ }
+
+ self.showChannelsFlyout = function () {
+
+ var flyout = $('#channelsFlyout');
+
+ var channels = channelsList || [];
+
+ showFlyout(flyout, '#channelsButton');
+
+ flyout.html(getChannelsFlyoutHtml(channels)).scrollTop(0);
+ };
+
self.showAudioTracksFlyout = function () {
var flyout = $('#audioTracksFlyout');
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index 6623ce648..7e628bc16 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -1337,6 +1337,9 @@ $(function () {
footerHtml += '
';
footerHtml += '
';
+ footerHtml += '
';
+ footerHtml += '
';
+
footerHtml += '
';
footerHtml += '
';