diff --git a/src/components/toolbar/AppUserMenu.tsx b/src/components/toolbar/AppUserMenu.tsx index d62918bb57..3ac380e17e 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 d02bb8d1b1..3c4f7dea0f 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 2d6678c325..ee3b599249 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -132,6 +132,7 @@ "ButtonShutdown": "Shutdown", "ButtonSignIn": "Sign In", "ButtonSignOut": "Sign Out", + "ButtonSwitchUser": "Switch User", "ButtonExitApp": "Exit Application", "ButtonSpace": "Space", "ButtonSplit": "Split", @@ -485,6 +486,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",