diff options
Diffstat (limited to 'client/src/app')
-rw-r--r-- | client/src/app/+videos/+video-watch/recommendations/recommended-videos.component.ts | 12 | ||||
-rw-r--r-- | client/src/app/core/auth/auth-user.model.ts | 54 | ||||
-rw-r--r-- | client/src/app/core/theme/theme.service.ts | 16 | ||||
-rw-r--r-- | client/src/app/core/users/user.model.ts | 3 | ||||
-rw-r--r-- | client/src/app/core/users/user.service.ts | 55 |
5 files changed, 62 insertions, 78 deletions
diff --git a/client/src/app/+videos/+video-watch/recommendations/recommended-videos.component.ts b/client/src/app/+videos/+video-watch/recommendations/recommended-videos.component.ts index 016975341..d2372023f 100644 --- a/client/src/app/+videos/+video-watch/recommendations/recommended-videos.component.ts +++ b/client/src/app/+videos/+video-watch/recommendations/recommended-videos.component.ts | |||
@@ -7,6 +7,7 @@ import { VideoPlaylist } from '@app/shared/shared-video-playlist' | |||
7 | import { I18n } from '@ngx-translate/i18n-polyfill' | 7 | import { I18n } from '@ngx-translate/i18n-polyfill' |
8 | import { RecommendationInfo } from './recommendation-info.model' | 8 | import { RecommendationInfo } from './recommendation-info.model' |
9 | import { RecommendedVideosStore } from './recommended-videos.store' | 9 | import { RecommendedVideosStore } from './recommended-videos.store' |
10 | import { UserLocalStorageKeys } from '@root-helpers/users' | ||
10 | 11 | ||
11 | @Component({ | 12 | @Component({ |
12 | selector: 'my-recommended-videos', | 13 | selector: 'my-recommended-videos', |
@@ -48,9 +49,12 @@ export class RecommendedVideosComponent implements OnInit, OnChanges { | |||
48 | if (this.authService.isLoggedIn()) { | 49 | if (this.authService.isLoggedIn()) { |
49 | this.autoPlayNextVideo = this.authService.getUser().autoPlayNextVideo | 50 | this.autoPlayNextVideo = this.authService.getUser().autoPlayNextVideo |
50 | } else { | 51 | } else { |
51 | this.autoPlayNextVideo = this.sessionStorageService.getItem(User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' || false | 52 | this.autoPlayNextVideo = this.sessionStorageService.getItem(UserLocalStorageKeys.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' |
52 | this.sessionStorageService.watch([User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO]).subscribe( | 53 | |
53 | () => this.autoPlayNextVideo = this.sessionStorageService.getItem(User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' | 54 | this.sessionStorageService.watch([UserLocalStorageKeys.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO]).subscribe( |
55 | () => { | ||
56 | this.autoPlayNextVideo = this.sessionStorageService.getItem(UserLocalStorageKeys.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' | ||
57 | } | ||
54 | ) | 58 | ) |
55 | } | 59 | } |
56 | 60 | ||
@@ -73,7 +77,7 @@ export class RecommendedVideosComponent implements OnInit, OnChanges { | |||
73 | } | 77 | } |
74 | 78 | ||
75 | switchAutoPlayNextVideo () { | 79 | switchAutoPlayNextVideo () { |
76 | this.sessionStorageService.setItem(User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO, this.autoPlayNextVideo.toString()) | 80 | this.sessionStorageService.setItem(UserLocalStorageKeys.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO, this.autoPlayNextVideo.toString()) |
77 | 81 | ||
78 | if (this.authService.isLoggedIn()) { | 82 | if (this.authService.isLoggedIn()) { |
79 | const details = { | 83 | const details = { |
diff --git a/client/src/app/core/auth/auth-user.model.ts b/client/src/app/core/auth/auth-user.model.ts index 5679d28a9..34efa24fc 100644 --- a/client/src/app/core/auth/auth-user.model.ts +++ b/client/src/app/core/auth/auth-user.model.ts | |||
@@ -1,18 +1,22 @@ | |||
1 | import { Observable, of } from 'rxjs' | 1 | import { Observable, of } from 'rxjs' |
2 | import { map } from 'rxjs/operators' | 2 | import { map } from 'rxjs/operators' |
3 | import { User } from '@app/core/users/user.model' | 3 | import { User } from '@app/core/users/user.model' |
4 | import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' | 4 | import { |
5 | flushUserInfoFromLocalStorage, | ||
6 | getUserInfoFromLocalStorage, | ||
7 | saveUserInfoIntoLocalStorage, | ||
8 | TokenOptions, | ||
9 | Tokens | ||
10 | } from '@root-helpers/users' | ||
5 | import { hasUserRight } from '@shared/core-utils/users' | 11 | import { hasUserRight } from '@shared/core-utils/users' |
6 | import { | 12 | import { |
7 | MyUser as ServerMyUserModel, | 13 | MyUser as ServerMyUserModel, |
8 | MyUserSpecialPlaylist, | 14 | MyUserSpecialPlaylist, |
9 | NSFWPolicyType, | ||
10 | User as ServerUserModel, | 15 | User as ServerUserModel, |
11 | UserRight, | 16 | UserRight, |
12 | UserRole, | 17 | UserRole, |
13 | UserVideoQuota | 18 | UserVideoQuota |
14 | } from '@shared/models' | 19 | } from '@shared/models' |
15 | import { TokenOptions, Tokens } from '@root-helpers/pure-auth-user.model' | ||
16 | 20 | ||
17 | export class AuthUser extends User implements ServerMyUserModel { | 21 | export class AuthUser extends User implements ServerMyUserModel { |
18 | tokens: Tokens | 22 | tokens: Tokens |
@@ -21,31 +25,16 @@ export class AuthUser extends User implements ServerMyUserModel { | |||
21 | canSeeVideosLink = true | 25 | canSeeVideosLink = true |
22 | 26 | ||
23 | static load () { | 27 | static load () { |
24 | const usernameLocalStorage = peertubeLocalStorage.getItem(this.KEYS.USERNAME) | 28 | const userInfo = getUserInfoFromLocalStorage() |
25 | if (usernameLocalStorage) { | 29 | |
26 | return new AuthUser( | 30 | if (!userInfo) return null |
27 | { | ||
28 | id: parseInt(peertubeLocalStorage.getItem(this.KEYS.ID), 10), | ||
29 | username: peertubeLocalStorage.getItem(this.KEYS.USERNAME), | ||
30 | email: peertubeLocalStorage.getItem(this.KEYS.EMAIL), | ||
31 | role: parseInt(peertubeLocalStorage.getItem(this.KEYS.ROLE), 10) as UserRole, | ||
32 | nsfwPolicy: peertubeLocalStorage.getItem(this.KEYS.NSFW_POLICY) as NSFWPolicyType, | ||
33 | webTorrentEnabled: peertubeLocalStorage.getItem(this.KEYS.WEBTORRENT_ENABLED) === 'true', | ||
34 | autoPlayVideo: peertubeLocalStorage.getItem(this.KEYS.AUTO_PLAY_VIDEO) === 'true', | ||
35 | videosHistoryEnabled: peertubeLocalStorage.getItem(this.KEYS.VIDEOS_HISTORY_ENABLED) === 'true' | ||
36 | }, | ||
37 | Tokens.load() | ||
38 | ) | ||
39 | } | ||
40 | 31 | ||
41 | return null | 32 | return new AuthUser(userInfo, Tokens.load()) |
42 | } | 33 | } |
43 | 34 | ||
44 | static flush () { | 35 | static flush () { |
45 | peertubeLocalStorage.removeItem(this.KEYS.USERNAME) | 36 | flushUserInfoFromLocalStorage() |
46 | peertubeLocalStorage.removeItem(this.KEYS.ID) | 37 | |
47 | peertubeLocalStorage.removeItem(this.KEYS.ROLE) | ||
48 | peertubeLocalStorage.removeItem(this.KEYS.EMAIL) | ||
49 | Tokens.flush() | 38 | Tokens.flush() |
50 | } | 39 | } |
51 | 40 | ||
@@ -87,13 +76,16 @@ export class AuthUser extends User implements ServerMyUserModel { | |||
87 | } | 76 | } |
88 | 77 | ||
89 | save () { | 78 | save () { |
90 | peertubeLocalStorage.setItem(AuthUser.KEYS.ID, this.id.toString()) | 79 | saveUserInfoIntoLocalStorage({ |
91 | peertubeLocalStorage.setItem(AuthUser.KEYS.USERNAME, this.username) | 80 | id: this.id, |
92 | peertubeLocalStorage.setItem(AuthUser.KEYS.EMAIL, this.email) | 81 | username: this.username, |
93 | peertubeLocalStorage.setItem(AuthUser.KEYS.ROLE, this.role.toString()) | 82 | email: this.email, |
94 | peertubeLocalStorage.setItem(AuthUser.KEYS.NSFW_POLICY, this.nsfwPolicy.toString()) | 83 | role: this.role, |
95 | peertubeLocalStorage.setItem(AuthUser.KEYS.WEBTORRENT_ENABLED, JSON.stringify(this.webTorrentEnabled)) | 84 | nsfwPolicy: this.nsfwPolicy, |
96 | peertubeLocalStorage.setItem(AuthUser.KEYS.AUTO_PLAY_VIDEO, JSON.stringify(this.autoPlayVideo)) | 85 | webTorrentEnabled: this.webTorrentEnabled, |
86 | autoPlayVideo: this.autoPlayVideo | ||
87 | }) | ||
88 | |||
97 | this.tokens.save() | 89 | this.tokens.save() |
98 | } | 90 | } |
99 | 91 | ||
diff --git a/client/src/app/core/theme/theme.service.ts b/client/src/app/core/theme/theme.service.ts index 7e05fdddd..4c4611d01 100644 --- a/client/src/app/core/theme/theme.service.ts +++ b/client/src/app/core/theme/theme.service.ts | |||
@@ -1,13 +1,13 @@ | |||
1 | import { first } from 'rxjs/operators' | 1 | import { first } from 'rxjs/operators' |
2 | import { Injectable } from '@angular/core' | 2 | import { Injectable } from '@angular/core' |
3 | import { UserLocalStorageKeys } from '@root-helpers/users' | ||
4 | import { ServerConfig, ServerConfigTheme } from '@shared/models' | ||
5 | import { environment } from '../../../environments/environment' | ||
3 | import { AuthService } from '../auth' | 6 | import { AuthService } from '../auth' |
4 | import { PluginService } from '../plugins/plugin.service' | 7 | import { PluginService } from '../plugins/plugin.service' |
5 | import { ServerService } from '../server' | 8 | import { ServerService } from '../server' |
6 | import { LocalStorageService } from '../wrappers/storage.service' | ||
7 | import { User } from '../users/user.model' | ||
8 | import { UserService } from '../users/user.service' | 9 | import { UserService } from '../users/user.service' |
9 | import { ServerConfig, ServerConfigTheme } from '@shared/models' | 10 | import { LocalStorageService } from '../wrappers/storage.service' |
10 | import { environment } from '../../../environments/environment' | ||
11 | 11 | ||
12 | @Injectable() | 12 | @Injectable() |
13 | export class ThemeService { | 13 | export class ThemeService { |
@@ -111,9 +111,9 @@ export class ThemeService { | |||
111 | 111 | ||
112 | this.pluginService.reloadLoadedScopes() | 112 | this.pluginService.reloadLoadedScopes() |
113 | 113 | ||
114 | this.localStorageService.setItem(User.KEYS.LAST_ACTIVE_THEME, JSON.stringify(theme), false) | 114 | this.localStorageService.setItem(UserLocalStorageKeys.LAST_ACTIVE_THEME, JSON.stringify(theme), false) |
115 | } else { | 115 | } else { |
116 | this.localStorageService.removeItem(User.KEYS.LAST_ACTIVE_THEME, false) | 116 | this.localStorageService.removeItem(UserLocalStorageKeys.LAST_ACTIVE_THEME, false) |
117 | } | 117 | } |
118 | 118 | ||
119 | this.oldThemeName = currentTheme | 119 | this.oldThemeName = currentTheme |
@@ -127,7 +127,7 @@ export class ThemeService { | |||
127 | if (!this.auth.isLoggedIn()) { | 127 | if (!this.auth.isLoggedIn()) { |
128 | this.updateCurrentTheme() | 128 | this.updateCurrentTheme() |
129 | 129 | ||
130 | this.localStorageService.watch([ User.KEYS.THEME ]).subscribe( | 130 | this.localStorageService.watch([ UserLocalStorageKeys.THEME ]).subscribe( |
131 | () => this.updateCurrentTheme() | 131 | () => this.updateCurrentTheme() |
132 | ) | 132 | ) |
133 | } | 133 | } |
@@ -138,7 +138,7 @@ export class ThemeService { | |||
138 | } | 138 | } |
139 | 139 | ||
140 | private loadAndSetFromLocalStorage () { | 140 | private loadAndSetFromLocalStorage () { |
141 | const lastActiveThemeString = this.localStorageService.getItem(User.KEYS.LAST_ACTIVE_THEME) | 141 | const lastActiveThemeString = this.localStorageService.getItem(UserLocalStorageKeys.LAST_ACTIVE_THEME) |
142 | if (!lastActiveThemeString) return | 142 | if (!lastActiveThemeString) return |
143 | 143 | ||
144 | try { | 144 | try { |
diff --git a/client/src/app/core/users/user.model.ts b/client/src/app/core/users/user.model.ts index f0d3a08b8..7c9569ed4 100644 --- a/client/src/app/core/users/user.model.ts +++ b/client/src/app/core/users/user.model.ts | |||
@@ -10,11 +10,8 @@ import { | |||
10 | UserRole, | 10 | UserRole, |
11 | VideoChannel | 11 | VideoChannel |
12 | } from '@shared/models' | 12 | } from '@shared/models' |
13 | import { UserKeys } from '@root-helpers/user-keys' | ||
14 | 13 | ||
15 | export class User implements UserServerModel { | 14 | export class User implements UserServerModel { |
16 | static KEYS = UserKeys | ||
17 | |||
18 | id: number | 15 | id: number |
19 | username: string | 16 | username: string |
20 | email: string | 17 | email: string |
diff --git a/client/src/app/core/users/user.service.ts b/client/src/app/core/users/user.service.ts index c98b3844c..aac2a0206 100644 --- a/client/src/app/core/users/user.service.ts +++ b/client/src/app/core/users/user.service.ts | |||
@@ -1,4 +1,3 @@ | |||
1 | import { has } from 'lodash-es' | ||
2 | import { BytesPipe } from 'ngx-pipes' | 1 | import { BytesPipe } from 'ngx-pipes' |
3 | import { SortMeta } from 'primeng/api' | 2 | import { SortMeta } from 'primeng/api' |
4 | import { from, Observable, of } from 'rxjs' | 3 | import { from, Observable, of } from 'rxjs' |
@@ -7,6 +6,7 @@ import { HttpClient, HttpParams } from '@angular/common/http' | |||
7 | import { Injectable } from '@angular/core' | 6 | import { Injectable } from '@angular/core' |
8 | import { AuthService } from '@app/core/auth' | 7 | import { AuthService } from '@app/core/auth' |
9 | import { I18n } from '@ngx-translate/i18n-polyfill' | 8 | import { I18n } from '@ngx-translate/i18n-polyfill' |
9 | import { UserLocalStorageKeys } from '@root-helpers/users' | ||
10 | import { | 10 | import { |
11 | Avatar, | 11 | Avatar, |
12 | NSFWPolicyType, | 12 | NSFWPolicyType, |
@@ -81,37 +81,28 @@ export class UserService { | |||
81 | } | 81 | } |
82 | 82 | ||
83 | updateMyAnonymousProfile (profile: UserUpdateMe) { | 83 | updateMyAnonymousProfile (profile: UserUpdateMe) { |
84 | const supportedKeys = { | 84 | try { |
85 | // local storage keys | 85 | this.localStorageService.setItem(UserLocalStorageKeys.NSFW_POLICY, profile.nsfwPolicy) |
86 | nsfwPolicy: (val: NSFWPolicyType) => this.localStorageService.setItem(User.KEYS.NSFW_POLICY, val), | 86 | this.localStorageService.setItem(UserLocalStorageKeys.WEBTORRENT_ENABLED, profile.webTorrentEnabled) |
87 | webTorrentEnabled: (val: boolean) => this.localStorageService.setItem(User.KEYS.WEBTORRENT_ENABLED, String(val)), | ||
88 | autoPlayVideo: (val: boolean) => this.localStorageService.setItem(User.KEYS.AUTO_PLAY_VIDEO, String(val)), | ||
89 | autoPlayNextVideoPlaylist: (val: boolean) => this.localStorageService.setItem(User.KEYS.AUTO_PLAY_VIDEO_PLAYLIST, String(val)), | ||
90 | theme: (val: string) => this.localStorageService.setItem(User.KEYS.THEME, val), | ||
91 | videoLanguages: (val: string[]) => this.localStorageService.setItem(User.KEYS.VIDEO_LANGUAGES, JSON.stringify(val)), | ||
92 | 87 | ||
93 | // session storage keys | 88 | this.localStorageService.setItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO, profile.autoPlayNextVideo) |
94 | autoPlayNextVideo: (val: boolean) => | 89 | this.localStorageService.setItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST, profile.autoPlayNextVideoPlaylist) |
95 | this.sessionStorageService.setItem(User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO, String(val)) | ||
96 | } | ||
97 | 90 | ||
98 | for (const key of Object.keys(profile)) { | 91 | this.localStorageService.setItem(UserLocalStorageKeys.THEME, profile.theme) |
99 | try { | 92 | this.localStorageService.setItem(UserLocalStorageKeys.VIDEO_LANGUAGES, profile.videoLanguages) |
100 | if (has(supportedKeys, key)) supportedKeys[key](profile[key]) | 93 | } catch (err) { |
101 | } catch (err) { | 94 | console.error(`Cannot set item in localStorage. Likely due to a value impossible to stringify.`, err) |
102 | console.error(`Cannot set item ${key} in localStorage. Likely due to a value impossible to stringify.`, err) | ||
103 | } | ||
104 | } | 95 | } |
105 | } | 96 | } |
106 | 97 | ||
107 | listenAnonymousUpdate () { | 98 | listenAnonymousUpdate () { |
108 | return this.localStorageService.watch([ | 99 | return this.localStorageService.watch([ |
109 | User.KEYS.NSFW_POLICY, | 100 | UserLocalStorageKeys.NSFW_POLICY, |
110 | User.KEYS.WEBTORRENT_ENABLED, | 101 | UserLocalStorageKeys.WEBTORRENT_ENABLED, |
111 | User.KEYS.AUTO_PLAY_VIDEO, | 102 | UserLocalStorageKeys.AUTO_PLAY_VIDEO, |
112 | User.KEYS.AUTO_PLAY_VIDEO_PLAYLIST, | 103 | UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST, |
113 | User.KEYS.THEME, | 104 | UserLocalStorageKeys.THEME, |
114 | User.KEYS.VIDEO_LANGUAGES | 105 | UserLocalStorageKeys.VIDEO_LANGUAGES |
115 | ]).pipe( | 106 | ]).pipe( |
116 | throttleTime(200), | 107 | throttleTime(200), |
117 | filter(() => this.authService.isLoggedIn() !== true), | 108 | filter(() => this.authService.isLoggedIn() !== true), |
@@ -269,7 +260,7 @@ export class UserService { | |||
269 | let videoLanguages: string[] | 260 | let videoLanguages: string[] |
270 | 261 | ||
271 | try { | 262 | try { |
272 | videoLanguages = JSON.parse(this.localStorageService.getItem(User.KEYS.VIDEO_LANGUAGES)) | 263 | videoLanguages = JSON.parse(this.localStorageService.getItem(UserLocalStorageKeys.VIDEO_LANGUAGES)) |
273 | } catch (err) { | 264 | } catch (err) { |
274 | videoLanguages = null | 265 | videoLanguages = null |
275 | console.error('Cannot parse desired video languages from localStorage.', err) | 266 | console.error('Cannot parse desired video languages from localStorage.', err) |
@@ -277,16 +268,16 @@ export class UserService { | |||
277 | 268 | ||
278 | return new User({ | 269 | return new User({ |
279 | // local storage keys | 270 | // local storage keys |
280 | nsfwPolicy: this.localStorageService.getItem(User.KEYS.NSFW_POLICY) as NSFWPolicyType, | 271 | nsfwPolicy: this.localStorageService.getItem(UserLocalStorageKeys.NSFW_POLICY) as NSFWPolicyType, |
281 | webTorrentEnabled: this.localStorageService.getItem(User.KEYS.WEBTORRENT_ENABLED) !== 'false', | 272 | webTorrentEnabled: this.localStorageService.getItem(UserLocalStorageKeys.WEBTORRENT_ENABLED) !== 'false', |
282 | theme: this.localStorageService.getItem(User.KEYS.THEME) || 'instance-default', | 273 | theme: this.localStorageService.getItem(UserLocalStorageKeys.THEME) || 'instance-default', |
283 | videoLanguages, | 274 | videoLanguages, |
284 | 275 | ||
285 | autoPlayNextVideoPlaylist: this.localStorageService.getItem(User.KEYS.AUTO_PLAY_VIDEO_PLAYLIST) !== 'false', | 276 | autoPlayNextVideoPlaylist: this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST) !== 'false', |
286 | autoPlayVideo: this.localStorageService.getItem(User.KEYS.AUTO_PLAY_VIDEO) === 'true', | 277 | autoPlayVideo: this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO) === 'true', |
287 | 278 | ||
288 | // session storage keys | 279 | // session storage keys |
289 | autoPlayNextVideo: this.sessionStorageService.getItem(User.KEYS.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' | 280 | autoPlayNextVideo: this.sessionStorageService.getItem(UserLocalStorageKeys.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true' |
290 | }) | 281 | }) |
291 | } | 282 | } |
292 | 283 | ||