]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/core/users/user.service.ts
Merge branch 'release/3.1.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / core / users / user.service.ts
index 99ed3b4078f697ee757cd2993ea10a9827cb3c20..33cc1f668d13138bdfb8412b1edc2d96e8fe4b69 100644 (file)
@@ -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 === undefined) {
+          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)
@@ -274,7 +294,7 @@ export class UserService {
 
     return new User({
       // local storage keys
-      nsfwPolicy: this.localStorageService.getItem(UserLocalStorageKeys.NSFW_POLICY) as NSFWPolicyType,
+      nsfwPolicy: this.localStorageService.getItem(UserLocalStorageKeys.NSFW_POLICY),
       webTorrentEnabled: this.localStorageService.getItem(UserLocalStorageKeys.WEBTORRENT_ENABLED) !== 'false',
       theme: this.localStorageService.getItem(UserLocalStorageKeys.THEME) || 'instance-default',
       videoLanguages,