import { HttpClient, HttpParams } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { AuthService } from '@app/core/auth'
-import { BytesPipe } from '@app/shared/shared-main'
+import { getBytes } from '@root-helpers/bytes'
import { UserLocalStorageKeys } from '@root-helpers/users'
import {
Avatar,
export class UserService {
static BASE_USERS_URL = environment.apiUrl + '/api/v1/users/'
- private bytesPipe = new BytesPipe()
-
private userCache: { [ id: number ]: Observable<UserServerModel> } = {}
constructor (
}
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)
+ }
}
}
.pipe(catchError(err => this.restExtractor.handleError(err)))
}
+ deleteAvatar () {
+ const url = UserService.BASE_USERS_URL + 'me/avatar'
+
+ return this.authHttp.delete(url)
+ .pipe(
+ map(this.restExtractor.extractDataBool),
+ catchError(err => this.restExtractor.handleError(err))
+ )
+ }
+
signup (userCreate: UserRegister) {
return this.authHttp.post(UserService.BASE_USERS_URL + 'register', userCreate)
.pipe(
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)
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,
if (user.videoQuota === -1) {
videoQuota = '∞'
} else {
- videoQuota = this.bytesPipe.transform(user.videoQuota, 0)
+ videoQuota = getBytes(user.videoQuota, 0)
}
- const videoQuotaUsed = this.bytesPipe.transform(user.videoQuotaUsed, 0)
+ const videoQuotaUsed = getBytes(user.videoQuotaUsed, 0)
let videoQuotaDaily: string
let videoQuotaUsedDaily: string
if (user.videoQuotaDaily === -1) {
videoQuotaDaily = '∞'
- videoQuotaUsedDaily = this.bytesPipe.transform(0, 0) + ''
+ videoQuotaUsedDaily = getBytes(0, 0) + ''
} else {
- videoQuotaDaily = this.bytesPipe.transform(user.videoQuotaDaily, 0) + ''
- videoQuotaUsedDaily = this.bytesPipe.transform(user.videoQuotaUsedDaily || 0, 0) + ''
+ videoQuotaDaily = getBytes(user.videoQuotaDaily, 0) + ''
+ videoQuotaUsedDaily = getBytes(user.videoQuotaUsedDaily || 0, 0) + ''
}
const roleLabels: { [ id in UserRole ]: string } = {