From 36eb5564c1ba69924bd79539399c77b4a885b27a Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 22:03:09 +0200 Subject: [PATCH 01/17] Fix all Critical bugs from Sonarqube --- src/components/appRouter.js | 3 ++- src/components/homesections/homesections.js | 2 +- src/components/htmlaudioplayer/plugin.js | 2 +- src/components/nowplayingbar/nowplayingbar.js | 2 +- src/components/playback/playbackmanager.js | 2 +- src/components/slideshow/slideshow.js | 3 +-- src/controllers/auth/selectserver.js | 2 +- src/controllers/movies/moviegenres.js | 6 +++--- src/controllers/music/musicgenres.js | 6 +++--- src/controllers/music/musicplaylists.js | 2 +- src/controllers/shows/tvgenres.js | 6 +++--- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/appRouter.js b/src/components/appRouter.js index 23934467be..ab30609e59 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -577,7 +577,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM function showDirect(path) { return new Promise(function(resolve, reject) { - resolveOnNextShow = resolve, page.show(baseUrl()+path); + resolveOnNextShow = resolve; + resolve = page.show(baseUrl() + path); }); } diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 94e36f9d28..cb4866a1cc 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -131,7 +131,7 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la } else if (section === 'librarytiles' || section === 'smalllibrarytiles' || section === 'smalllibrarytiles-automobile' || section === 'librarytiles-automobile') { loadLibraryTiles(elem, apiClient, user, userSettings, 'smallBackdrop', userViews, allSections); } else if (section === 'librarybuttons') { - loadlibraryButtons(elem, apiClient, user, userSettings, userViews, allSections); + loadlibraryButtons(elem, apiClient, user, userSettings, userViews); } else if (section === 'resume') { loadResumeVideo(elem, apiClient, userId); } else if (section === 'resumeaudio') { diff --git a/src/components/htmlaudioplayer/plugin.js b/src/components/htmlaudioplayer/plugin.js index 8cae76bbee..90f954d503 100644 --- a/src/components/htmlaudioplayer/plugin.js +++ b/src/components/htmlaudioplayer/plugin.js @@ -101,7 +101,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp self._timeUpdated = false; self._currentTime = null; - var elem = createMediaElement(options); + var elem = createMediaElement(); return setCurrentSrc(elem, options); }; diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index 8da9b9c053..8205211b4f 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -241,7 +241,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', elem.addEventListener('click', function (e) { if (!dom.parentWithTag(e.target, ['BUTTON', 'INPUT', 'A'])) { - showRemoteControl(0); + showRemoteControl(); } }); } diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e9f7447691..2ea4c67cfb 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -3140,7 +3140,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla AllowVideoStreamCopy: false, AllowAudioStreamCopy: currentlyPreventsAudioStreamCopy || currentlyPreventsVideoStreamCopy ? false : null - }, true); + }); return; } diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index 26dc303def..d2bf1bb727 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -307,8 +307,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f */ function getSwiperSlideHtmlFromItem(item) { return getSwiperSlideHtmlFromSlide({ - imageUrl: getImgUrl(item), - originalImage: getImgUrl(item, true), + originalImage: getImgUrl(item), //title: item.Name, //description: item.Overview Id: item.Id, diff --git a/src/controllers/auth/selectserver.js b/src/controllers/auth/selectserver.js index e766dbdb5c..2d27742119 100644 --- a/src/controllers/auth/selectserver.js +++ b/src/controllers/auth/selectserver.js @@ -95,7 +95,7 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu } function showServerConnectionFailure() { - alertText(globalize.translate("MessageUnableToConnectToServer"), globalize.translate("HeaderConnectionFailure")); + alertText(globalize.translate("MessageUnableToConnectToServer")); } return function (view, params) { diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index d51a2e4789..bb395f337c 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -184,12 +184,12 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader }; self.getCurrentViewStyle = function () { - return getPageData(tabContent).view; + return getPageData().view; }; self.setCurrentViewStyle = function (viewStyle) { - getPageData(tabContent).view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + getPageData().view = viewStyle; + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/music/musicgenres.js b/src/controllers/music/musicgenres.js index b465a4d350..c1338bc222 100644 --- a/src/controllers/music/musicgenres.js +++ b/src/controllers/music/musicgenres.js @@ -107,12 +107,12 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f }; self.getCurrentViewStyle = function () { - return getPageData(tabContent).view; + return getPageData().view; }; self.setCurrentViewStyle = function (viewStyle) { - getPageData(tabContent).view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + getPageData().view = viewStyle; + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; diff --git a/src/controllers/music/musicplaylists.js b/src/controllers/music/musicplaylists.js index fd458c88ac..795eaba795 100644 --- a/src/controllers/music/musicplaylists.js +++ b/src/controllers/music/musicplaylists.js @@ -69,7 +69,7 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f var data = {}; self.getCurrentViewStyle = function () { - return getPageData(tabContent).view; + return getPageData().view; }; var promise; diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index 9c37e04e7c..9a0823a6b9 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -177,12 +177,12 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader }; self.getCurrentViewStyle = function () { - return getPageData(tabContent).view; + return getPageData().view; }; self.setCurrentViewStyle = function (viewStyle) { - getPageData(tabContent).view = viewStyle; - libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); + getPageData().view = viewStyle; + libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle); fullyReload(); }; From 6a24de84a0ad91de200f6178c6447fe73c040adb Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:15:35 +0200 Subject: [PATCH 02/17] Convert dfnshelper switch to lookup table --- src/scripts/dfnshelper.js | 143 +++++++++++++------------------------- 1 file changed, 50 insertions(+), 93 deletions(-) diff --git a/src/scripts/dfnshelper.js b/src/scripts/dfnshelper.js index 379190842b..8fc89da943 100644 --- a/src/scripts/dfnshelper.js +++ b/src/scripts/dfnshelper.js @@ -1,99 +1,56 @@ -import { ar, be, bg, ca, cs, da, de, el, enGB, enUS, es, faIR, fi, fr, frCA, he, hi, hr, hu, id, it, kk, ko, lt, ms, nb, nl, pl, ptBR, pt, ro, ru, sk, sl, sv, tr, uk, vi, zhCN, zhTW } from 'date-fns/locale'; +import { ar, be, bg, ca, cs, da, de, el, enGB, enUS, es, faIR, fi, fr, frCA, he, hi, hr, hu, id, it, kk, ko, lt, ms, nb, + nl, pl, ptBR, pt, ro, ru, sk, sl, sv, tr, uk, vi, zhCN, zhTW } from 'date-fns/locale'; import globalize from 'globalize'; +const dateLocales = (locale) => ({ + 'ar': ar, + 'be-by': be, + 'bg-bg': bg, + 'ca': ca, + 'cs': cs, + 'da': da, + 'de': de, + 'el': el, + 'en-gb': enGB, + 'en-us': enUS, + 'es': es, + 'es-ar': es, + 'es-mx': es, + 'fa': faIR, + 'fi': fi, + 'fr': fr, + 'fr-ca': frCA, + 'gsw': de, + 'he': he, + 'hi-in': hi, + 'hr': hr, + 'hu': hu, + 'id': id, + 'it': it, + 'kk': kk, + 'ko': ko, + 'lt-lt': lt, + 'ms': ms, + 'nb': nb, + 'nl': nl, + 'pl': pl, + 'pt-br': ptBR, + 'pt-pt': pt, + 'ro': ro, + 'ru': ru, + 'sk': sk, + 'sl-si': sl, + 'sv': sv, + 'tr': tr, + 'uk': uk, + 'vi': vi, + 'zh-cn': zhCN, + 'zh-hk': zhCN, + 'zh-tw': zhTW +})[locale]; + export function getLocale() { - switch (globalize.getCurrentLocale()) { - case 'ar': - return ar; - case 'be-by': - return be; - case 'bg-bg': - return bg; - case 'ca': - return ca; - case 'cs': - return cs; - case 'da': - return da; - case 'de': - return de; - case 'el': - return el; - case 'en-gb': - return enGB; - case 'en-us': - return enUS; - case 'es': - return es; - case 'es-ar': - return es; - case 'es-mx': - return es; - case 'fa': - return faIR; - case 'fi': - return fi; - case 'fr': - return fr; - case 'fr-ca': - return frCA; - case 'gsw': - return de; - case 'he': - return he; - case 'hi-in': - return hi; - case 'hr': - return hr; - case 'hu': - return hu; - case 'id': - return id; - case 'it': - return it; - case 'kk': - return kk; - case 'ko': - return ko; - case 'lt-lt': - return lt; - case 'ms': - return ms; - case 'nb': - return nb; - case 'nl': - return nl; - case 'pl': - return pl; - case 'pt-br': - return ptBR; - case 'pt-pt': - return pt; - case 'ro': - return ro; - case 'ru': - return ru; - case 'sk': - return sk; - case 'sl-si': - return sl; - case 'sv': - return sv; - case 'tr': - return tr; - case 'uk': - return uk; - case 'vi': - return vi; - case 'zh-cn': - return zhCN; - case 'zh-hk': - return zhCN; - case 'zh-tw': - return zhTW; - default: - return enUS; - } + return dateLocales(globalize.getCurrentLocale() || enUS); } export const localeWithSuffix = { addSuffix: true, locale: getLocale() }; From a1132e9a9d492896b739500f6527bec79e8500be Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:43:03 +0200 Subject: [PATCH 03/17] Correct comma operator use in appRouter --- src/components/appRouter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/appRouter.js b/src/components/appRouter.js index ab30609e59..4446f8c053 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -578,7 +578,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM function showDirect(path) { return new Promise(function(resolve, reject) { resolveOnNextShow = resolve; - resolve = page.show(baseUrl() + path); + page.show(baseUrl() + path); }); } From abb8d56db3713541ef6bae4b3a824fbc10ca680f Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:44:38 +0200 Subject: [PATCH 04/17] Cleanup all Legacy components --- src/legacy/dashboard.js | 10 +++++++--- src/legacy/fnchecked.js | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/legacy/dashboard.js b/src/legacy/dashboard.js index 69c47d3b1f..63c5eb0faa 100644 --- a/src/legacy/dashboard.js +++ b/src/legacy/dashboard.js @@ -3,16 +3,20 @@ Dashboard.confirm = function(message, title, callback) { require(["confirm"], function(confirm) { confirm(message, title).then(function() { callback(!0); - }, function() { + }).catch(function() { callback(!1); }); }); -}, Dashboard.showLoadingMsg = function() { +}; + +Dashboard.showLoadingMsg = function() { "use strict"; require(["loading"], function(loading) { loading.show(); }); -}, Dashboard.hideLoadingMsg = function() { +}; + +Dashboard.hideLoadingMsg = function() { "use strict"; require(["loading"], function(loading) { loading.hide(); diff --git a/src/legacy/fnchecked.js b/src/legacy/fnchecked.js index 1f5a5f6014..b815668f93 100644 --- a/src/legacy/fnchecked.js +++ b/src/legacy/fnchecked.js @@ -4,7 +4,9 @@ define(["jQuery"], function($) { return !0 === value || !1 === value ? $(this).each(function() { this.checked = value; }) : this.length && this[0].checked; - }, $.fn.checkboxradio = function() { + }; + + $.fn.checkboxradio = function() { return this; }; }); From 440ae17e7d9270796ff69ac03694c2dedf125ccc Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:44:51 +0200 Subject: [PATCH 05/17] Clean gulpfile --- gulpfile.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 0eb5593541..973c400263 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -62,7 +62,7 @@ function serve() { port: 8080 }); - let events = ['add', 'change']; + const events = ['add', 'change']; watch(options.javascript.query).on('all', function (event, path) { if (events.includes(event)) { @@ -105,7 +105,7 @@ function clean() { return del(['dist/']); } -let pipelineJavascript = lazypipe() +const pipelineJavascript = lazypipe() .pipe(function () { return mode.development(sourcemaps.init({ loadMaps: true })); }) @@ -140,7 +140,7 @@ function apploader(standalone) { .pipe(pipelineJavascript()) .pipe(dest('dist/')) .pipe(browserSync.stream()); - }; + } task.displayName = 'apploader'; From ef1cf2c404ffd88a44723a27b0209a4cd91245a3 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:45:09 +0200 Subject: [PATCH 06/17] Clean bundle.js --- src/bundle.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bundle.js b/src/bundle.js index 11379c9d87..277f840a0b 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -85,15 +85,15 @@ _define("webcomponents", function() { }); // libass-wasm -var libass_wasm = require("libass-wasm"); +var libassWasm = require("libass-wasm"); _define("JavascriptSubtitlesOctopus", function() { - return libass_wasm; + return libassWasm; }); // material-icons -var material_icons = require("material-design-icons-iconfont/dist/material-design-icons.css"); +var materialIcons = require("material-design-icons-iconfont/dist/material-design-icons.css"); _define("material-icons", function() { - return material_icons; + return materialIcons; }); // noto font @@ -120,12 +120,12 @@ _define("classlist-polyfill", function () { }); // Date-FNS -var date_fns = require("date-fns"); +var dateFns = require("date-fns"); _define("date-fns", function () { - return date_fns; + return dateFns; }); -var date_fns_locale = require("date-fns/locale"); +var dateFnsLocale = require("date-fns/locale"); _define("date-fns/locale", function () { - return date_fns_locale; + return dateFnsLocale; }); From 0fa74f34d51ba74930cf90501810dd820470638a Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:45:39 +0200 Subject: [PATCH 07/17] Clean apploader --- src/scripts/apploader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/apploader.js b/src/scripts/apploader.js index e8a63217a8..7001c4c614 100644 --- a/src/scripts/apploader.js +++ b/src/scripts/apploader.js @@ -8,7 +8,7 @@ var script = document.createElement("script"); if (self.dashboardVersion) { - src += "?v=" + self.dashboardVersion; + src += `?v=${self.dashboardVersion}`; } script.src = src; From fb6766c832531a043a33542401efd845834b7a03 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:45:50 +0200 Subject: [PATCH 08/17] Clean autobackdrops --- src/scripts/autobackdrops.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/scripts/autobackdrops.js b/src/scripts/autobackdrops.js index 09f89fad6f..fcc49d968b 100644 --- a/src/scripts/autobackdrops.js +++ b/src/scripts/autobackdrops.js @@ -1,16 +1,18 @@ define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSettings, libraryMenu) { "use strict"; + var cache = {}; + function enabled() { return userSettings.enableBackdrops(); } function getBackdropItemIds(apiClient, userId, types, parentId) { - var key = "backdrops2_" + userId + (types || "") + (parentId || ""); + var key = `backdrops2_${userId + (types || "") + (parentId || "")}`; var data = cache[key]; if (data) { - console.debug("Found backdrop id list in cache. Key: " + key); + console.debug(`Found backdrop id list in cache. Key: ${key}`); data = JSON.parse(data); return Promise.resolve(data); } @@ -54,7 +56,6 @@ define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSett } } - var cache = {}; pageClassOn("pageshow", "page", function () { var page = this; From b7661c29774a980c0a39959b9232062802f66a12 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 6 Apr 2020 23:49:44 +0200 Subject: [PATCH 09/17] Clean playlistedit --- src/scripts/playlistedit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/playlistedit.js b/src/scripts/playlistedit.js index 32a3a960a4..bca9f02734 100644 --- a/src/scripts/playlistedit.js +++ b/src/scripts/playlistedit.js @@ -8,7 +8,7 @@ define(["listView"], function (listView) { EnableImageTypes: "Primary,Backdrop,Banner,Thumb", UserId: ApiClient.getCurrentUserId() }; - return ApiClient.getJSON(ApiClient.getUrl("Playlists/" + itemId + "/Items", query)); + return ApiClient.getJSON(ApiClient.getUrl(`Playlists/${itemId}/Items`, query)); }; } From 43f6f985aa340cd573202e9e2ad5ab23ca6a9c88 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 7 Apr 2020 00:09:07 +0200 Subject: [PATCH 10/17] Clean inputManager --- src/scripts/inputManager.js | 194 ++++++++++-------------------------- 1 file changed, 51 insertions(+), 143 deletions(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 4d62ff9f20..c4490ef19d 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -48,7 +48,7 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct return true; } - function handleCommand(name, options) { + function handleCommand(commandName, options) { lastInputTime = new Date().getTime(); @@ -71,7 +71,7 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct if (eventListenerCount) { var customEvent = new CustomEvent("command", { detail: { - command: name + command: commandName }, bubbles: true, cancelable: true @@ -84,155 +84,63 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct } } - switch (name) { - case 'up': - focusManager.moveUp(sourceElement); - break; - case 'down': - focusManager.moveDown(sourceElement); - break; - case 'left': - focusManager.moveLeft(sourceElement); - break; - case 'right': - focusManager.moveRight(sourceElement); - break; - case 'home': - appRouter.goHome(); - break; - case 'settings': - appRouter.showSettings(); - break; - case 'back': + const keyActions = (command) => ({ + 'up': focusManager.moveUp(sourceElement), + 'down': focusManager.moveDown(sourceElement), + 'left': focusManager.moveLeft(sourceElement), + 'right': focusManager.moveRight(sourceElement), + 'home': appRouter.goHome(), + 'settings': appRouter.showSettings(), + 'back': () => { if (appRouter.canGoBack()) { appRouter.back(); } else if (appHost.supports('exit')) { appHost.exit(); } - break; - case 'forward': - break; - case 'select': - select(sourceElement); - break; - case 'pageup': - break; - case 'pagedown': - break; - case 'end': - break; - case 'menu': - break; - case 'info': - break; - case 'nextchapter': - playbackManager.nextChapter(); - break; - case 'next': - case 'nexttrack': - playbackManager.nextTrack(); - break; - case 'previous': - case 'previoustrack': - playbackManager.previousTrack(); - break; - case 'previouschapter': - playbackManager.previousChapter(); - break; - case 'guide': - appRouter.showGuide(); - break; - case 'recordedtv': - appRouter.showRecordedTV(); - break; - case 'record': - break; - case 'livetv': - appRouter.showLiveTV(); - break; - case 'mute': - playbackManager.setMute(true); - break; - case 'unmute': - playbackManager.setMute(false); - break; - case 'togglemute': - playbackManager.toggleMute(); - break; - case 'channelup': - playbackManager.channelUp(); - break; - case 'channeldown': - playbackManager.channelDown(); - break; - case 'volumedown': - playbackManager.volumeDown(); - break; - case 'volumeup': - playbackManager.volumeUp(); - break; - case 'play': - playbackManager.unpause(); - break; - case 'pause': - playbackManager.pause(); - break; - case 'playpause': - playbackManager.playPause(); - break; - case 'stop': + }, + 'select': select(sourceElement), + 'nextchapter': playbackManager.nextChapter(), + 'next': playbackManager.nextTrack(), + 'nexttrack': playbackManager.nextTrack(), + 'previous': playbackManager.previousTrack(), + 'previoustrack': playbackManager.previousTrack(), + 'previouschapter': playbackManager.previousChapter(), + 'guide': appRouter.showGuide(), + 'recordedtv': appRouter.showRecordedTV(), + 'livetv': appRouter.showLiveTV(), + 'mute': playbackManager.setMute(true), + 'unmute': playbackManager.setMute(false), + 'togglemute': playbackManager.toggleMute(), + 'channelup': playbackManager.channelUp(), + 'channeldown': playbackManager.channelDown(), + 'volumedown': playbackManager.volumeDown(), + 'volumeup': playbackManager.volumeUp(), + 'play': playbackManager.unpause(), + 'pause': playbackManager.pause(), + 'playpause': playbackManager.playPause(), + 'stop': () => { if (checkCommandTime('stop')) { playbackManager.stop(); } - break; - case 'changezoom': - playbackManager.toggleAspectRatio(); - break; - case 'changeaudiotrack': - playbackManager.changeAudioStream(); - break; - case 'changesubtitletrack': - playbackManager.changeSubtitleStream(); - break; - case 'search': - appRouter.showSearch(); - break; - case 'favorites': - appRouter.showFavorites(); - break; - case 'fastforward': - playbackManager.fastForward(); - break; - case 'rewind': - playbackManager.rewind(); - break; - case 'togglefullscreen': - playbackManager.toggleFullscreen(); - break; - case 'disabledisplaymirror': - playbackManager.enableDisplayMirroring(false); - break; - case 'enabledisplaymirror': - playbackManager.enableDisplayMirroring(true); - break; - case 'toggledisplaymirror': - playbackManager.toggleDisplayMirroring(); - break; - case 'nowplaying': - appRouter.showNowPlaying(); - break; - case 'repeatnone': - playbackManager.setRepeatMode('RepeatNone'); - break; - case 'repeatall': - playbackManager.setRepeatMode('RepeatAll'); - break; - case 'repeatone': - playbackManager.setRepeatMode('RepeatOne'); - break; - default: - break; - } + }, + 'changezoom': playbackManager.toggleAspectRatio(), + 'changeaudiotrack': playbackManager.changeAudioStream(), + 'changesubtitletrack': playbackManager.changeSubtitleStream(), + 'search': appRouter.showSearch(), + 'favorites': appRouter.showFavorites(), + 'fastforward': playbackManager.fastForward(), + 'rewind': playbackManager.rewind(), + 'togglefullscreen': playbackManager.toggleFullscreen(), + 'disabledisplaymirror': playbackManager.enableDisplayMirroring(false), + 'enabledisplaymirror': playbackManager.enableDisplayMirroring(true), + 'toggledisplaymirror': playbackManager.toggleDisplayMirroring(), + 'nowplaying': appRouter.showNowPlaying(), + 'repeatnone': playbackManager.setRepeatMode('RepeatNone'), + 'repeatall': playbackManager.setRepeatMode('RepeatAll'), + 'repeatone': playbackManager.setRepeatMode('RepeatOne') + })[command]; + + keyActions(commandName); } dom.addEventListener(document, 'click', notify, { From e5c8d2b23b9236f7fc609648f566a5f244900f6b Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 7 Apr 2020 00:14:06 +0200 Subject: [PATCH 11/17] Convert inputManager to ES6 --- package.json | 3 ++- src/scripts/inputManager.js | 44 +++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index b112d0be60..9db655eda7 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,8 @@ "src/components/sanatizefilename.js", "src/scripts/settings/webSettings.js", "src/components/scrollManager.js", - "src/scripts/dfnshelper.js" + "src/scripts/dfnshelper.js", + "src/scripts/inputManager.js" ], "plugins": [ "@babel/plugin-transform-modules-amd" diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index c4490ef19d..8a049ac4fb 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -1,32 +1,37 @@ -define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], function (playbackManager, focusManager, appRouter, dom, appHost) { - 'use strict'; +import playbackManager from 'playbackManager'; +import focusManager from 'focusManager'; +import appRouter from 'appRouter'; +import dom from 'dom'; +import appHost from 'apphost'; + +/* eslint-disable indent */ var lastInputTime = new Date().getTime(); - function notify() { + export function notify() { lastInputTime = new Date().getTime(); handleCommand('unknown'); } - function notifyMouseMove() { + export function notifyMouseMove() { lastInputTime = new Date().getTime(); } - function idleTime() { + export function idleTime() { return new Date().getTime() - lastInputTime; } - function select(sourceElement) { + export function select(sourceElement) { sourceElement.click(); } var eventListenerCount = 0; - function on(scope, fn) { + export function on(scope, fn) { eventListenerCount++; dom.addEventListener(scope, 'command', fn, {}); } - function off(scope, fn) { + export function off(scope, fn) { if (eventListenerCount) { eventListenerCount--; } @@ -48,7 +53,7 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct return true; } - function handleCommand(commandName, options) { + export function handleCommand(commandName, options) { lastInputTime = new Date().getTime(); @@ -147,13 +152,14 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], funct passive: true }); - return { - trigger: handleCommand, - handle: handleCommand, - notify: notify, - notifyMouseMove: notifyMouseMove, - idleTime: idleTime, - on: on, - off: off - }; -}); +/* eslint-enable indent */ + +export default { + trigger: handleCommand, + handle: handleCommand, + notify: notify, + notifyMouseMove: notifyMouseMove, + idleTime: idleTime, + on: on, + off: off +}; From a5d8775611dedbd580ba6886c2aee796b8efd1f5 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 7 Apr 2020 19:11:53 +0200 Subject: [PATCH 12/17] Make inputManager look-up table work properly --- src/scripts/inputManager.js | 166 +++++++++++++++++++++++++++--------- 1 file changed, 124 insertions(+), 42 deletions(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 8a049ac4fb..39fe8f4ae6 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -90,12 +90,24 @@ import appHost from 'apphost'; } const keyActions = (command) => ({ - 'up': focusManager.moveUp(sourceElement), - 'down': focusManager.moveDown(sourceElement), - 'left': focusManager.moveLeft(sourceElement), - 'right': focusManager.moveRight(sourceElement), - 'home': appRouter.goHome(), - 'settings': appRouter.showSettings(), + 'up': () => { + focusManager.moveUp(sourceElement); + }, + 'down': () => { + focusManager.moveDown(sourceElement); + }, + 'left': () => { + focusManager.moveLeft(sourceElement); + }, + 'right': () => { + focusManager.moveRight(sourceElement) + }, + 'home': () => { + appRouter.goHome(); + }, + 'settings': () => { + appRouter.showSettings(); + }, 'back': () => { if (appRouter.canGoBack()) { appRouter.back(); @@ -103,49 +115,119 @@ import appHost from 'apphost'; appHost.exit(); } }, - 'select': select(sourceElement), - 'nextchapter': playbackManager.nextChapter(), - 'next': playbackManager.nextTrack(), - 'nexttrack': playbackManager.nextTrack(), - 'previous': playbackManager.previousTrack(), - 'previoustrack': playbackManager.previousTrack(), - 'previouschapter': playbackManager.previousChapter(), - 'guide': appRouter.showGuide(), - 'recordedtv': appRouter.showRecordedTV(), - 'livetv': appRouter.showLiveTV(), - 'mute': playbackManager.setMute(true), - 'unmute': playbackManager.setMute(false), - 'togglemute': playbackManager.toggleMute(), - 'channelup': playbackManager.channelUp(), - 'channeldown': playbackManager.channelDown(), - 'volumedown': playbackManager.volumeDown(), - 'volumeup': playbackManager.volumeUp(), - 'play': playbackManager.unpause(), - 'pause': playbackManager.pause(), - 'playpause': playbackManager.playPause(), + 'select': () => { + select(sourceElement); + }, + 'nextchapter': () => { + playbackManager.nextChapter(); + }, + 'next': () => { + playbackManager.nextTrack(); + }, + 'nexttrack': () => { + playbackManager.nextTrack(); + }, + 'previous': () => { + playbackManager.previousTrack(); + }, + 'previoustrack': () => { + playbackManager.previousTrack(); + }, + 'previouschapter': () => { + playbackManager.previousChapter(); + }, + 'guide': () => { + appRouter.showGuide(); + }, + 'recordedtv': () => { + appRouter.showRecordedTV(); + }, + 'livetv': () => { + appRouter.showLiveTV(); + }, + 'mute': () => { + playbackManager.setMute(true); + }, + 'unmute': () => { + playbackManager.setMute(false); + }, + 'togglemute': () => { + playbackManager.toggleMute(); + }, + 'channelup': () => { + playbackManager.channelUp(); + }, + 'channeldown': () => { + playbackManager.channelDown(); + }, + 'volumedown': () => { + playbackManager.volumeDown(); + }, + 'volumeup': () => { + playbackManager.volumeUp(); + }, + 'play': () => { + playbackManager.unpause(); + }, + 'pause': () => { + playbackManager.pause(); + }, + 'playpause': () => { + playbackManager.playPause(); + }, 'stop': () => { if (checkCommandTime('stop')) { playbackManager.stop(); } }, - 'changezoom': playbackManager.toggleAspectRatio(), - 'changeaudiotrack': playbackManager.changeAudioStream(), - 'changesubtitletrack': playbackManager.changeSubtitleStream(), - 'search': appRouter.showSearch(), - 'favorites': appRouter.showFavorites(), - 'fastforward': playbackManager.fastForward(), - 'rewind': playbackManager.rewind(), - 'togglefullscreen': playbackManager.toggleFullscreen(), - 'disabledisplaymirror': playbackManager.enableDisplayMirroring(false), - 'enabledisplaymirror': playbackManager.enableDisplayMirroring(true), - 'toggledisplaymirror': playbackManager.toggleDisplayMirroring(), - 'nowplaying': appRouter.showNowPlaying(), - 'repeatnone': playbackManager.setRepeatMode('RepeatNone'), - 'repeatall': playbackManager.setRepeatMode('RepeatAll'), - 'repeatone': playbackManager.setRepeatMode('RepeatOne') + 'changezoom': () => { + playbackManager.toggleAspectRatio(); + }, + 'changeaudiotrack': () => { + playbackManager.changeAudioStream(); + }, + 'changesubtitletrack': () => { + playbackManager.changeSubtitleStream(); + }, + 'search': () => { + appRouter.showSearch(); + }, + 'favorites': () => { + appRouter.showFavorites(); + }, + 'fastforward': () => { + playbackManager.fastForward(); + }, + 'rewind': () => { + playbackManager.rewind(); + }, + 'togglefullscreen': () => { + playbackManager.toggleFullscreen(); + }, + 'disabledisplaymirror': () => { + playbackManager.enableDisplayMirroring(false); + }, + 'enabledisplaymirror': () => { + playbackManager.enableDisplayMirroring(true); + }, + 'toggledisplaymirror': () => { + playbackManager.toggleDisplayMirroring(); + }, + 'nowplaying': () => { + appRouter.showNowPlaying(); + }, + 'repeatnone': () => { + playbackManager.setRepeatMode('RepeatNone'); + }, + 'repeatall': () => { + playbackManager.setRepeatMode('RepeatAll'); + }, + 'repeatone': () => { + playbackManager.setRepeatMode('RepeatOne'); + } })[command]; - keyActions(commandName); + keyActions(commandName).call(); } dom.addEventListener(document, 'click', notify, { From 77d8226dd34a1c3a365ee16fe852ed04ad6f69ab Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 7 Apr 2020 19:46:47 +0200 Subject: [PATCH 13/17] Add Japanese locale to dfnshelper --- src/scripts/dfnshelper.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/scripts/dfnshelper.js b/src/scripts/dfnshelper.js index 8fc89da943..a36426b65a 100644 --- a/src/scripts/dfnshelper.js +++ b/src/scripts/dfnshelper.js @@ -1,4 +1,4 @@ -import { ar, be, bg, ca, cs, da, de, el, enGB, enUS, es, faIR, fi, fr, frCA, he, hi, hr, hu, id, it, kk, ko, lt, ms, nb, +import { ar, be, bg, ca, cs, da, de, el, enGB, enUS, es, faIR, fi, fr, frCA, he, hi, hr, hu, id, it, ja, kk, ko, lt, ms, nb, nl, pl, ptBR, pt, ro, ru, sk, sl, sv, tr, uk, vi, zhCN, zhTW } from 'date-fns/locale'; import globalize from 'globalize'; @@ -27,6 +27,7 @@ const dateLocales = (locale) => ({ 'hu': hu, 'id': id, 'it': it, + 'ja': ja, 'kk': kk, 'ko': ko, 'lt-lt': lt, @@ -50,7 +51,9 @@ const dateLocales = (locale) => ({ })[locale]; export function getLocale() { - return dateLocales(globalize.getCurrentLocale() || enUS); + console.warn(globalize.getCurrentLocale()); + console.warn(dateLocales(globalize.getCurrentLocale())); + return dateLocales(globalize.getCurrentLocale()) || enUS; } export const localeWithSuffix = { addSuffix: true, locale: getLocale() }; From 33855a655f22af2a1666c8eb8771ad7e98f87599 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 7 Apr 2020 19:49:22 +0200 Subject: [PATCH 14/17] Add error handling to command processor in inputManager --- src/scripts/inputManager.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 39fe8f4ae6..826a9f802b 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -100,7 +100,7 @@ import appHost from 'apphost'; focusManager.moveLeft(sourceElement); }, 'right': () => { - focusManager.moveRight(sourceElement) + focusManager.moveRight(sourceElement); }, 'home': () => { appRouter.goHome(); @@ -227,7 +227,11 @@ import appHost from 'apphost'; } })[command]; - keyActions(commandName).call(); + try { + keyActions(commandName).call(); + } catch (error) { + console.debug(`inputManager: tried to process command with no action assigned: ${commandName}`); + } } dom.addEventListener(document, 'click', notify, { From 89979a00a32cc7ce5945c35b3cb21618a548a7bc Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 9 Apr 2020 19:47:45 +0200 Subject: [PATCH 15/17] Fix issues in dfnshelper and inputManager --- src/scripts/dfnshelper.js | 2 -- src/scripts/inputManager.js | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/scripts/dfnshelper.js b/src/scripts/dfnshelper.js index a36426b65a..3f82e6ba7c 100644 --- a/src/scripts/dfnshelper.js +++ b/src/scripts/dfnshelper.js @@ -51,8 +51,6 @@ const dateLocales = (locale) => ({ })[locale]; export function getLocale() { - console.warn(globalize.getCurrentLocale()); - console.warn(dateLocales(globalize.getCurrentLocale())); return dateLocales(globalize.getCurrentLocale()) || enUS; } diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 826a9f802b..cbbece63bc 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -6,7 +6,7 @@ import appHost from 'apphost'; /* eslint-disable indent */ - var lastInputTime = new Date().getTime(); + let lastInputTime = new Date().getTime(); export function notify() { lastInputTime = new Date().getTime(); @@ -25,7 +25,7 @@ import appHost from 'apphost'; sourceElement.click(); } - var eventListenerCount = 0; + let eventListenerCount = 0; export function on(scope, fn) { eventListenerCount++; dom.addEventListener(scope, 'command', fn, {}); @@ -38,12 +38,12 @@ import appHost from 'apphost'; dom.removeEventListener(scope, 'command', fn, {}); } - var commandTimes = {}; + let commandTimes = {}; function checkCommandTime(command) { - var last = commandTimes[command] || 0; - var now = new Date().getTime(); + let last = commandTimes[command] || 0; + const now = new Date().getTime(); if ((now - last) < 1000) { return false; @@ -57,7 +57,7 @@ import appHost from 'apphost'; lastInputTime = new Date().getTime(); - var sourceElement = (options ? options.sourceElement : null); + let sourceElement = (options ? options.sourceElement : null); if (sourceElement) { sourceElement = focusManager.focusableParent(sourceElement); @@ -66,7 +66,7 @@ import appHost from 'apphost'; if (!sourceElement) { sourceElement = document.activeElement || window; - var dlg = document.querySelector('.dialogContainer .dialog.opened'); + const dlg = document.querySelector('.dialogContainer .dialog.opened'); if (dlg && (!sourceElement || !dlg.contains(sourceElement))) { sourceElement = dlg; @@ -74,7 +74,7 @@ import appHost from 'apphost'; } if (eventListenerCount) { - var customEvent = new CustomEvent("command", { + const customEvent = new CustomEvent("command", { detail: { command: commandName }, @@ -82,7 +82,7 @@ import appHost from 'apphost'; cancelable: true }); - var eventResult = sourceElement.dispatchEvent(customEvent); + const eventResult = sourceElement.dispatchEvent(customEvent); if (!eventResult) { // event cancelled return; @@ -227,10 +227,10 @@ import appHost from 'apphost'; } })[command]; - try { - keyActions(commandName).call(); - } catch (error) { + if (keyActions(commandName) === undefined) { console.debug(`inputManager: tried to process command with no action assigned: ${commandName}`); + } else { + keyActions(commandName).call(); } } From 9d859d4fd3d70173b1e7edb7c5df4e4806301941 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Fri, 10 Apr 2020 22:58:18 +0200 Subject: [PATCH 16/17] Fetch action only once in inputManager --- src/scripts/inputManager.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index cbbece63bc..1f65230154 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -227,10 +227,11 @@ import appHost from 'apphost'; } })[command]; - if (keyActions(commandName) === undefined) { - console.debug(`inputManager: tried to process command with no action assigned: ${commandName}`); + const action = keyActions(commandName); + if (action !== undefined) { + action.call(); } else { - keyActions(commandName).call(); + console.debug(`inputManager: tried to process command with no action assigned: ${commandName}`); } } From 0a0c639bad3ca860df7c6615cf5ea9458a51bfcd Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Fri, 10 Apr 2020 23:35:09 +0200 Subject: [PATCH 17/17] Update src/scripts/inputManager.js Use const instead of let Co-Authored-By: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/scripts/inputManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 1f65230154..cacc6c99a3 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -42,7 +42,7 @@ import appHost from 'apphost'; function checkCommandTime(command) { - let last = commandTimes[command] || 0; + const last = commandTimes[command] || 0; const now = new Date().getTime(); if ((now - last) < 1000) {