X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fusers%2Fuser.model.ts;h=3f6743befbd901435f3da560bc038973c931d22e;hb=ee8e602ef9761b4869e14d4d3ed24a2e18f22c65;hp=7a962ae3e424ea847a035ecb6e59e828e1d7eb03;hpb=7efe153b0bc23e596d5019b9fb3e3e32b6cfeccd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts index 7a962ae3e..3f6743bef 100644 --- a/client/src/app/shared/users/user.model.ts +++ b/client/src/app/shared/users/user.model.ts @@ -1,63 +1,147 @@ -import { hasUserRight, User as UserServerModel, UserRight, UserRole, VideoChannel } from '../../../../../shared' -import { Account } from '../account/account.model' - -export type UserConstructorHash = { - id: number, - username: string, - email: string, - role: UserRole, - videoQuota?: number, - displayNSFW?: boolean, - autoPlayVideo?: boolean, - createdAt?: Date, - account?: Account, - videoChannels?: VideoChannel[] -} +import { + hasUserRight, + User as UserServerModel, + UserNotificationSetting, + UserRight, + UserRole +} from '../../../../../shared/models/users' +import { VideoChannel } from '../../../../../shared/models/videos' +import { NSFWPolicyType } from '../../../../../shared/models/videos/nsfw-policy.type' +import { Account } from '@app/shared/account/account.model' +import { Avatar } from '../../../../../shared/models/avatars/avatar.model' +import { UserAdminFlag } from '@shared/models/users/user-flag.model' + export class User implements UserServerModel { + static KEYS = { + ID: 'id', + ROLE: 'role', + EMAIL: 'email', + VIDEOS_HISTORY_ENABLED: 'videos-history-enabled', + USERNAME: 'username', + NSFW_POLICY: 'nsfw_policy', + WEBTORRENT_ENABLED: 'peertube-videojs-' + 'webtorrent_enabled', + AUTO_PLAY_VIDEO: 'auto_play_video', + SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO: 'auto_play_next_video', + AUTO_PLAY_VIDEO_PLAYLIST: 'auto_play_video_playlist', + THEME: 'last_active_theme', + VIDEO_LANGUAGES: 'video_languages' + } + id: number username: string email: string - role: UserRole - displayNSFW: boolean + pendingEmail: string | null + + emailVerified: boolean + nsfwPolicy: NSFWPolicyType + + adminFlags?: UserAdminFlag + autoPlayVideo: boolean + autoPlayNextVideo: boolean + autoPlayNextVideoPlaylist: boolean + webTorrentEnabled: boolean + videosHistoryEnabled: boolean + videoLanguages: string[] + + role: UserRole + roleLabel: string + videoQuota: number + videoQuotaDaily: number + videoQuotaUsed?: number + videoQuotaUsedDaily?: number + videosCount?: number + videoAbusesCount?: number + videoAbusesAcceptedCount?: number + videoAbusesCreatedCount?: number + videoCommentsCount?: number + + theme: string + account: Account - videoChannels: VideoChannel[] + notificationSettings?: UserNotificationSetting + videoChannels?: VideoChannel[] + + blocked: boolean + blockedReason?: string + + noInstanceConfigWarningModal: boolean + noWelcomeModal: boolean + + pluginAuth: string | null + createdAt: Date - constructor (hash: UserConstructorHash) { + constructor (hash: Partial) { this.id = hash.id this.username = hash.username this.email = hash.email + this.role = hash.role - this.account = hash.account - if (hash.videoChannels !== undefined) { - this.videoChannels = hash.videoChannels - } + this.videoChannels = hash.videoChannels - if (hash.videoQuota !== undefined) { - this.videoQuota = hash.videoQuota - } + this.videoQuota = hash.videoQuota + this.videoQuotaDaily = hash.videoQuotaDaily + this.videoQuotaUsed = hash.videoQuotaUsed + this.videoQuotaUsedDaily = hash.videoQuotaUsedDaily + this.videosCount = hash.videosCount + this.videoAbusesCount = hash.videoAbusesCount + this.videoAbusesAcceptedCount = hash.videoAbusesAcceptedCount + this.videoAbusesCreatedCount = hash.videoAbusesCreatedCount + this.videoCommentsCount = hash.videoCommentsCount - if (hash.displayNSFW !== undefined) { - this.displayNSFW = hash.displayNSFW - } + this.nsfwPolicy = hash.nsfwPolicy + this.webTorrentEnabled = hash.webTorrentEnabled + this.autoPlayVideo = hash.autoPlayVideo + this.autoPlayNextVideo = hash.autoPlayNextVideo + this.autoPlayNextVideoPlaylist = hash.autoPlayNextVideoPlaylist + this.videosHistoryEnabled = hash.videosHistoryEnabled + this.videoLanguages = hash.videoLanguages - if (hash.autoPlayVideo !== undefined) { - this.autoPlayVideo = hash.autoPlayVideo - } + this.theme = hash.theme + + this.adminFlags = hash.adminFlags + + this.blocked = hash.blocked + this.blockedReason = hash.blockedReason + + this.noInstanceConfigWarningModal = hash.noInstanceConfigWarningModal + this.noWelcomeModal = hash.noWelcomeModal + + this.notificationSettings = hash.notificationSettings + + this.createdAt = hash.createdAt - if (hash.createdAt !== undefined) { - this.createdAt = hash.createdAt + this.pluginAuth = hash.pluginAuth + + if (hash.account !== undefined) { + this.account = new Account(hash.account) } } + get accountAvatarUrl () { + if (!this.account) return '' + + return this.account.avatarUrl + } + hasRight (right: UserRight) { return hasUserRight(this.role, right) } - getAvatarPath () { - return Account.GET_ACCOUNT_AVATAR_PATH(this.account) + patch (obj: UserServerModel) { + for (const key of Object.keys(obj)) { + this[key] = obj[key] + } + + if (obj.account !== undefined) { + this.account = new Account(obj.account) + } + } + + updateAccountAvatar (newAccountAvatar: Avatar) { + this.account.updateAvatar(newAccountAvatar) } }