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+K&#Mfd2)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 += '
'; + + var imgUrl; + + if (channel.ImageTags.Primary) { + + imgUrl = ApiClient.getUrl("LiveTV/Channels/" + channel.Id + "/Images/Primary", { + maxwidth: 200, + tag: channel.ImageTags.Primary, + type: "Primary" + }); + } + else { + imgUrl = "css/images/media/tvflyout.png"; + } + + html += ''; + + html += '
'; + + var name = channel.Number + ' ' + channel.Name; + + html += '
' + name + '
'; + html += '
' + channel.CurrentProgram.Name + '
'; + + html += '
'; + + 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 += '
';