From 170b720d0bb9d084817ee9629204ae8cdcc39146 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 6 Oct 2016 14:55:01 -0400 Subject: [PATCH] avoid buffering http responses --- .../cardbuilder/cardbuilder.js | 2 +- dashboard-ui/components/apphost.js | 13 +++++++++++++ dashboard-ui/dashboard.html | 2 +- dashboard-ui/scripts/dashboardpage.js | 6 ++++++ dashboard-ui/scripts/homenextup.js | 10 +++++++--- dashboard-ui/scripts/homeupcoming.js | 10 +++++++--- dashboard-ui/scripts/itemdetailpage.js | 2 +- dashboard-ui/scripts/itemlistpage.js | 1 + dashboard-ui/scripts/livetvsuggested.js | 10 +++++++--- dashboard-ui/scripts/moviecollections.js | 6 ++++-- dashboard-ui/scripts/movies.js | 8 +++++--- dashboard-ui/scripts/musicalbums.js | 3 ++- dashboard-ui/scripts/musicartists.js | 3 ++- dashboard-ui/scripts/musicgenres.js | 6 ++++-- dashboard-ui/scripts/searchpage.js | 10 +++------- dashboard-ui/scripts/sections.js | 19 ++++++++++++++++--- dashboard-ui/scripts/site.js | 1 - dashboard-ui/scripts/tvlatest.js | 2 +- dashboard-ui/scripts/tvrecommended.js | 11 +++++++++-- dashboard-ui/scripts/tvshows.js | 8 +++++--- dashboard-ui/scripts/tvupcoming.js | 8 +++++--- dashboard-ui/strings/en-US.json | 3 ++- 22 files changed, 102 insertions(+), 42 deletions(-) diff --git a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js index 6f66afe8a..94ba80f16 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js +++ b/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/cardbuilder.js @@ -1273,7 +1273,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo if (coveredImage) { imgClass += ' coveredImage-img'; } - cardImageContainerOpen += ''; + cardImageContainerOpen += ''; } else { cardImageContainerOpen = imgUrl ? ('
') : ('
'); diff --git a/dashboard-ui/components/apphost.js b/dashboard-ui/components/apphost.js index 420ef69a0..6e7329f98 100644 --- a/dashboard-ui/components/apphost.js +++ b/dashboard-ui/components/apphost.js @@ -147,6 +147,19 @@ define(['appStorage', 'browser'], function (appStorage, browser) { if (supportsFullscreen()) { features.push('fullscreen'); } + + if (!browser.mobile) { + if (browser.safari) { + + if (browser.versionMajor && browser.versionMajor >= 10) { + features.push('imageanalysis'); + } + + } else { + features.push('imageanalysis'); + } + } + return features; }(); diff --git a/dashboard-ui/dashboard.html b/dashboard-ui/dashboard.html index 84c1abd8f..03d3bf9bf 100644 --- a/dashboard-ui/dashboard.html +++ b/dashboard-ui/dashboard.html @@ -40,7 +40,7 @@

diff --git a/dashboard-ui/scripts/dashboardpage.js b/dashboard-ui/scripts/dashboardpage.js index 901bd9269..b47bdfa41 100644 --- a/dashboard-ui/scripts/dashboardpage.js +++ b/dashboard-ui/scripts/dashboardpage.js @@ -178,6 +178,12 @@ $('#btnManualUpdateContainer', page).show(); } + if (systemInfo.PackageName == 'synology') { + $('#btnManualUpdateContainer').html(Globalize.translate('SynologyUpdateInstructions')); + } else { + $('#btnManualUpdateContainer').html('' + Globalize.translate('PleaseUpdateManually') + ''); + } + DashboardPage.renderPaths(page, systemInfo); DashboardPage.renderHasPendingRestart(page, systemInfo.HasPendingRestart); }); diff --git a/dashboard-ui/scripts/homenextup.js b/dashboard-ui/scripts/homenextup.js index d283f7e34..79a20d530 100644 --- a/dashboard-ui/scripts/homenextup.js +++ b/dashboard-ui/scripts/homenextup.js @@ -1,4 +1,4 @@ -define(['components/categorysyncbuttons', 'cardBuilder', 'emby-itemscontainer'], function (categorysyncbuttons, cardBuilder) { +define(['components/categorysyncbuttons', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (categorysyncbuttons, cardBuilder, appHost) { function getNextUpPromise() { @@ -25,6 +25,8 @@ var html = ''; + var supportsImageAnalysis = appHost.supports('imageanalysis'); + html += cardBuilder.getCardsHtml({ items: result.Items, shape: "backdrop", @@ -35,8 +37,10 @@ preferThumb: true, showDetailsMenu: true, centerText: true, - overlayPlayButton: AppInfo.enableAppLayouts, - context: 'home-nextup' + overlayPlayButton: AppInfo.enableAppLayouts && !supportsImageAnalysis, + context: 'home-nextup', + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis }); var elem = page.querySelector('#nextUpItems'); diff --git a/dashboard-ui/scripts/homeupcoming.js b/dashboard-ui/scripts/homeupcoming.js index 669894c42..5ccd3a8e0 100644 --- a/dashboard-ui/scripts/homeupcoming.js +++ b/dashboard-ui/scripts/homeupcoming.js @@ -1,4 +1,4 @@ -define(['datetime', 'cardBuilder', 'emby-itemscontainer', 'scrollStyles'], function (datetime, cardBuilder) { +define(['datetime', 'cardBuilder', 'apphost', 'emby-itemscontainer', 'scrollStyles'], function (datetime, cardBuilder, appHost) { function getUpcomingPromise() { @@ -108,6 +108,8 @@ html += '
'; } + var supportsImageAnalysis = appHost.supports('imageanalysis'); + html += cardBuilder.getCardsHtml({ items: group.items, showLocationTypeIndicator: false, @@ -118,9 +120,11 @@ showDetailsMenu: true, centerText: true, context: 'home-upcoming', - overlayMoreButton: true, + overlayMoreButton: !supportsImageAnalysis, showParentTitle: true, - allowBottomPadding: allowBottomPadding + allowBottomPadding: allowBottomPadding, + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis }); html += '
'; diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index bd96924a4..eec5bf5ea 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1143,7 +1143,7 @@ overlayText: true, lazy: true, showDetailsMenu: true, - overlayPlayButton: AppInfo.enableAppLayouts + overlayPlayButton: true }); } else if (item.Type == "GameSystem") { diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index f39830105..db312cad4 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -120,6 +120,7 @@ posterOptions.showYear = true; posterOptions.cardLayout = true; posterOptions.centerText = false; + posterOptions.vibrant = true; html = cardBuilder.getCardsHtml(posterOptions); } diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index d9712b35d..27293ede0 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -1,4 +1,4 @@ -define(['libraryBrowser', 'cardBuilder', 'dom', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, cardBuilder, dom) { +define(['libraryBrowser', 'cardBuilder', 'apphost', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, cardBuilder, appHost) { function enableScrollX() { return browserInfo.mobile && AppInfo.enableAppLayouts; @@ -113,6 +113,8 @@ function renderItems(page, items, sectionClass, overlayButton, shape) { + var supportsImageAnalysis = appHost.supports('imageanalysis'); + var html = cardBuilder.getCardsHtml({ items: items, preferThumb: !shape, @@ -124,12 +126,14 @@ coverImage: true, overlayText: false, lazy: true, - overlayMoreButton: overlayButton != 'play', + overlayMoreButton: overlayButton != 'play' && !supportsImageAnalysis, overlayPlayButton: overlayButton == 'play', allowBottomPadding: !enableScrollX(), showAirTime: true, showAirDateTime: true, - showChannelName: true + showChannelName: true, + vibrant: true, + cardLayout: supportsImageAnalysis //cardFooterAside: 'logo' }); diff --git a/dashboard-ui/scripts/moviecollections.js b/dashboard-ui/scripts/moviecollections.js index 901c86551..7ef98822f 100644 --- a/dashboard-ui/scripts/moviecollections.js +++ b/dashboard-ui/scripts/moviecollections.js @@ -113,7 +113,8 @@ lazy: true, cardLayout: true, showTitle: true, - showItemCounts: true + showItemCounts: true, + vibrant: true }); } else if (viewStyle == "Banner") { @@ -143,7 +144,8 @@ showTitle: true, centerText: false, cardLayout: true, - showItemCounts: true + showItemCounts: true, + vibrant: true }); } else { diff --git a/dashboard-ui/scripts/movies.js b/dashboard-ui/scripts/movies.js index 9bce149fb..2ad6bac06 100644 --- a/dashboard-ui/scripts/movies.js +++ b/dashboard-ui/scripts/movies.js @@ -1,4 +1,4 @@ -define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder) { +define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) { return function (view, params, tabContent) { @@ -92,6 +92,8 @@ var html; var viewStyle = self.getCurrentViewStyle(); + var supportsImageAnalysis = appHost.supports('imageanalysis'); + if (viewStyle == "Thumb") { html = cardBuilder.getCardsHtml({ @@ -114,7 +116,7 @@ cardLayout: true, showTitle: true, showYear: true, - vibrant: true + vibrant: supportsImageAnalysis }); } else if (viewStyle == "Banner") { @@ -145,7 +147,7 @@ showYear: true, lazy: true, cardLayout: true, - vibrant: true + vibrant: supportsImageAnalysis }); } else { diff --git a/dashboard-ui/scripts/musicalbums.js b/dashboard-ui/scripts/musicalbums.js index 543fca0a2..bab36f1c9 100644 --- a/dashboard-ui/scripts/musicalbums.js +++ b/dashboard-ui/scripts/musicalbums.js @@ -110,7 +110,8 @@ coverImage: true, showParentTitle: true, lazy: true, - cardLayout: true + cardLayout: true, + vibrant: true }); } else { diff --git a/dashboard-ui/scripts/musicartists.js b/dashboard-ui/scripts/musicartists.js index 7ba0904d0..7f0e0e76e 100644 --- a/dashboard-ui/scripts/musicartists.js +++ b/dashboard-ui/scripts/musicartists.js @@ -111,7 +111,8 @@ coverImage: true, lazy: true, cardLayout: true, - showSongCount: true + showSongCount: true, + vibrant: true }); } else { diff --git a/dashboard-ui/scripts/musicgenres.js b/dashboard-ui/scripts/musicgenres.js index 12b686632..5122bda77 100644 --- a/dashboard-ui/scripts/musicgenres.js +++ b/dashboard-ui/scripts/musicgenres.js @@ -79,7 +79,8 @@ showItemCounts: true, cardLayout: true, showTitle: true, - lazy: true + lazy: true, + vibrant: true }); } else if (viewStyle == "PosterCard") { @@ -90,7 +91,8 @@ showItemCounts: true, lazy: true, cardLayout: true, - showTitle: true + showTitle: true, + vibrant: true }); } else if (viewStyle == "Poster") { diff --git a/dashboard-ui/scripts/searchpage.js b/dashboard-ui/scripts/searchpage.js index 28b563231..b8bb9ab05 100644 --- a/dashboard-ui/scripts/searchpage.js +++ b/dashboard-ui/scripts/searchpage.js @@ -45,9 +45,7 @@ } function showTextSuggestions() { - if (AppInfo.enableAppLayouts) { - textSuggestions.classList.remove('hide'); - } + textSuggestions.classList.remove('hide'); } function getAdditionalTextLines(hint) { @@ -176,10 +174,8 @@ }, 300); } - if (AppInfo.enableAppLayouts) { - showTextSuggestions(); - loadSuggestions(view); - } + showTextSuggestions(); + loadSuggestions(view); view.querySelector('.txtSearch').addEventListener('input', function () { onSearchChange(this.value); diff --git a/dashboard-ui/scripts/sections.js b/dashboard-ui/scripts/sections.js index dbde26b19..1b5776d9c 100644 --- a/dashboard-ui/scripts/sections.js +++ b/dashboard-ui/scripts/sections.js @@ -1,4 +1,4 @@ -define(['libraryBrowser', 'cardBuilder', 'appSettings', 'components/groupedcards', 'dom', 'scrollStyles', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer'], function (libraryBrowser, cardBuilder, appSettings, groupedcards, dom) { +define(['libraryBrowser', 'cardBuilder', 'appSettings', 'components/groupedcards', 'dom', 'apphost', 'scrollStyles', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer'], function (libraryBrowser, cardBuilder, appSettings, groupedcards, dom, appHost) { function getUserViews(userId) { @@ -450,6 +450,7 @@ } else { html += '
'; } + html += cardBuilder.getCardsHtml({ items: items, shape: scrollX ? 'overflowBackdrop' : shape, @@ -555,6 +556,9 @@ } else { html += '
'; } + + var supportsImageAnalysis = appHost.supports('imageanalysis'); + html += cardBuilder.getCardsHtml({ items: result.Items, preferThumb: true, @@ -566,7 +570,10 @@ overlayPlayButton: true, context: 'home', centerText: true, - allowBottomPadding: !enableScrollX() + allowBottomPadding: !enableScrollX(), + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis, + cardFooterAside: 'none' }); html += '
'; } @@ -684,6 +691,9 @@ } else { html += '
'; } + + var supportsImageAnalysis = appHost.supports('imageanalysis'); + html += cardBuilder.getCardsHtml({ items: result.Items, shape: enableScrollX() ? 'autooverflow' : 'auto', @@ -696,7 +706,10 @@ overlayText: false, overlayPlayButton: true, allowBottomPadding: !enableScrollX(), - preferThumb: true + preferThumb: true, + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis, + cardFooterAside: 'none' }); html += '
'; diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 290e9a477..a4c7c8206 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -2800,7 +2800,6 @@ var AppInfo = {}; initRequireWithBrowser(browser); window.browserInfo = browser; - setAppInfo(); setDocumentClasses(browser); diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js index 229e0a716..661e9aee3 100644 --- a/dashboard-ui/scripts/tvlatest.js +++ b/dashboard-ui/scripts/tvlatest.js @@ -61,7 +61,7 @@ centerText: true, lazy: true, showTitle: false, - overlayPlayButton: AppInfo.enableAppLayouts + overlayPlayButton: true }); } diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 8a5b2934d..63d1e7050 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -1,4 +1,4 @@ -define(['libraryBrowser', 'dom', 'components/categorysyncbuttons', 'cardBuilder', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, dom, categorysyncbuttons, cardBuilder) { +define(['libraryBrowser', 'dom', 'components/categorysyncbuttons', 'cardBuilder', 'apphost', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, dom, categorysyncbuttons, cardBuilder, appHost) { return function (view, params) { @@ -34,6 +34,9 @@ } var container = view.querySelector('#nextUpItems'); + + var supportsImageAnalysis = appHost.supports('imageanalysis'); + cardBuilder.buildCards(result.Items, { itemsContainer: container, preferThumb: true, @@ -43,7 +46,10 @@ showParentTitle: true, overlayText: false, centerText: true, - overlayPlayButton: AppInfo.enableAppLayouts + overlayPlayButton: true, + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis, + cardFooterAside: 'none' }); Dashboard.hideLoadingMsg(); @@ -92,6 +98,7 @@ var allowBottomPadding = !enableScrollX(); var container = view.querySelector('#resumableItems'); + cardBuilder.buildCards(result.Items, { itemsContainer: container, preferThumb: true, diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index 483091340..bb676c05f 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -1,4 +1,4 @@ -define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder) { +define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) { return function (view, params, tabContent) { @@ -92,6 +92,8 @@ var html; var viewStyle = self.getCurrentViewStyle(); + var supportsImageAnalysis = appHost.supports('imageanalysis'); + if (viewStyle == "Thumb") { html = cardBuilder.getCardsHtml({ @@ -114,7 +116,7 @@ cardLayout: true, showTitle: true, showSeriesYear: true, - vibrant: true + vibrant: supportsImageAnalysis }); } else if (viewStyle == "Banner") { @@ -145,7 +147,7 @@ showYear: true, lazy: true, cardLayout: true, - vibrant: true + vibrant: supportsImageAnalysis }); } else { diff --git a/dashboard-ui/scripts/tvupcoming.js b/dashboard-ui/scripts/tvupcoming.js index 8e2fcc6bb..02f1829b5 100644 --- a/dashboard-ui/scripts/tvupcoming.js +++ b/dashboard-ui/scripts/tvupcoming.js @@ -1,4 +1,4 @@ -define(['datetime', 'libraryBrowser', 'cardBuilder', 'scrollStyles', 'emby-itemscontainer'], function (datetime, libraryBrowser, cardBuilder) { +define(['datetime', 'libraryBrowser', 'cardBuilder', 'apphost', 'scrollStyles', 'emby-itemscontainer'], function (datetime, libraryBrowser, cardBuilder, appHost) { function getUpcomingPromise(context, params) { @@ -110,6 +110,8 @@ html += '
'; } + var supportsImageAnalysis = appHost.supports('imageanalysis'); + html += cardBuilder.getCardsHtml({ items: group.items, showLocationTypeIndicator: false, @@ -121,8 +123,8 @@ centerText: true, showParentTitle: true, allowBottomPadding: allowBottomPadding, - cardLayout: true, - vibrant: true + cardLayout: supportsImageAnalysis, + vibrant: supportsImageAnalysis }); html += '
'; diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index e6b9f5f51..f27609da2 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2142,5 +2142,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", "WillRecord": "Will record", - "NotScheduledToRecord": "Not scheduled to record" + "NotScheduledToRecord": "Not scheduled to record", + "SynologyUpdateInstructions": "Please login to DSM and go to Package Center to update." }