diff --git a/src/components/homeScreenSettings/homeScreenSettings.template.html b/src/components/homeScreenSettings/homeScreenSettings.template.html index 615598a1a..d3a9206c3 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.template.html +++ b/src/components/homeScreenSettings/homeScreenSettings.template.html @@ -24,6 +24,7 @@ + @@ -37,6 +38,7 @@ + @@ -50,6 +52,7 @@ + @@ -63,6 +66,7 @@ + @@ -76,6 +80,7 @@ + @@ -89,6 +94,7 @@ + @@ -102,6 +108,7 @@ + diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 794422ad1..85b5583f7 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -24,12 +24,14 @@ import ServerConnections from '../ServerConnections'; case 2: return 'resumeaudio'; case 3: - return 'livetv'; + return 'resumebook'; case 4: - return 'nextup'; + return 'livetv'; case 5: - return 'latestmedia'; + return 'nextup'; case 6: + return 'latestmedia'; + case 7: return 'none'; default: return ''; @@ -142,15 +144,17 @@ import ServerConnections from '../ServerConnections'; } else if (section === 'librarybuttons') { loadlibraryButtons(elem, apiClient, user, userSettings, userViews); } else if (section === 'resume') { - loadResumeVideo(elem, apiClient); + return loadResume(elem, apiClient, 'HeaderContinueWatching', 'Video'); } else if (section === 'resumeaudio') { - loadResumeAudio(elem, apiClient); + return loadResume(elem, apiClient, 'HeaderContinueListening', 'Audio'); } else if (section === 'activerecordings') { loadLatestLiveTvRecordings(elem, true, apiClient); } else if (section === 'nextup') { loadNextUp(elem, apiClient); } else if (section === 'onnow' || section === 'livetv') { return loadOnNow(elem, apiClient, user); + } else if (section === 'resumebook') { + return loadResume(elem, apiClient, 'HeaderContinueReading', 'Book'); } else { elem.innerHTML = ''; return Promise.resolve(); @@ -365,7 +369,39 @@ import ServerConnections from '../ServerConnections'; imageLoader.lazyChildren(elem); } - function getContinueWatchingFetchFn(serverId) { + const dataMonitorHints = { + 'Audio': 'audioplayback,markplayed', + 'Video': 'videoplayback,markplayed' + }; + + function loadResume(elem, apiClient, headerText, mediaType) { + let html = ''; + + const dataMonitor = dataMonitorHints[mediaType] || 'markplayed'; + + html += '

' + globalize.translate(headerText) + '

'; + if (enableScrollX()) { + html += '
'; + html += `
`; + } else { + html += `
`; + } + + if (enableScrollX()) { + html += '
'; + } + html += '
'; + + elem.classList.add('hide'); + elem.innerHTML = html; + + const itemsContainer = elem.querySelector('.itemsContainer'); + itemsContainer.fetchData = getItemsToResumeFn(mediaType, apiClient.serverId()); + itemsContainer.getItemsHtml = getItemsToResumeHtml; + itemsContainer.parentContainer = elem; + } + + function getItemsToResumeFn(mediaType, serverId) { return function () { const apiClient = ServerConnections.getApiClient(serverId); const screenWidth = dom.getWindowSize().innerWidth; @@ -385,14 +421,14 @@ import ServerConnections from '../ServerConnections'; ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Thumb', EnableTotalRecordCount: false, - MediaTypes: 'Video' + MediaTypes: mediaType }; return apiClient.getResumableItems(apiClient.getCurrentUserId(), options); }; } - function getContinueWatchingItemsHtml(items) { + function getItemsToResumeHtml(items) { const cardLayout = false; return cardBuilder.getCardsHtml({ items: items, @@ -413,104 +449,6 @@ import ServerConnections from '../ServerConnections'; }); } - function loadResumeVideo(elem, apiClient) { - let html = ''; - - html += '

' + globalize.translate('HeaderContinueWatching') + '

'; - if (enableScrollX()) { - html += '
'; - html += '
'; - } else { - html += '
'; - } - - if (enableScrollX()) { - html += '
'; - } - html += '
'; - - elem.classList.add('hide'); - elem.innerHTML = html; - - const itemsContainer = elem.querySelector('.itemsContainer'); - itemsContainer.fetchData = getContinueWatchingFetchFn(apiClient.serverId()); - itemsContainer.getItemsHtml = getContinueWatchingItemsHtml; - itemsContainer.parentContainer = elem; - } - - function getContinueListeningFetchFn(serverId) { - return function () { - const apiClient = ServerConnections.getApiClient(serverId); - const screenWidth = dom.getWindowSize().innerWidth; - - let limit; - if (enableScrollX()) { - limit = 12; - } else { - limit = screenWidth >= 1920 ? 8 : (screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 9 : 6)); - limit = Math.min(limit, 5); - } - - const options = { - Limit: limit, - Recursive: true, - Fields: 'PrimaryImageAspectRatio,BasicSyncInfo', - ImageTypeLimit: 1, - EnableImageTypes: 'Primary,Backdrop,Thumb', - EnableTotalRecordCount: false, - MediaTypes: 'Audio' - }; - - return apiClient.getResumableItems(apiClient.getCurrentUserId(), options); - }; - } - - function getContinueListeningItemsHtml(items) { - const cardLayout = false; - return cardBuilder.getCardsHtml({ - items: items, - preferThumb: true, - shape: getThumbShape(), - overlayText: false, - showTitle: true, - showParentTitle: true, - lazy: true, - showDetailsMenu: true, - overlayPlayButton: true, - context: 'home', - centerText: !cardLayout, - allowBottomPadding: false, - cardLayout: cardLayout, - showYear: true, - lines: 2 - }); - } - - function loadResumeAudio(elem, apiClient) { - let html = ''; - - html += '

' + globalize.translate('HeaderContinueListening') + '

'; - if (enableScrollX()) { - html += '
'; - html += '
'; - } else { - html += '
'; - } - - if (enableScrollX()) { - html += '
'; - } - html += '
'; - - elem.classList.add('hide'); - elem.innerHTML = html; - - const itemsContainer = elem.querySelector('.itemsContainer'); - itemsContainer.fetchData = getContinueListeningFetchFn(apiClient.serverId()); - itemsContainer.getItemsHtml = getContinueListeningItemsHtml; - itemsContainer.parentContainer = elem; - } - function getOnNowFetchFn(serverId) { return function () { const apiClient = ServerConnections.getApiClient(serverId); diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 69675adb6..a54bab7c3 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -37,6 +37,7 @@ "Folders": "Folders", "Genres": "Genres", "HeaderAlbumArtists": "Album Artists", + "HeaderContinueReading": "Continue Reading", "HeaderContinueWatching": "Continue Watching", "Movies": "Movies", "Photos": "Photos", diff --git a/src/strings/en-us.json b/src/strings/en-us.json index bf6d74a0b..54d4a8ca7 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -321,6 +321,7 @@ "HeaderContainerProfileHelp": "Container profiles indicate the limitations of a device when playing specific formats. If a limitation applies then the media will be transcoded, even if the format is configured for direct play.", "HeaderContinueListening": "Continue Listening", "HeaderContinueWatching": "Continue Watching", + "HeaderContinueReading": "Continue Reading", "HeaderCustomDlnaProfiles": "Custom Profiles", "HeaderDateIssued": "Date Issued", "HeaderDebugging": "Debugging and Tracing",