From 24d3352ce4b48bc9ff15e8c0af0c93df6d903e5e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 25 Feb 2021 10:26:10 +0100 Subject: Fix anonymous user settings --- client/src/app/core/users/user.service.ts | 40 +++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/client/src/app/core/users/user.service.ts b/client/src/app/core/users/user.service.ts index f4850c3ba..16ea8aa1a 100644 --- a/client/src/app/core/users/user.service.ts +++ b/client/src/app/core/users/user.service.ts @@ -77,17 +77,34 @@ export class UserService { } updateMyAnonymousProfile (profile: UserUpdateMe) { - try { - this.localStorageService.setItem(UserLocalStorageKeys.NSFW_POLICY, profile.nsfwPolicy) - this.localStorageService.setItem(UserLocalStorageKeys.WEBTORRENT_ENABLED, profile.webTorrentEnabled) + const localStorageKeys: { [ id in keyof UserUpdateMe ]: string } = { + nsfwPolicy: UserLocalStorageKeys.NSFW_POLICY, + webTorrentEnabled: UserLocalStorageKeys.WEBTORRENT_ENABLED, + autoPlayNextVideo: UserLocalStorageKeys.AUTO_PLAY_VIDEO, + autoPlayNextVideoPlaylist: UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST, + theme: UserLocalStorageKeys.THEME, + videoLanguages: UserLocalStorageKeys.VIDEO_LANGUAGES + } - this.localStorageService.setItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO, profile.autoPlayNextVideo) - this.localStorageService.setItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST, profile.autoPlayNextVideoPlaylist) + const obj = Object.keys(localStorageKeys) + .filter(key => key in profile) + .map(key => ([ localStorageKeys[key], profile[key] ])) - this.localStorageService.setItem(UserLocalStorageKeys.THEME, profile.theme) - this.localStorageService.setItem(UserLocalStorageKeys.VIDEO_LANGUAGES, profile.videoLanguages) - } catch (err) { - console.error(`Cannot set item in localStorage. Likely due to a value impossible to stringify.`, err) + for (const [ key, value ] of obj) { + try { + if (!value) { + this.localStorageService.removeItem(key) + continue + } + + const localStorageValue = typeof value === 'string' + ? value + : JSON.stringify(value) + + this.localStorageService.setItem(key, localStorageValue) + } catch (err) { + console.error(`Cannot set ${key}->${value} in localStorage. Likely due to a value impossible to stringify.`, err) + } } } @@ -266,7 +283,10 @@ export class UserService { let videoLanguages: string[] try { - videoLanguages = JSON.parse(this.localStorageService.getItem(UserLocalStorageKeys.VIDEO_LANGUAGES)) + const languagesString = this.localStorageService.getItem(UserLocalStorageKeys.VIDEO_LANGUAGES) + videoLanguages = languagesString && languagesString !== 'undefined' + ? JSON.parse(languagesString) + : null } catch (err) { videoLanguages = null console.error('Cannot parse desired video languages from localStorage.', err) -- cgit v1.2.3