X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-main%2Fusers%2Fuser-notification.model.ts;h=88a4811da0681ec350e267bd1a789f3dcc3ccd1e;hb=32a18cbf33a7cdbbe3d4885d32e4b67e19cdc1cf;hp=61b48a8066ab64aaa971e03655fe1e2b704a98f0;hpb=2291a412d25bd139398ca9e7a5131d0c1e4ffd7d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/shared-main/users/user-notification.model.ts b/client/src/app/shared/shared-main/users/user-notification.model.ts index 61b48a806..88a4811da 100644 --- a/client/src/app/shared/shared-main/users/user-notification.model.ts +++ b/client/src/app/shared/shared-main/users/user-notification.model.ts @@ -1,5 +1,17 @@ -import { Actor } from '../account/actor.model' -import { ActorInfo, Avatar, FollowState, UserNotification as UserNotificationServer, UserNotificationType, VideoInfo } from '@shared/models' +import { AuthUser } from '@app/core' +import { Account } from '@app/shared/shared-main/account/account.model' +import { Actor } from '@app/shared/shared-main/account/actor.model' +import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model' +import { + AbuseState, + ActorInfo, + FollowState, + PluginType, + UserNotification as UserNotificationServer, + UserNotificationType, + UserRight, + VideoInfo +} from '@shared/models' export class UserNotification implements UserNotificationServer { id: number @@ -27,6 +39,7 @@ export class UserNotification implements UserNotificationServer { abuse?: { id: number + state: AbuseState video?: VideoInfo @@ -62,20 +75,41 @@ export class UserNotification implements UserNotificationServer { } } + plugin?: { + name: string + type: PluginType + latestVersion: string + } + + peertube?: { + latestVersion: string + } + createdAt: string updatedAt: string // Additional fields videoUrl?: string commentUrl?: any[] + abuseUrl?: string + abuseQueryParams?: { [id: string]: string } = {} + videoAutoBlacklistUrl?: string + accountUrl?: string + videoImportIdentifier?: string videoImportUrl?: string + instanceFollowUrl?: string - constructor (hash: UserNotificationServer) { + peertubeVersionLink?: string + + pluginUrl?: string + pluginQueryParams?: { [id: string]: string } = {} + + constructor (hash: UserNotificationServer, user: AuthUser) { this.id = hash.id this.type = hash.type this.read = hash.read @@ -84,22 +118,25 @@ export class UserNotification implements UserNotificationServer { // To prevent a notification popup crash in case of bug, wrap it inside a try/catch try { this.video = hash.video - if (this.video) this.setAvatarUrl(this.video.channel) + if (this.video) this.setVideoChannelAvatarUrl(this.video.channel) this.videoImport = hash.videoImport this.comment = hash.comment - if (this.comment) this.setAvatarUrl(this.comment.account) + if (this.comment) this.setAccountAvatarUrl(this.comment.account) this.abuse = hash.abuse this.videoBlacklist = hash.videoBlacklist this.account = hash.account - if (this.account) this.setAvatarUrl(this.account) + if (this.account) this.setAccountAvatarUrl(this.account) this.actorFollow = hash.actorFollow - if (this.actorFollow) this.setAvatarUrl(this.actorFollow.follower) + if (this.actorFollow) this.setAccountAvatarUrl(this.actorFollow.follower) + + this.plugin = hash.plugin + this.peertube = hash.peertube this.createdAt = hash.createdAt this.updatedAt = hash.updatedAt @@ -122,12 +159,25 @@ export class UserNotification implements UserNotificationServer { case UserNotificationType.NEW_ABUSE_FOR_MODERATORS: this.abuseUrl = '/admin/moderation/abuses/list' + this.abuseQueryParams.search = '#' + this.abuse.id if (this.abuse.video) this.videoUrl = this.buildVideoUrl(this.abuse.video) else if (this.abuse.comment) this.commentUrl = this.buildCommentUrl(this.abuse.comment) else if (this.abuse.account) this.accountUrl = this.buildAccountUrl(this.abuse.account) break + case UserNotificationType.ABUSE_STATE_CHANGE: + this.abuseUrl = '/my-account/abuses' + this.abuseQueryParams.search = '#' + this.abuse.id + break + + case UserNotificationType.ABUSE_NEW_MESSAGE: + this.abuseUrl = user.hasRight(UserRight.MANAGE_ABUSES) + ? '/admin/moderation/abuses/list' + : '/my-account/abuses' + this.abuseQueryParams.search = '#' + this.abuse.id + break + case UserNotificationType.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS: this.videoAutoBlacklistUrl = '/admin/moderation/video-auto-blacklist/list' // Backward compatibility where we did not assign videoBlacklist to this type of notification before @@ -171,6 +221,15 @@ export class UserNotification implements UserNotificationServer { case UserNotificationType.AUTO_INSTANCE_FOLLOWING: this.instanceFollowUrl = '/admin/follows/following-list' break + + case UserNotificationType.NEW_PEERTUBE_VERSION: + this.peertubeVersionLink = 'https://joinpeertube.org/news' + break + + case UserNotificationType.NEW_PLUGIN_VERSION: + this.pluginUrl = `/admin/plugins/list-installed` + this.pluginQueryParams.pluginType = this.plugin.type + '' + break } } catch (err) { this.type = null @@ -187,7 +246,7 @@ export class UserNotification implements UserNotificationServer { } private buildVideoImportUrl () { - return '/my-account/video-imports' + return '/my-library/video-imports' } private buildVideoImportIdentifier (videoImport: { targetUrl?: string, magnetUri?: string, torrentName?: string }) { @@ -198,7 +257,11 @@ export class UserNotification implements UserNotificationServer { return [ this.buildVideoUrl(comment.video), { threadId: comment.threadId } ] } - private setAvatarUrl (actor: { avatarUrl?: string, avatar?: { url?: string, path: string } }) { - actor.avatarUrl = Actor.GET_ACTOR_AVATAR_URL(actor) + private setAccountAvatarUrl (actor: { avatarUrl?: string, avatar?: { url?: string, path: string } }) { + actor.avatarUrl = Account.GET_ACTOR_AVATAR_URL(actor) + } + + private setVideoChannelAvatarUrl (actor: { avatarUrl?: string, avatar?: { url?: string, path: string } }) { + actor.avatarUrl = VideoChannel.GET_ACTOR_AVATAR_URL(actor) } }