diff --git a/ApiClient.js b/ApiClient.js index 274be16b9f..592cf2bad4 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -872,6 +872,47 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }); }; + /** + * Gets shares from a network device + */ + self.getNetworkShares = function (path) { + + if (!path) { + throw new Error("null path"); + } + + var options = {}; + options.path = path; + + var url = self.getUrl("Environment/NetworkShares", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + + /** + * Gets the parent of a given path + */ + self.getParentPath = function (path) { + + if (!path) { + throw new Error("null path"); + } + + var options = {}; + options.path = path; + + var url = self.getUrl("Environment/ParentPath", options); + + return self.ajax({ + type: "GET", + url: url + }); + }; + /** * Gets a list of physical drives from the server */ diff --git a/dashboard-ui/css/detailtable.css b/dashboard-ui/css/detailtable.css index 4f29011a8b..a23cf51035 100644 --- a/dashboard-ui/css/detailtable.css +++ b/dashboard-ui/css/detailtable.css @@ -27,14 +27,14 @@ .detailTable td { border-spacing: 0; - border-top: 1px solid #444; - border-bottom: 1px solid #444; + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; padding: 5px 5px; } .detailTable th { border-spacing: 0; - border-bottom: 1px solid #444; + border-bottom: 1px solid #404040; padding: 5px; font-weight: bold; text-align: left; @@ -73,3 +73,9 @@ display: table-cell; } } + +.detailTable tbody tr:nth-child(odd) td, +.detailTable tbody tr:nth-child(odd) th { + background-color: #eeeeee; /* non-RGBA fallback */ + background-color: rgba(0,0,0,.1); +} diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index d80fdc075c..9a01ec5437 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -363,12 +363,14 @@ a.itemTag:hover { } .noBackdrop { - height: 280px; + height: auto; border: 0; } .noBackdrop .itemBackdropContent { background-color: transparent; + position: static; + margin-top: 1em; } .lnkSibling { @@ -435,13 +437,6 @@ a.itemTag:hover { font-weight: normal!important; } -.itemBackdrop .parentName { - position: absolute; - top: 0; - left: 0; - right: 0; -} - .inlineItemName { font-size: 22px; } @@ -451,8 +446,8 @@ a.itemTag:hover { } .itemOverview { - max-height: 70px; - overflow-y: auto; + /*max-height: 120px; + overflow-y: auto;*/ text-overflow: ellipsis; } @@ -615,10 +610,6 @@ a.itemTag:hover { height: auto; } - .noBackdrop { - height: auto; - } - .itemBackdropContent { position: static; padding: 1em 1em 0; @@ -836,8 +827,8 @@ a.itemTag:hover { right: 5px; text-align: center; vertical-align: middle; - width: 28px; - height: 23px; + width: 26px; + height: 21px; padding-top: 5px; border-radius: 50%; color: #fff; @@ -970,8 +961,7 @@ a.itemTag:hover { .alphabetPicker { position: fixed; right: 2px; - bottom: 0; - top: 100px; + bottom: 30px; width: 27px; z-index: 1000; text-align: center; @@ -984,7 +974,7 @@ a.itemTag:hover { display: block; text-decoration: none; padding: 1px 0; - color: #eee!important; + color: #bbb!important; } .alphabetPicker a:hover:not(.selectedCharacter) { @@ -1008,35 +998,31 @@ a.itemTag:hover { } } -@media all and (min-height: 600px) { - - .alphabetPicker a { - padding: 2px 0; - } -} - -@media all and (min-height: 720px) { - - .alphabetPicker { - top: 135px; - } +@media all and (min-height: 800px) { .alphabetPicker a { - padding: 4px 0; + padding: 5px 0; } } -@media all and (min-height: 850px) { +@media all and (min-height: 900px) { - .alphabetPicker a { - padding: 6px 0; + .alphabetPicker { + bottom: 120px; + } +} + +@media all and (min-height: 1000px) { + + .alphabetPicker { + bottom: 200px; } } .viewCollageImage { display: inline-block; margin: 0 1px 0 0; - width: 32.6%; + width: 32.62%; height: 49%; background-repeat: no-repeat; background-position: center 15%; @@ -1046,7 +1032,7 @@ a.itemTag:hover { @media all and (min-width: 650px) { .viewCollageImage { - width: 32.8%; + width: 32.9%; height: 49.1%; } } @@ -1054,6 +1040,6 @@ a.itemTag:hover { @media all and (min-width: 1440px) { .viewCollageImage { - width: 32.9%; + width: 32.95%; } } diff --git a/dashboard-ui/css/mediaplayer.css b/dashboard-ui/css/mediaplayer.css index 5d32b4953e..485cc53501 100644 --- a/dashboard-ui/css/mediaplayer.css +++ b/dashboard-ui/css/mediaplayer.css @@ -198,7 +198,7 @@ input[type="range"]::-ms-fill-upper { border: 1px solid #999; position: absolute; z-index: 99999; - bottom: 55px; + bottom: 80px; margin-left: -50px; max-height: 300px; overflow-y: auto; diff --git a/dashboard-ui/css/posteritem.css b/dashboard-ui/css/posteritem.css index 6d84ba9f22..85784d2aa9 100644 --- a/dashboard-ui/css/posteritem.css +++ b/dashboard-ui/css/posteritem.css @@ -7,7 +7,6 @@ color: #fff!important; text-decoration: none; text-align: left; - overflow: hidden; -webkit-transition: all 500ms ease; -moz-transition: all 500ms ease; -o-transition: all 500ms ease; @@ -15,15 +14,9 @@ transition: all 500ms ease; } - .posterItem:hover { - -moz-box-shadow: 0 0 15px 8px #2572EB; - -webkit-box-shadow: 0 0 25px 8px #2572EB; - box-shadow: 0 0 15px 8px #2572EB; - } - .smallBackdropPosterItem, .smallPosterItem { - margin: 3px; + margin: 5px; } .posterItemImage { @@ -31,10 +24,20 @@ background-repeat: no-repeat; background-position: center bottom; background-color: #000; - border: 2px solid #202020; position: relative; } + .posterItem:hover .posterItemImage { + -moz-box-shadow: 0 0 12px 7px #2572EB; + -webkit-box-shadow: 0 0 12px 7px #2572EB; + box-shadow: 0 0 12px 7px #2572EB; + } + +.coveredPosterItemImage { + background-size: cover; + background-position: center center; +} + .transparentPosterItem .posterItemImage { background-color: transparent; } @@ -117,7 +120,7 @@ } .squarePosterItem .posterItemImage { - height: 138px; + height: 142px; } .storeReviewCount { @@ -130,7 +133,7 @@ } .backdropPosterItem .posterItemImage { - height: 77.625px; + height: 79.875px; } .smallBackdropPosterItem { @@ -138,7 +141,7 @@ } .smallBackdropPosterItem .posterItemImage { - height: 87.75px; + height: 90px; } .portraitPosterItem { @@ -146,7 +149,7 @@ } .portraitPosterItem .posterItemImage { - height: 129px; + height: 135px; } .posterItemProgress .itemProgressBar { @@ -155,6 +158,16 @@ opacity: .6; } +.miniPosterItemProgress { + /* Make sure it's on top of the fade gradient '*/ + z-index: 10; +} + +.miniPosterItemProgress .itemProgressBar { + height: 7px; + opacity: 1; +} + @media all and (min-width: 540px) { .backdropPosterItem { @@ -162,11 +175,11 @@ } .backdropPosterItem .posterItemImage { - height: 144px; + height: 146.25px; } .smallBackdropPosterItem { - width: 188px; + width: 184px; } .smallBackdropPosterItem .posterItemImage { @@ -182,7 +195,7 @@ } .squarePosterItem .posterItemImage { - height: 160px; + height: 164px; } .portraitPosterItem { @@ -190,7 +203,7 @@ } .portraitPosterItem .posterItemImage { - height: 177px; + height: 183px; } } @@ -201,7 +214,7 @@ } .backdropPosterItem .posterItemImage { - height: 153px; + height: 155.25px; } .smallBackdropPosterItem { @@ -209,7 +222,7 @@ } .smallBackdropPosterItem .posterItemImage { - height: 108px; + height: 110.25px; } } @@ -220,7 +233,7 @@ } .portraitPosterItem .posterItemImage { - height: 162px; + height: 168px; } } @@ -231,7 +244,7 @@ } .backdropPosterItem .posterItemImage { - height: 153px; + height: 155.25px; } .portraitPosterItem { @@ -239,7 +252,7 @@ } .portraitPosterItem .posterItemImage { - height: 201px; + height: 207px; } .smallBackdropPosterItem { @@ -247,7 +260,7 @@ } .smallBackdropPosterItem .posterItemImage { - height: 126px; + height: 128.25px; } .storeReviewCount { @@ -262,20 +275,7 @@ } .squarePosterItem .posterItemImage { - height: 170px; - } - - .portraitPosterItem { - width: 138px; - } - - .portraitPosterItem .posterItemImage { - height: 201px; - } - - - .portraitPosterItem .itemProgressText { - display: inline; + height: 174px; } .backdropPosterItem { @@ -283,7 +283,7 @@ } .backdropPosterItem .posterItemImage { - height: 162px; + height: 164.25px; } } @@ -294,7 +294,7 @@ } .squarePosterItem .posterItemImage { - height: 200px; + height: 204px; } .portraitPosterItem { @@ -302,6 +302,6 @@ } .portraitPosterItem .posterItemImage { - height: 240px; + height: 246px; } } diff --git a/dashboard-ui/itembynamedetails.html b/dashboard-ui/itembynamedetails.html index 9d073a609a..aeb62aa490 100644 --- a/dashboard-ui/itembynamedetails.html +++ b/dashboard-ui/itembynamedetails.html @@ -131,6 +131,10 @@

+

+

+ + @@ -150,24 +154,7 @@
-
- -
- -
-
- +
diff --git a/dashboard-ui/livetvrecordinglist.html b/dashboard-ui/livetvrecordinglist.html new file mode 100644 index 0000000000..640cec8f3d --- /dev/null +++ b/dashboard-ui/livetvrecordinglist.html @@ -0,0 +1,26 @@ + + + + Media Browser + + +
+ +
+
+
+
+
+
+
+
+
+
+ + diff --git a/dashboard-ui/livetvrecordings.html b/dashboard-ui/livetvrecordings.html index 8e05b98993..47b801c6d4 100644 --- a/dashboard-ui/livetvrecordings.html +++ b/dashboard-ui/livetvrecordings.html @@ -16,13 +16,18 @@ diff --git a/dashboard-ui/livetvseriestimer.html b/dashboard-ui/livetvseriestimer.html index 5aa46e61a6..05f188b574 100644 --- a/dashboard-ui/livetvseriestimer.html +++ b/dashboard-ui/livetvseriestimer.html @@ -62,7 +62,7 @@ -
+

Pre/Post Padding


diff --git a/dashboard-ui/livetvtimer.html b/dashboard-ui/livetvtimer.html index 4a95d9964c..cfb65a905d 100644 --- a/dashboard-ui/livetvtimer.html +++ b/dashboard-ui/livetvtimer.html @@ -30,7 +30,7 @@
-
+

Pre/Post Padding


@@ -62,7 +62,7 @@
  • -
-
+
diff --git a/dashboard-ui/scripts/boxsets.js b/dashboard-ui/scripts/boxsets.js index 3c6920993a..58dfbf9438 100644 --- a/dashboard-ui/scripts/boxsets.js +++ b/dashboard-ui/scripts/boxsets.js @@ -41,14 +41,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/directorybrowser.js b/dashboard-ui/scripts/directorybrowser.js index 61cbb3c1bf..93c3027f0e 100644 --- a/dashboard-ui/scripts/directorybrowser.js +++ b/dashboard-ui/scripts/directorybrowser.js @@ -12,16 +12,28 @@ var promise; + var parentPathPromise = null; + if (path === "Network") { promise = ApiClient.getNetworkDevices(); } else if (path) { promise = ApiClient.getDirectoryContents(path, fileOptions); + parentPathPromise = ApiClient.getParentPath(path); } else { promise = ApiClient.getDrives(); } - promise.done(function (folders) { + if (!parentPathPromise) { + parentPathPromise = $.Deferred(); + parentPathPromise.resolveWith(null, []); + parentPathPromise = parentPathPromise.promise(); + } + + $.when(promise, parentPathPromise).done(function (response1, response2) { + + var folders = response1[0]; + var parentPath = response2 && response2.length ? response2[0] || '' : ''; $('#txtDirectoryPickerPath', page).val(path || ""); @@ -29,23 +41,6 @@ if (path) { - var parentPath = path; - - if (parentPath.endsWith('\\')) { - parentPath = parentPath.substring(0, parentPath.length - 1); - } - - var lastIndex = parentPath.lastIndexOf('\\'); - parentPath = lastIndex == -1 ? "" : parentPath.substring(0, lastIndex); - - if (parentPath.endsWith(':')) { - parentPath += "\\"; - } - - if (parentPath == '\\') { - parentPath = "Network"; - } - html += '
  • ..
  • '; } @@ -55,7 +50,7 @@ var cssClass = folder.Type == "File" ? "lnkPath lnkFile" : "lnkPath lnkDirectory"; - html += '
  • ' + folder.Name + '
  • '; + html += '
  • ' + folder.Name + '
  • '; } if (!path) { diff --git a/dashboard-ui/scripts/episodes.js b/dashboard-ui/scripts/episodes.js index 48802dbf59..6c56e8a44f 100644 --- a/dashboard-ui/scripts/episodes.js +++ b/dashboard-ui/scripts/episodes.js @@ -38,7 +38,6 @@ useAverageAspectRatio: true, shape: "backdrop", showTitle: true, - showProgressBar: true, showParentTitle: true, overlayText: true }); @@ -49,15 +48,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/gamegenrepage.js b/dashboard-ui/scripts/gamegenrepage.js index d29f35847a..a8706e2643 100644 --- a/dashboard-ui/scripts/gamegenrepage.js +++ b/dashboard-ui/scripts/gamegenrepage.js @@ -37,14 +37,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/gamespage.js b/dashboard-ui/scripts/gamespage.js index 022c16937c..8678d16274 100644 --- a/dashboard-ui/scripts/gamespage.js +++ b/dashboard-ui/scripts/gamespage.js @@ -63,14 +63,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/gamestudiospage.js b/dashboard-ui/scripts/gamestudiospage.js index 2b5ee7dd4f..76bbd1b71d 100644 --- a/dashboard-ui/scripts/gamestudiospage.js +++ b/dashboard-ui/scripts/gamestudiospage.js @@ -38,14 +38,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/gamesystemspage.js b/dashboard-ui/scripts/gamesystemspage.js index 78210f571b..d3f9049dfa 100644 --- a/dashboard-ui/scripts/gamesystemspage.js +++ b/dashboard-ui/scripts/gamesystemspage.js @@ -40,14 +40,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js index c2f03b9814..7419963063 100644 --- a/dashboard-ui/scripts/itembynamedetailpage.js +++ b/dashboard-ui/scripts/itembynamedetailpage.js @@ -357,15 +357,6 @@ } else { $('#itemBirthLocation', page).hide(); } - - var elem = $('.detailSectionContent', page)[0]; - var text = elem.textContent || elem.innerText; - - if (!text.trim()) { - $('#detailSection', page).hide(); - } else { - $('#detailSection', page).show(); - } } function renderUserDataIcons(page, item) { @@ -404,7 +395,7 @@ SortOrder: "Ascending", IncludeItemTypes: "", Recursive: true, - Fields: "DateCreated,AudioInfo,SeriesInfo,ParentId", + Fields: "DateCreated,AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio", Limit: LibraryBrowser.getDefaultPageSize(), StartIndex: 0 }; @@ -432,8 +423,53 @@ showArtist: true }); + } + else if (query.IncludeItemTypes == "Movie" || query.IncludeItemTypes == "Trailer") { - } else { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'movies', + useAverageAspectRatio: true, + showTitle: true + }); + + } + else if (query.IncludeItemTypes == "Episode") { + + html += LibraryBrowser.getPosterViewHtml({ + items: result.Items, + useAverageAspectRatio: true, + shape: "backdrop", + showTitle: true, + showParentTitle: true, + overlayText: true + }); + + } + else if (query.IncludeItemTypes == "Series") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'tv' + }); + + } + else if (query.IncludeItemTypes == "MusicAlbum") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + useAverageAspectRatio: true, + showTitle: true, + showParentTitle: true + }); + + } + else { html += LibraryBrowser.getPosterDetailViewHtml({ items: result.Items, diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index 7d1218c85d..2040816f41 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -49,14 +49,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 7213c209e2..c432de335c 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -232,7 +232,7 @@ else if (item.Type == "Genre" || item.Type == "Studio" || item.Type == "Person" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.Type == "GameGenre") { var itemCountHtml = LibraryBrowser.getItemCountsHtml(options, item); - + if (itemCountHtml) { html += '

    ' + itemCountHtml + '

    '; } @@ -379,7 +379,7 @@ var cssClass = "detailTable"; - html += '
    + -
    '; + html += '
    '; html += ''; @@ -399,7 +399,9 @@ html += LibraryBrowser.getSongHeaderCellHtml('Plays', 'desktopColumn', options.enableColumnSorting, 'PlayCount,AlbumArtist,Album,SortName', options.sortBy, options.sortOrder); html += LibraryBrowser.getSongHeaderCellHtml('', 'desktopColumn userDataCell', options.enableColumnSorting); - html += ''; + html += ''; + + html += ''; for (var i = 0, length = items.length; i < length; i++) { @@ -461,6 +463,7 @@ html += ''; } + html += ''; html += '
    '; return html; @@ -876,7 +879,14 @@ style += "background-color:" + background + ";"; } - html += '
    '; + var imageCssClass = 'posterItemImage'; + if (options.coverImage) { + imageCssClass += " coveredPosterItemImage"; + } + + var progressHtml = LibraryBrowser.getItemProgressBarHtml(item); + + html += '
    '; if (item.LocationType == "Offline" || item.LocationType == "Virtual") { if (options.showLocationTypeIndicator !== false) { @@ -885,6 +895,17 @@ } else if (options.showUnplayedIndicator !== false) { html += LibraryBrowser.getPlayedIndicatorHtml(item); } + + if (!options.overlayText) { + + if (progressHtml) { + html += '
    '; + html += "
    "; + html += progressHtml; + html += "
    "; + html += "
    "; + } + } html += '
    '; var name = LibraryBrowser.getPosterViewDisplayName(item, options.displayAsSpecial); @@ -916,11 +937,11 @@ html += name; html += "
    "; } - + if (options.showItemCounts) { var itemCountHtml = LibraryBrowser.getItemCountsHtml(options, item); - + if (itemCountHtml) { html += "
    "; html += itemCountHtml; @@ -944,11 +965,9 @@ } - if (options.showProgressBar) { + if (options.overlayText) { - var progressHtml = LibraryBrowser.getItemProgressBarHtml(item); - - if (progressHtml || !options.overlayText) { + if (progressHtml) { html += "
    "; html += progressHtml || " "; html += "
    "; @@ -1359,11 +1378,6 @@ var sortBy = checkedSortOption.siblings('label[for=' + id + ']').text(); html += 'Sorted by ' + sortBy.trim().toLowerCase() + ', ' + (query.SortOrder || 'ascending').toLowerCase(); - - if (!checkedSortOption.hasClass('defaultSort')) { - //html += ''; - } - } return html; @@ -1482,37 +1496,19 @@ getItemProgressBarHtml: function (item) { - var html = ''; + if (item.UserData && item.UserData.PlaybackPositionTicks && item.RunTimeTicks) { - var tooltip; - var pct; + var tooltip = Dashboard.getDisplayTime(item.UserData.PlaybackPositionTicks) + " / " + Dashboard.getDisplayTime(item.RunTimeTicks); - if (item.PlayedPercentage) { + var pct = (item.UserData.PlaybackPositionTicks / item.RunTimeTicks) * 100; - tooltip = item.PlayedPercentage.toFixed(1).toString().replace(".0", '') + '% '; + if (pct && pct < 100) { - if (item.Type == "Series" || item.Type == "Season" || item.Type == "BoxSet") { - tooltip += "watched"; - } else { - tooltip += "played"; + return ''; } - - pct = item.PlayedPercentage; - } - else if (item.UserData && item.UserData.PlaybackPositionTicks && item.RunTimeTicks) { - - tooltip = Dashboard.getDisplayTime(item.UserData.PlaybackPositionTicks) + " / " + Dashboard.getDisplayTime(item.RunTimeTicks); - - pct = (item.UserData.PlaybackPositionTicks / item.RunTimeTicks) * 100; } - if (pct && pct < 100) { - - html += ''; - html += ''; - } - - return html; + return null; }, getUserDataIconsHtml: function (item) { @@ -1993,7 +1989,7 @@ } var progressHtml = LibraryBrowser.getItemProgressBarHtml(item); - + if (progressHtml) { html += '
    '; html += progressHtml; diff --git a/dashboard-ui/scripts/livetvchannels.js b/dashboard-ui/scripts/livetvchannels.js index cf985a4e3a..49426fc857 100644 --- a/dashboard-ui/scripts/livetvchannels.js +++ b/dashboard-ui/scripts/livetvchannels.js @@ -60,15 +60,6 @@ function renderChannels(page, channels) { - //var pagingHtml = LibraryBrowser.getPagingHtml({ - - // StartIndex: 0, - // Limit: channels.length - - //}, channels.length, true); - - //$('.listTopPaging', page).html(pagingHtml).trigger('create'); - $('#items', page).html(getChannelsHtml(channels)).trigger('create'); } diff --git a/dashboard-ui/scripts/livetvrecordinglist.js b/dashboard-ui/scripts/livetvrecordinglist.js new file mode 100644 index 0000000000..bbbfb677ba --- /dev/null +++ b/dashboard-ui/scripts/livetvrecordinglist.js @@ -0,0 +1,102 @@ +(function ($, document) { + + // The base query options + var query = { + + UserId: Dashboard.getCurrentUserId(), + StartIndex: 0 + }; + + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + ApiClient.getLiveTvRecordings(query).done(function (result) { + + // Scroll back up so they can see the results from the beginning + $(document).scrollTop(0); + + var html = ''; + + $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); + + updateFilterControls(); + + html += LibraryBrowser.getPosterViewHtml({ + + items: result.Items, + shape: "square", + showTitle: true, + showParentTitle: true, + overlayText: true, + coverImage: true + + }); + + html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); + + $('#items', page).html(html).trigger('create'); + + $('.selectPage', page).on('change', function () { + query.StartIndex = (parseInt(this.value) - 1) * query.Limit; + reloadItems(page); + }); + + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); + }); + + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); + + $('.selectPageSize', page).on('change', function () { + query.Limit = parseInt(this.value); + query.StartIndex = 0; + reloadItems(page); + }); + + if (getParameterByName('savequery') != 'false') { + LibraryBrowser.saveQueryValues('episodes', query); + } + + Dashboard.hideLoadingMsg(); + }); + } + + function updateFilterControls(page) { + + } + + $(document).on('pageinit', "#liveTvRecordingListPage", function () { + + var page = this; + + + }).on('pagebeforeshow', "#liveTvRecordingListPage", function () { + + var limit = LibraryBrowser.getDefaultPageSize(); + + // If the default page size has changed, the start index will have to be reset + if (limit != query.Limit) { + query.Limit = limit; + query.StartIndex = 0; + } + + LibraryBrowser.loadSavedQueryValues('episodes', query); + + var groupId = getParameterByName('groupid'); + if (groupId) { + query.GroupId = groupId; + } + + reloadItems(this); + + }).on('pageshow', "#liveTvRecordingListPage", function () { + + updateFilterControls(this); + }); + +})(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js index 1ea67ff7c3..a37be9919c 100644 --- a/dashboard-ui/scripts/livetvrecordings.js +++ b/dashboard-ui/scripts/livetvrecordings.js @@ -1,52 +1,18 @@ (function ($, document, apiClient) { - function deleteRecording(page, id) { - - Dashboard.confirm("Are you sure you wish to delete this recording?", "Confirm Recording Deletion", function (result) { - - if (result) { - - Dashboard.showLoadingMsg(); - - ApiClient.deleteLiveTvRecording(id).done(function () { - - Dashboard.alert('Recording deleted'); - - reload(page); - }); - } - - }); - } - - function loadRecordings(page, elem, groupId) { - - var contentElem = $('.recordingList', elem).html('
    '); - - apiClient.getLiveTvRecordings({ - - userId: Dashboard.getCurrentUserId(), - groupId: groupId - - }).done(function (result) { - - renderRecordings(page, contentElem, result.Items); - - }); - } - function getRecordingGroupHtml(group) { var html = ''; - html += ''; + html += ''; return html; } @@ -61,100 +27,36 @@ var html = ''; + html += '
      '; + for (var i = 0, length = groups.length; i < length; i++) { html += getRecordingGroupHtml(groups[i]); } - var elem = $('#recordingGroupItems', page).html(html).trigger('create'); - - $('.recordingGroupCollapsible', elem).on('collapsibleexpand.lazyload', function () { - - $(this).off('collapsibleexpand.lazyload'); - - var groupId = this.getAttribute('data-recordinggroupid'); - - loadRecordings(page, this, groupId); - }); - - Dashboard.hideLoadingMsg(); - } - - function renderRecordings(page, elem, recordings) { - - var html = ''; - - html += ''; - elem.html(html).trigger('create'); - - $('.btnDeleteRecording', elem).on('click', function () { - - var recordingId = this.getAttribute('data-recordingid'); - - deleteRecording(page, recordingId); - }); + $('#recordingGroupItems', page).html(html).trigger('create'); Dashboard.hideLoadingMsg(); } - - function renderLatestRecordings(page, recordings) { - + + function renderRecordings(elem, recordings) { + if (recordings.length) { - $('#latestRecordings', page).show(); + elem.show(); } else { - $('#latestRecordings', page).hide(); + elem.hide(); } - $('#latestRecordingItems', page).html(LibraryBrowser.getPosterViewHtml({ + $('.recordingItems', elem).html(LibraryBrowser.getPosterViewHtml({ + items: recordings, - useAverageAspectRatio: true, - shape: "smallBackdrop", + shape: "square", showTitle: true, showParentTitle: true, - overlayText: true + overlayText: true, + coverImage: true })); } @@ -163,6 +65,29 @@ Dashboard.showLoadingMsg(); + apiClient.getLiveTvRecordings({ + + userId: Dashboard.getCurrentUserId(), + isRecording: true + + }).done(function (result) { + + renderRecordings($('#activeRecordings', page), result.Items); + + }); + + apiClient.getLiveTvRecordings({ + + userId: Dashboard.getCurrentUserId(), + limit: 15, + isRecording: false + + }).done(function (result) { + + renderRecordings($('#latestRecordings', page), result.Items); + + }); + apiClient.getLiveTvRecordingGroups({ userId: Dashboard.getCurrentUserId() @@ -172,17 +97,6 @@ renderRecordingGroups(page, result.Items); }); - - apiClient.getLiveTvRecordings({ - - userId: Dashboard.getCurrentUserId(), - limit: 8 - - }).done(function (result) { - - renderLatestRecordings(page, result.Items); - - }); } $(document).on('pagebeforeshow', "#liveTvRecordingsPage", function () { diff --git a/dashboard-ui/scripts/livetvtimers.js b/dashboard-ui/scripts/livetvtimers.js index 16e544132e..decd367462 100644 --- a/dashboard-ui/scripts/livetvtimers.js +++ b/dashboard-ui/scripts/livetvtimers.js @@ -25,8 +25,9 @@ var cssClass = "detailTable"; - html += '
      '; + html += '
      '; + html += ''; html += ''; html += ''; @@ -39,6 +40,9 @@ html += ''; html += ''; + html += ''; + + html += ''; for (var i = 0, length = timers.length; i < length; i++) { @@ -47,7 +51,7 @@ html += ''; html += ''; html += ''; } + html += ''; html += '
       Series
      '; - html += ''; + html += ''; html += ''; @@ -109,6 +113,7 @@ html += '
      '; var elem = $('#items', page).html(html).trigger('create'); diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index 6fbd83307e..268c460eac 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -473,6 +473,9 @@ return i.Type == "Video"; })[0]; + var h264Codec = 'h264'; + var h264AudioCodec = 'aac'; + if (videoStream && videoStream.Width) { if (videoStream.Width >= 1280) { @@ -482,14 +485,15 @@ else if (videoStream.Width >= 720) { baseParams.videoBitrate = 700000; } + + if ((videoStream.Codec || '').toLowerCase().indexOf('h264') != -1) { + + } } // Webm must be ahead of mp4 due to the issue of mp4 playing too fast in chrome var prioritizeWebmOverH264 = $.browser.chrome || $.browser.msie; - var h264Codec = 'h264'; - var h264AudioCodec = 'aac'; - if (startPosition) { baseParams.StartTimeTicks = startPosition; } diff --git a/dashboard-ui/scripts/moviegenres.js b/dashboard-ui/scripts/moviegenres.js index 8fb68a30f5..727daff407 100644 --- a/dashboard-ui/scripts/moviegenres.js +++ b/dashboard-ui/scripts/moviegenres.js @@ -42,14 +42,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/moviepeople.js b/dashboard-ui/scripts/moviepeople.js index 3e6ecc123b..782b81cf4e 100644 --- a/dashboard-ui/scripts/moviepeople.js +++ b/dashboard-ui/scripts/moviepeople.js @@ -39,14 +39,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/movies.js b/dashboard-ui/scripts/movies.js index d9ab552ee4..2026f31e4e 100644 --- a/dashboard-ui/scripts/movies.js +++ b/dashboard-ui/scripts/movies.js @@ -64,14 +64,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js index 29190628bd..956bea728a 100644 --- a/dashboard-ui/scripts/moviesrecommended.js +++ b/dashboard-ui/scripts/moviesrecommended.js @@ -46,7 +46,6 @@ $('#resumableItems', page).html(LibraryBrowser.getPosterViewHtml({ items: result.Items, - showProgressBar: true, preferBackdrop: true, shape: 'backdrop', overlayText: true, diff --git a/dashboard-ui/scripts/moviestudios.js b/dashboard-ui/scripts/moviestudios.js index d0a2448567..3605f6f72b 100644 --- a/dashboard-ui/scripts/moviestudios.js +++ b/dashboard-ui/scripts/moviestudios.js @@ -42,14 +42,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/movietrailers.js b/dashboard-ui/scripts/movietrailers.js index f13d463fa9..d911b81fe4 100644 --- a/dashboard-ui/scripts/movietrailers.js +++ b/dashboard-ui/scripts/movietrailers.js @@ -45,14 +45,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/musicalbumartists.js b/dashboard-ui/scripts/musicalbumartists.js index dee960b461..5071f7d7c6 100644 --- a/dashboard-ui/scripts/musicalbumartists.js +++ b/dashboard-ui/scripts/musicalbumartists.js @@ -40,14 +40,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/musicalbums.js b/dashboard-ui/scripts/musicalbums.js index 2c2f909460..c31210361a 100644 --- a/dashboard-ui/scripts/musicalbums.js +++ b/dashboard-ui/scripts/musicalbums.js @@ -56,14 +56,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/musicartists.js b/dashboard-ui/scripts/musicartists.js index 575369e499..34eace7370 100644 --- a/dashboard-ui/scripts/musicartists.js +++ b/dashboard-ui/scripts/musicartists.js @@ -39,14 +39,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/musicgenres.js b/dashboard-ui/scripts/musicgenres.js index 9b28d50d1f..dbc2510e8f 100644 --- a/dashboard-ui/scripts/musicgenres.js +++ b/dashboard-ui/scripts/musicgenres.js @@ -38,14 +38,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/musicvideos.js b/dashboard-ui/scripts/musicvideos.js index 2e0907cd74..762a386c7e 100644 --- a/dashboard-ui/scripts/musicvideos.js +++ b/dashboard-ui/scripts/musicvideos.js @@ -62,14 +62,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/playlist.js b/dashboard-ui/scripts/playlist.js index 1a73801080..b45449bd5d 100644 --- a/dashboard-ui/scripts/playlist.js +++ b/dashboard-ui/scripts/playlist.js @@ -6,13 +6,15 @@ html += ''; - html += ''; + html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; - html += ''; + html += ''; + + html += ''; $.each(MediaPlayer.playlist, function (i, item) { @@ -30,6 +32,7 @@ html += ''; }); + html += ''; html += '
      NameAlbumTimeRating
      '; $("#playlist", page).html(html).trigger('create'); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index dcfa26b10d..6623ce6481 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -124,7 +124,7 @@ var Dashboard = { setTimeout(function () { $.mobile.loading('hide'); - }, 2000); + }, 3000); }, alert: function (options) { @@ -141,7 +141,7 @@ var Dashboard = { setTimeout(function () { $.mobile.loading('hide'); - }, 4000); + }, 3000); return; } diff --git a/dashboard-ui/scripts/songs.js b/dashboard-ui/scripts/songs.js index c3988e78e4..035b4a58ab 100644 --- a/dashboard-ui/scripts/songs.js +++ b/dashboard-ui/scripts/songs.js @@ -62,14 +62,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/tvgenres.js b/dashboard-ui/scripts/tvgenres.js index 275304b896..b5314e865c 100644 --- a/dashboard-ui/scripts/tvgenres.js +++ b/dashboard-ui/scripts/tvgenres.js @@ -45,14 +45,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/tvpeople.js b/dashboard-ui/scripts/tvpeople.js index 90f65147ae..783de30f64 100644 --- a/dashboard-ui/scripts/tvpeople.js +++ b/dashboard-ui/scripts/tvpeople.js @@ -39,14 +39,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 46ff4feff0..fea22dc44f 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -55,7 +55,6 @@ shape: "backdrop", showTitle: true, showParentTitle: true, - showProgressBar: true, overlayText: true })); diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index 20f510e8af..ea877652e1 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -67,14 +67,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/dashboard-ui/scripts/tvstudios.js b/dashboard-ui/scripts/tvstudios.js index 46bdeeddbf..cddafc09a9 100644 --- a/dashboard-ui/scripts/tvstudios.js +++ b/dashboard-ui/scripts/tvstudios.js @@ -45,14 +45,6 @@ $('#items', page).html(html).trigger('create'); - $('.btnChangeToDefaultSort', page).on('click', function () { - query.StartIndex = 0; - query.SortOrder = 'Ascending'; - query.SortBy = $('.defaultSort', page).data('sortby'); - - reloadItems(page); - }); - $('.selectPage', page).on('change', function () { query.StartIndex = (parseInt(this.value) - 1) * query.Limit; reloadItems(page); diff --git a/packages.config b/packages.config index 4cc0c4d551..7c295df9db 100644 --- a/packages.config +++ b/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file