From 514d4f68780b2af1c082e3c7a5339c73f3c56eb9 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:49:43 +0900 Subject: [PATCH 1/7] fix bottom padding on item details page for desktop view --- src/assets/css/librarybrowser.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 82e704f074..f0230bad0f 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -597,6 +597,7 @@ .detailImageContainer { position: relative; margin-top: -25vh; + margin-bottom: 10vh; float: left; width: 25vw; z-index: 3; @@ -641,7 +642,8 @@ div.itemDetailGalleryLink.defaultCardBackground { } .itemDetailGalleryLink.defaultCardBackground { - height: 23vw; /* Dirty hack to get it to look somewhat square. Less than ideal. */ + /* Dirty hack to get it to look somewhat square. Less than ideal. */ + height: 23vw; } .itemDetailGalleryLink.defaultCardBackground > .material-icons { From eba23f41c6237add9135b36253449206d70eb834 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:52:54 +0900 Subject: [PATCH 2/7] fix title casing for six component files --- package.json | 8 ++++---- .../{packagemanager.js => packageManager.js} | 0 .../{syncplay => syncPlay}/groupSelectionMenu.js | 0 .../playbackPermissionManager.js | 0 .../{syncplay => syncPlay}/syncPlayManager.js | 2 +- .../{syncplay => syncPlay}/timeSyncManager.js | 2 +- .../viewsettings.js => viewSettings/viewSettings.js} | 2 +- .../viewSettings.template.html} | 0 src/scripts/site.js | 12 ++++++------ 9 files changed, 13 insertions(+), 13 deletions(-) rename src/components/{packagemanager.js => packageManager.js} (100%) rename src/components/{syncplay => syncPlay}/groupSelectionMenu.js (100%) rename src/components/{syncplay => syncPlay}/playbackPermissionManager.js (100%) rename src/components/{syncplay => syncPlay}/syncPlayManager.js (99%) rename src/components/{syncplay => syncPlay}/timeSyncManager.js (99%) rename src/components/{viewsettings/viewsettings.js => viewSettings/viewSettings.js} (98%) rename src/components/{viewsettings/viewsettings.template.html => viewSettings/viewSettings.template.html} (100%) diff --git a/package.json b/package.json index 785878d20b..8e833df3d9 100644 --- a/package.json +++ b/package.json @@ -100,10 +100,10 @@ "src/components/playmenu.js", "src/components/sanatizefilename.js", "src/components/scrollManager.js", - "src/components/syncplay/groupSelectionMenu.js", - "src/components/syncplay/playbackPermissionManager.js", - "src/components/syncplay/syncPlayManager.js", - "src/components/syncplay/timeSyncManager.js", + "src/components/syncPlay/groupSelectionMenu.js", + "src/components/syncPlay/playbackPermissionManager.js", + "src/components/syncPlay/syncPlayManager.js", + "src/components/syncPlay/timeSyncManager.js", "src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContent.js", "src/plugins/photoPlayer/plugin.js", diff --git a/src/components/packagemanager.js b/src/components/packageManager.js similarity index 100% rename from src/components/packagemanager.js rename to src/components/packageManager.js diff --git a/src/components/syncplay/groupSelectionMenu.js b/src/components/syncPlay/groupSelectionMenu.js similarity index 100% rename from src/components/syncplay/groupSelectionMenu.js rename to src/components/syncPlay/groupSelectionMenu.js diff --git a/src/components/syncplay/playbackPermissionManager.js b/src/components/syncPlay/playbackPermissionManager.js similarity index 100% rename from src/components/syncplay/playbackPermissionManager.js rename to src/components/syncPlay/playbackPermissionManager.js diff --git a/src/components/syncplay/syncPlayManager.js b/src/components/syncPlay/syncPlayManager.js similarity index 99% rename from src/components/syncplay/syncPlayManager.js rename to src/components/syncPlay/syncPlayManager.js index f04d1aeb8c..6116884d7c 100644 --- a/src/components/syncplay/syncPlayManager.js +++ b/src/components/syncPlay/syncPlayManager.js @@ -1,6 +1,6 @@ /** * Module that manages the SyncPlay feature. - * @module components/syncplay/syncPlayManager + * @module components/syncPlay/syncPlayManager */ import events from 'events'; diff --git a/src/components/syncplay/timeSyncManager.js b/src/components/syncPlay/timeSyncManager.js similarity index 99% rename from src/components/syncplay/timeSyncManager.js rename to src/components/syncPlay/timeSyncManager.js index ca92939576..6c151b3683 100644 --- a/src/components/syncplay/timeSyncManager.js +++ b/src/components/syncPlay/timeSyncManager.js @@ -1,6 +1,6 @@ /** * Module that manages time syncing with server. - * @module components/syncplay/timeSyncManager + * @module components/syncPlay/timeSyncManager */ import events from 'events'; diff --git a/src/components/viewsettings/viewsettings.js b/src/components/viewSettings/viewSettings.js similarity index 98% rename from src/components/viewsettings/viewsettings.js rename to src/components/viewSettings/viewSettings.js index 441c35157b..087ba3e373 100644 --- a/src/components/viewsettings/viewsettings.js +++ b/src/components/viewSettings/viewSettings.js @@ -57,7 +57,7 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne return new Promise(function (resolve, reject) { - require(['text!./viewsettings.template.html'], function (template) { + require(['text!./viewSettings.template.html'], function (template) { var dialogOptions = { removeOnClose: true, diff --git a/src/components/viewsettings/viewsettings.template.html b/src/components/viewSettings/viewSettings.template.html similarity index 100% rename from src/components/viewsettings/viewsettings.template.html rename to src/components/viewSettings/viewSettings.template.html diff --git a/src/scripts/site.js b/src/scripts/site.js index e60efc757d..c8f207961a 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -653,7 +653,7 @@ var AppInfo = {}; playQueueManager: componentsPath + '/playback/playqueuemanager', nowPlayingHelper: componentsPath + '/playback/nowplayinghelper', pluginManager: componentsPath + '/pluginManager', - packageManager: componentsPath + '/packagemanager', + packageManager: componentsPath + '/packageManager', screensaverManager: componentsPath + '/screensavermanager', chromecastHelper: 'plugins/chromecastPlayer/chromecastHelpers' }; @@ -820,10 +820,10 @@ var AppInfo = {}; define('playbackSettings', [componentsPath + '/playbackSettings/playbackSettings'], returnFirstDependency); define('homescreenSettings', [componentsPath + '/homeScreenSettings/homeScreenSettings'], returnFirstDependency); define('playbackManager', [componentsPath + '/playback/playbackmanager'], getPlaybackManager); - define('timeSyncManager', [componentsPath + '/syncplay/timeSyncManager'], returnDefault); - define('groupSelectionMenu', [componentsPath + '/syncplay/groupSelectionMenu'], returnFirstDependency); - define('syncPlayManager', [componentsPath + '/syncplay/syncPlayManager'], returnDefault); - define('playbackPermissionManager', [componentsPath + '/syncplay/playbackPermissionManager'], returnDefault); + define('timeSyncManager', [componentsPath + '/syncPlay/timeSyncManager'], returnDefault); + define('groupSelectionMenu', [componentsPath + '/syncPlay/groupSelectionMenu'], returnFirstDependency); + define('syncPlayManager', [componentsPath + '/syncPlay/syncPlayManager'], returnDefault); + define('playbackPermissionManager', [componentsPath + '/syncPlay/playbackPermissionManager'], returnDefault); define('layoutManager', [componentsPath + '/layoutManager', 'apphost'], getLayoutManager); define('homeSections', [componentsPath + '/homesections/homesections'], returnFirstDependency); define('playMenu', [componentsPath + '/playmenu'], returnFirstDependency); @@ -847,7 +847,7 @@ var AppInfo = {}; define('userdataButtons', [componentsPath + '/userdatabuttons/userdatabuttons'], returnFirstDependency); define('listView', [componentsPath + '/listview/listview'], returnFirstDependency); define('indicators', [componentsPath + '/indicators/indicators'], returnFirstDependency); - define('viewSettings', [componentsPath + '/viewsettings/viewsettings'], returnFirstDependency); + define('viewSettings', [componentsPath + '/viewSettings/viewSettings'], returnFirstDependency); define('filterMenu', [componentsPath + '/filtermenu/filtermenu'], returnFirstDependency); define('sortMenu', [componentsPath + '/sortmenu/sortmenu'], returnFirstDependency); define('sanitizefilename', [componentsPath + '/sanitizeFilename'], returnFirstDependency); From 10aad889568ed4aea6f429dc940620466fbdfb25 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:53:47 +0900 Subject: [PATCH 3/7] fix table of contents class name --- src/plugins/bookPlayer/plugin.js | 5 +++-- .../bookPlayer/{tableOfContent.js => tableOfContents.js} | 5 +++-- src/plugins/photoPlayer/plugin.js | 7 ------- 3 files changed, 6 insertions(+), 11 deletions(-) rename src/plugins/bookPlayer/{tableOfContent.js => tableOfContents.js} (98%) diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index b655b038a8..a9b784f5e8 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -7,7 +7,7 @@ import 'css!./style'; import 'material-icons'; import 'paper-icon-button-light'; -import TableOfContent from './tableOfContent'; +import TableOfContents from './tableOfContents'; export class BookPlayer { constructor() { @@ -163,7 +163,7 @@ export class BookPlayer { openTableOfContents() { if (this._loaded) { - this._tocElement = new TableOfContent(this); + this._tocElement = new TableOfContents(this); } } @@ -271,6 +271,7 @@ export class BookPlayer { if (item.Path && (item.Path.endsWith('epub'))) { return true; } + return false; } } diff --git a/src/plugins/bookPlayer/tableOfContent.js b/src/plugins/bookPlayer/tableOfContents.js similarity index 98% rename from src/plugins/bookPlayer/tableOfContent.js rename to src/plugins/bookPlayer/tableOfContents.js index 6a35966b1b..23e288aff5 100644 --- a/src/plugins/bookPlayer/tableOfContent.js +++ b/src/plugins/bookPlayer/tableOfContents.js @@ -1,6 +1,6 @@ import dialogHelper from 'dialogHelper'; -export default class TableOfContent { +export default class TableOfContents { constructor(bookPlayer) { this._bookPlayer = bookPlayer; this._rendition = bookPlayer._rendition; @@ -59,6 +59,7 @@ export default class TableOfContent { autoFocus: false, removeOnClose: true }); + elem.id = 'dialogToc'; let tocHtml = '
'; @@ -72,6 +73,7 @@ export default class TableOfContent { tocHtml += `${chapter.label}`; tocHtml += ''; }); + tocHtml += ''; elem.innerHTML = tocHtml; @@ -84,7 +86,6 @@ export default class TableOfContent { this._elem = elem; this.bindEvents(); - dialogHelper.open(elem); } } diff --git a/src/plugins/photoPlayer/plugin.js b/src/plugins/photoPlayer/plugin.js index d8d4ee70ef..d8e55fa67e 100644 --- a/src/plugins/photoPlayer/plugin.js +++ b/src/plugins/photoPlayer/plugin.js @@ -9,17 +9,12 @@ export default class PhotoPlayer { } play(options) { - return new Promise(function (resolve, reject) { - import('slideshow').then(({default: slideshow}) => { - var index = options.startIndex || 0; var apiClient = connectionManager.currentApiClient(); - apiClient.getCurrentUser().then(function(result) { - var newSlideShow = new slideshow({ showTitle: false, cover: false, @@ -31,7 +26,6 @@ export default class PhotoPlayer { }); newSlideShow.show(); - resolve(); }); }); @@ -39,7 +33,6 @@ export default class PhotoPlayer { } canPlayMediaType(mediaType) { - return (mediaType || '').toLowerCase() === 'photo'; } } From 11528d1a939c5087a76e27444c5e4183bd7776e4 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:54:24 +0900 Subject: [PATCH 4/7] migrate legacy dashboard functions to main object --- src/legacy/dashboard.js | 24 ------------------------ src/scripts/site.js | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 25 deletions(-) delete mode 100644 src/legacy/dashboard.js diff --git a/src/legacy/dashboard.js b/src/legacy/dashboard.js deleted file mode 100644 index 08c5e8330b..0000000000 --- a/src/legacy/dashboard.js +++ /dev/null @@ -1,24 +0,0 @@ -Dashboard.confirm = function(message, title, callback) { - 'use strict'; - require(['confirm'], function(confirm) { - confirm(message, title).then(function() { - callback(!0); - }).catch(function() { - callback(!1); - }); - }); -}; - -Dashboard.showLoadingMsg = function() { - 'use strict'; - require(['loading'], function(loading) { - loading.show(); - }); -}; - -Dashboard.hideLoadingMsg = function() { - 'use strict'; - require(['loading'], function(loading) { - loading.hide(); - }); -}; diff --git a/src/scripts/site.js b/src/scripts/site.js index c8f207961a..65ecfd1b09 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -228,6 +228,28 @@ var Dashboard = { } else { Dashboard.navigate('selectserver.html'); } + }, + hideLoadingMsg: function() { + 'use strict'; + require(['loading'], function(loading) { + loading.hide(); + }); + }, + showLoadingMsg: function() { + 'use strict'; + require(['loading'], function(loading) { + loading.show(); + }); + }, + confirm: function(message, title, callback) { + 'use strict'; + require(['confirm'], function(confirm) { + confirm(message, title).then(function() { + callback(!0); + }).catch(function() { + callback(!1); + }); + }); } }; @@ -737,7 +759,6 @@ var AppInfo = {}; // define legacy features // TODO delete the rest of these define('fnchecked', ['legacy/fnchecked'], returnFirstDependency); - define('legacyDashboard', ['legacy/dashboard'], returnFirstDependency); define('legacySelectMenu', ['legacy/selectmenu'], returnFirstDependency); // there are several objects that need to be instantiated From af128f1c58b5046f938a74128aed58b142e0f32f Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:55:31 +0900 Subject: [PATCH 5/7] add elements to indicate no items exist for certain pages --- src/controllers/movies/moviecollections.js | 7 ++++++- src/controllers/movies/moviegenres.js | 9 +++++++++ src/controllers/movies/movietrailers.js | 7 ++++++- src/controllers/shows/tvgenres.js | 9 +++++++++ src/strings/en-us.json | 3 ++- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js index e9ae599b92..54d30c0c37 100644 --- a/src/controllers/movies/moviecollections.js +++ b/src/controllers/movies/moviecollections.js @@ -171,7 +171,12 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB } if (!result.Items.length) { - html = '

' + globalize.translate('MessageNoCollectionsAvailable') + '

'; + html = ''; + + html += '
'; + html += '

' + globalize.translate('MessageNothingHere') + '

'; + html += '

' + globalize.translate('MessageNoCollectionsAvailable') + '

'; + html += '
'; } var itemsContainer = tabContent.querySelector('.itemsContainer'); diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index e8e49ff9da..ab410c1bd4 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -165,6 +165,15 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader html += '
'; } + if (!result.Items.length) { + html = ''; + + html += '
'; + html += '

' + globalize.translate('MessageNothingHere') + '

'; + html += '

' + globalize.translate('MessageNoGenresAvailable') + '

'; + html += '
'; + } + elem.innerHTML = html; lazyLoader.lazyChildren(elem, fillItemsContainer); libraryBrowser.saveQueryValues(getSavedQueryKey(), query); diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js index 25d41d4fba..1a03c5f383 100644 --- a/src/controllers/movies/movietrailers.js +++ b/src/controllers/movies/movietrailers.js @@ -158,7 +158,12 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', ' } if (!result.Items.length) { - html = '

' + globalize.translate('MessageNoTrailersFound') + '

'; + html = ''; + + html += '
'; + html += '

' + globalize.translate('MessageNothingHere') + '

'; + html += '

' + globalize.translate('MessageNoTrailersFound') + '

'; + html += '
'; } var itemsContainer = tabContent.querySelector('.itemsContainer'); diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index de38763e99..7d09307fc2 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -161,6 +161,15 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader html += ''; } + if (!result.Items.length) { + html = ''; + + html += '
'; + html += '

' + globalize.translate('MessageNothingHere') + '

'; + html += '

' + globalize.translate('MessageNoGenresAvailable') + '

'; + html += '
'; + } + elem.innerHTML = html; lazyLoader.lazyChildren(elem, fillItemsContainer); libraryBrowser.saveQueryValues(getSavedQueryKey(), query); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index f26ba16c85..99e5686ea6 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1024,10 +1024,11 @@ "MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item or the global default value.", "MessageNoAvailablePlugins": "No available plugins.", "MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, and Albums. Click the + button to start creating collections.", + "MessageNoGenresAvailable": "Enable some metadata providers to pull genres from the internet.", "MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.", "MessageNoPluginsInstalled": "You have no plugins installed.", "MessageNoServersAvailable": "No servers have been found using the automatic server discovery.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "Install the trailers channel to enhance your movie experience by adding a library of internet trailers.", "MessageNothingHere": "Nothing here.", "MessagePasswordResetForUsers": "The following users have had their passwords reset. They can now sign in with the pin codes that were used to perform the reset.", "MessagePlayAccessRestricted": "Playback of this content is currently restricted. Please contact your server administrator for more information.", From c9ee1ccc661386a1627c52022e03443c4b14e931 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Jun 2020 15:57:15 +0900 Subject: [PATCH 6/7] use symlink for web config rather than a separate file --- .gitignore | 5 +---- src/config.json | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) create mode 120000 src/config.json diff --git a/.gitignore b/.gitignore index 9bccd32fb8..36b843f022 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# config -config.json - # npm dist web @@ -10,5 +7,5 @@ node_modules .idea .vscode -#log +# log yarn-error.log diff --git a/src/config.json b/src/config.json new file mode 120000 index 0000000000..f1bd2db71e --- /dev/null +++ b/src/config.json @@ -0,0 +1 @@ +config.template.json \ No newline at end of file From 78e84c66f0ff923bf31a4b25f99ca2b7725a99e0 Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 9 Jun 2020 02:19:21 +0900 Subject: [PATCH 7/7] use sane defaults for the web config --- src/config.template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.template.json b/src/config.template.json index 1e79270943..4b22a699d6 100644 --- a/src/config.template.json +++ b/src/config.template.json @@ -1,3 +1,3 @@ { - "multiserver": true + "multiserver": false }