From e24fffd84b9d49604c3f1b3628ca0de6f41516b0 Mon Sep 17 00:00:00 2001 From: David Murdoch <187813+davidmurdoch@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:59:54 -0500 Subject: [PATCH] proof of concept --- src/components/toolbar/AppUserMenu.tsx | 16 ++++++++++++ src/controllers/session/login/index.html | 5 ++++ src/controllers/session/login/index.js | 32 ++++++++++++++++++------ src/controllers/user/menu/index.html | 8 ++++++ src/controllers/user/menu/index.js | 4 +++ src/strings/en-us.json | 2 ++ 6 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/components/toolbar/AppUserMenu.tsx b/src/components/toolbar/AppUserMenu.tsx index 31a6856f22..116332308f 100644 --- a/src/components/toolbar/AppUserMenu.tsx +++ b/src/components/toolbar/AppUserMenu.tsx @@ -45,6 +45,11 @@ const AppUserMenu: FC = ({ onMenuClose(); }, [ onMenuClose ]); + const onSwitchUserClick = useCallback(() => { + Dashboard.navigate('login.html') + onMenuClose(); + }, [ onMenuClose ]); + const onLogoutClick = useCallback(() => { Dashboard.logout(); onMenuClose(); @@ -168,6 +173,17 @@ const AppUserMenu: FC = ({ )} + + + + + + {globalize.translate('SwitchUser')} + + + diff --git a/src/controllers/session/login/index.html b/src/controllers/session/login/index.html index f24bc0d3eb..49d129afc1 100644 --- a/src/controllers/session/login/index.html +++ b/src/controllers/session/login/index.html @@ -33,6 +33,11 @@
+
+

${HeaderWhosWatching}

+
+
+
'; } - context.querySelector('#divUsers').innerHTML = html; + target.innerHTML = html; } export default function (view, params) { @@ -214,7 +220,7 @@ export default function (view, params) { }); } - view.querySelector('#divUsers').addEventListener('click', function (e) { + view.querySelectorAll('#divUsers,#divSignedInUsers').forEach(el => el.addEventListener('click', function (e) { const card = dom.parentWithClass(e.target, 'card'); const cardContent = card ? card.querySelector('.cardContent') : null; @@ -223,8 +229,12 @@ export default function (view, params) { const id = cardContent.getAttribute('data-userid'); const name = cardContent.getAttribute('data-username'); const haspw = cardContent.getAttribute('data-haspw'); - - if (id === 'manual') { + const accessToken = cardContent.getAttribute('data-accesstoken'); + // if the clicked card has an accessToken attached we can just log + // in right away... + if (accessToken) { + onLoginSuccessful(id, accessToken, getApiClient(), getTargetUrl()); + } else if (id === 'manual') { context.querySelector('#txtManualName').value = ''; showManualForm(context, true); } else if (haspw == 'false') { @@ -235,7 +245,7 @@ export default function (view, params) { showManualForm(context, true, true); } } - }); + })); view.querySelector('.manualLoginForm').addEventListener('submit', function (e) { appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked); authenticateUserByName(view, getApiClient(), getTargetUrl(), view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value); @@ -278,10 +288,16 @@ export default function (view, params) { console.debug('Failed to get QuickConnect status'); }); + // TODO: this shouldn't suck + const loggedInUsers = JSON.parse(window.localStorage.getItem('users') || "[]"); + if (loggedInUsers && loggedInUsers.length) { + loadUserList(view, apiClient, loggedInUsers, view.querySelector('#divSignedInUsers')); + } + apiClient.getPublicUsers().then(function (users) { if (users.length) { showVisualForm(); - loadUserList(view, apiClient, users); + loadUserList(view, apiClient, users, context.querySelector('#divUsers')); } else { view.querySelector('#txtManualName').value = ''; showManualForm(view, false, false); diff --git a/src/controllers/user/menu/index.html b/src/controllers/user/menu/index.html index a6b0a2d045..20202943a6 100644 --- a/src/controllers/user/menu/index.html +++ b/src/controllers/user/menu/index.html @@ -104,6 +104,14 @@
+ +
+ +
+
${SwitchUser}
+
+
+
diff --git a/src/controllers/user/menu/index.js b/src/controllers/user/menu/index.js index 035d07492b..1510ff46fc 100644 --- a/src/controllers/user/menu/index.js +++ b/src/controllers/user/menu/index.js @@ -9,6 +9,10 @@ export default function (view, params) { Dashboard.logout(); }); + view.querySelector('.btnSwitchUser').addEventListener('click', function () { + Dashboard.navigate("login.html"); + }); + view.querySelector('.selectServer').addEventListener('click', function () { Dashboard.selectServer(); }); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5095b109af..7a91ca0b00 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -131,6 +131,7 @@ "ButtonShutdown": "Shutdown", "ButtonSignIn": "Sign In", "ButtonSignOut": "Sign Out", + "ButtonSwitchUser": "Switch User", "ButtonExitApp": "Exit Application", "ButtonSpace": "Space", "ButtonSplit": "Split", @@ -476,6 +477,7 @@ "HeaderPlaybackError": "Playback Error", "HeaderPlayOn": "Play On", "HeaderPleaseSignIn": "Please sign in", + "HeaderWhosWatching": "Who's Watching", "HeaderPortRanges": "Firewall and Proxy Settings", "HeaderPreferredMetadataLanguage": "Preferred Metadata Language", "HeaderPreviewLyrics": "Preview Lyrics",