diff --git a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js index a2c62e9bb7..6f3c136e88 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js @@ -184,6 +184,10 @@ define(['browser'], function (browser) { case 'ts': supported = testCanPlayTs(); videoCodecs.push('h264'); + if (canPlayH265()) { + videoCodecs.push('h265'); + videoCodecs.push('hevc'); + } profileContainer = 'ts,mpegts'; break; default: @@ -300,7 +304,7 @@ define(['browser'], function (browser) { //videoAudioCodecs.push('truehd'); } - videoAudioCodecs = videoAudioCodecs.filter(function(c) { + videoAudioCodecs = videoAudioCodecs.filter(function (c) { return (options.disableVideoAudioCodecs || []).indexOf(c) === -1; }); diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index 607c80446e..263b465921 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -85,7 +85,7 @@ } .homePageSection { - margin-top: 30px; + margin-top: 3em; } .sectionHeaderButton { @@ -132,12 +132,12 @@ } .homePageSection h1 { - padding-left: 2vw; + padding-left: 3.1vw; } .homePageSection .itemsContainer { - padding-left: 1vw; - padding-right: 1vw; + padding-left: 2.5vw; + padding-right: 2.5vw; } @media all and (min-width: 1200px) { diff --git a/dashboard-ui/devices/ios/ios.css b/dashboard-ui/devices/ios/ios.css index dae08b8fd1..23011f5efe 100644 --- a/dashboard-ui/devices/ios/ios.css +++ b/dashboard-ui/devices/ios/ios.css @@ -70,7 +70,7 @@ h1, h1 a { } .cardImageContainer { - border-radius: 7px; + border-radius: 6px; } .noSecondaryNavPage .itemBackdrop { @@ -104,3 +104,8 @@ h1, h1 a { -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px); } + +.cardOverlayButton { + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); +} diff --git a/dashboard-ui/livetv.html b/dashboard-ui/livetv.html index f069756d78..aa385f4ca7 100644 --- a/dashboard-ui/livetv.html +++ b/dashboard-ui/livetv.html @@ -41,39 +41,34 @@
-
-
+

${HeaderUpcomingMovies}

-
-
+

${HeaderUpcomingSports}

-
-
+

${HeaderUpcomingForKids}

-
-
+

${HeaderUpcomingPrograms}

-
diff --git a/dashboard-ui/scripts/mypreferenceshome.js b/dashboard-ui/scripts/mypreferenceshome.js index 5b5febecad..87cfa914a9 100644 --- a/dashboard-ui/scripts/mypreferenceshome.js +++ b/dashboard-ui/scripts/mypreferenceshome.js @@ -110,17 +110,14 @@ page.querySelector('#selectHomeSection3').value = displayPreferences.CustomPrefs.home2 || ''; page.querySelector('#selectHomeSection4').value = displayPreferences.CustomPrefs.home3 || ''; - var promise1 = ApiClient.getItems(user.Id, { - sortBy: "SortName" - }); - var promise2 = ApiClient.getUserViews({}, user.Id); - var promise3 = ApiClient.getJSON(ApiClient.getUrl("Users/" + user.Id + "/GroupingOptions")); + var promise1 = ApiClient.getUserViews({}, user.Id); + var promise2 = ApiClient.getJSON(ApiClient.getUrl("Users/" + user.Id + "/GroupingOptions")); - Promise.all([promise1, promise2, promise3]).then(function (responses) { + Promise.all([promise1, promise2]).then(function (responses) { - renderViews(page, user, responses[2]); + renderViews(page, user, responses[1]); renderLatestItems(page, user, responses[0]); - renderViewOrder(page, user, responses[1]); + renderViewOrder(page, user, responses[0]); Dashboard.hideLoadingMsg(); }); diff --git a/dashboard-ui/scripts/sections.js b/dashboard-ui/scripts/sections.js index c1733413f7..935cc1a05d 100644 --- a/dashboard-ui/scripts/sections.js +++ b/dashboard-ui/scripts/sections.js @@ -252,23 +252,7 @@ return html; } - function loadRecentlyAdded(elem, user) { - - var moviesFrag = document.createElement('div'); - var episodesFrag = document.createElement('div'); - - elem.classList.remove('homePageSection'); - moviesFrag.classList.add('homePageSection'); - episodesFrag.classList.add('homePageSection'); - - elem.appendChild(moviesFrag); - elem.appendChild(episodesFrag); - - loadLatestMovies(moviesFrag, user); - loadLatestEpisodes(episodesFrag, user); - } - - function loadLatestMovies(elem, user) { + function renderLatestSection(elem, user, parent) { var options = { @@ -276,7 +260,7 @@ Fields: "PrimaryImageAspectRatio,BasicSyncInfo", ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Thumb", - IncludeItemTypes: "Movie" + ParentId: parent.Id }; return ApiClient.getJSON(ApiClient.getUrl('Users/' + user.Id + '/Items/Latest', options)).then(function (items) { @@ -286,21 +270,28 @@ var scrollX = enableScrollX(); if (items.length) { - html += '

' + Globalize.translate('HeaderLatestMovies') + '

'; + html += '

' + Globalize.translate('LatestFromLibrary', parent.Name) + '

'; if (scrollX) { html += '
'; } else { html += '
'; } + + var viewType = parent.CollectionType; + + var shape = viewType === 'movies' ? + getPortraitShape() : + getThumbShape(); + html += cardBuilder.getCardsHtml({ items: items, - shape: getPortraitShape(), + shape: shape, + preferThumb: viewType != 'movies', showUnplayedIndicator: false, showChildCountIndicator: true, - lazy: true, context: 'home', centerText: true, - overlayPlayButton: true, + overlayPlayButton: viewType !== 'photos', allowBottomPadding: !enableScrollX() }); html += '
'; @@ -311,47 +302,38 @@ }); } - function loadLatestEpisodes(elem, user) { + function loadRecentlyAdded(elem, user) { - var options = { + elem.classList.remove('homePageSection'); - Limit: 12, - Fields: "PrimaryImageAspectRatio,BasicSyncInfo", - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Thumb", - IncludeItemTypes: "Episode" - }; + return getUserViews(user.Id).then(function (items) { - return ApiClient.getJSON(ApiClient.getUrl('Users/' + user.Id + '/Items/Latest', options)).then(function (items) { + var excludeViewTypes = ['playlists', 'livetv', 'boxsets', 'channels']; + var excludeItemTypes = ['Channel']; - var html = ''; + for (var i = 0, length = items.length; i < length; i++) { - var scrollX = enableScrollX(); + var item = items[i]; - if (items.length) { - html += '

' + Globalize.translate('HeaderLatestEpisodes') + '

'; - if (scrollX) { - html += '
'; - } else { - html += '
'; + if (user.Configuration.LatestItemsExcludes.indexOf(item.Id) !== -1) { + continue; } - html += cardBuilder.getCardsHtml({ - items: items, - preferThumb: true, - shape: getThumbShape(), - showUnplayedIndicator: false, - showChildCountIndicator: true, - lazy: true, - context: 'home', - overlayPlayButton: true, - allowBottomPadding: !enableScrollX() - }); - html += '
'; - } + if (excludeViewTypes.indexOf(item.CollectionType || []) !== -1) { + continue; + } - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); + // not implemented yet + if (excludeItemTypes.indexOf(item.Type) !== -1) { + continue; + } + + var frag = document.createElement('div'); + frag.classList.add('homePageSection'); + elem.appendChild(frag); + + renderLatestSection(frag, user, item); + } }); } diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index a1f2c1a7bb..8cad5d10ee 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1694,14 +1694,9 @@ var AppInfo = {}; if (Dashboard.isRunningInCordova() && browserInfo.android) { - if (MainActivity.getChromeVersion() >= 48) { - //define("audiorenderer", ["scripts/htmlmediarenderer"]); - window.VlcAudio = true; - define("audiorenderer", ["cordova/android/vlcplayer"]); - } else { - window.VlcAudio = true; - define("audiorenderer", ["cordova/android/vlcplayer"]); - } + //define("audiorenderer", ["scripts/htmlmediarenderer"]); + window.VlcAudio = true; + define("audiorenderer", ["cordova/android/vlcplayer"]); define("videorenderer", ["cordova/android/vlcplayer"]); } else if (Dashboard.isRunningInCordova() && browserInfo.safari) { diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index d68423a538..6da561a272 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -103,7 +103,7 @@ preferThumb: true, context: 'tv', lazy: true, - overlayPlayButton: true + overlayMoreButton: true }); } else if (viewStyle == "ThumbCard") { @@ -160,7 +160,7 @@ context: 'tv', centerText: true, lazy: true, - overlayPlayButton: true + overlayMoreButton: true }); } diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index c02ebaf760..f35f5f744a 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2020,5 +2020,6 @@ "LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Emby apps on other devices to access media files directly.", "ButtonPlayExternalPlayer": "Play with external player", "NotScheduledToRecord": "Not scheduled to record", - "SynologyUpdateInstructions": "Please login to DSM and go to Package Center to update." + "SynologyUpdateInstructions": "Please login to DSM and go to Package Center to update.", + "LatestFromLibrary": "Latest {0}" }