From 32a18cbf33a7cdbbe3d4885d32e4b67e19cdc1cf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 11 Mar 2021 16:54:52 +0100 Subject: Add new plugin/peertube version notifs --- server/models/account/user-notification.ts | 90 ++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 10 deletions(-) (limited to 'server/models/account/user-notification.ts') diff --git a/server/models/account/user-notification.ts b/server/models/account/user-notification.ts index add129644..25c523203 100644 --- a/server/models/account/user-notification.ts +++ b/server/models/account/user-notification.ts @@ -9,7 +9,9 @@ import { VideoAbuseModel } from '../abuse/video-abuse' import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse' import { ActorModel } from '../activitypub/actor' import { ActorFollowModel } from '../activitypub/actor-follow' +import { ApplicationModel } from '../application/application' import { AvatarModel } from '../avatar/avatar' +import { PluginModel } from '../server/plugin' import { ServerModel } from '../server/server' import { getSort, throwIfNotValid } from '../utils' import { VideoModel } from '../video/video' @@ -96,7 +98,7 @@ function buildAccountInclude (required: boolean, withActor = false) { attributes: [ 'id' ], model: VideoAbuseModel.unscoped(), required: false, - include: [ buildVideoInclude(true) ] + include: [ buildVideoInclude(false) ] }, { attributes: [ 'id' ], @@ -106,12 +108,12 @@ function buildAccountInclude (required: boolean, withActor = false) { { attributes: [ 'id', 'originCommentId' ], model: VideoCommentModel.unscoped(), - required: true, + required: false, include: [ { attributes: [ 'id', 'name', 'uuid' ], model: VideoModel.unscoped(), - required: true + required: false } ] } @@ -120,7 +122,7 @@ function buildAccountInclude (required: boolean, withActor = false) { { model: AccountModel, as: 'FlaggedAccount', - required: true, + required: false, include: [ buildActorWithAvatarInclude() ] } ] @@ -140,6 +142,18 @@ function buildAccountInclude (required: boolean, withActor = false) { include: [ buildVideoInclude(false) ] }, + { + attributes: [ 'id', 'name', 'type', 'latestVersion' ], + model: PluginModel.unscoped(), + required: false + }, + + { + attributes: [ 'id', 'latestPeerTubeVersion' ], + model: ApplicationModel.unscoped(), + required: false + }, + { attributes: [ 'id', 'state' ], model: ActorFollowModel.unscoped(), @@ -251,6 +265,22 @@ function buildAccountInclude (required: boolean, withActor = false) { [Op.ne]: null } } + }, + { + fields: [ 'pluginId' ], + where: { + pluginId: { + [Op.ne]: null + } + } + }, + { + fields: [ 'applicationId' ], + where: { + applicationId: { + [Op.ne]: null + } + } } ] as (ModelIndexesOptions & { where?: WhereOptions })[] }) @@ -370,6 +400,30 @@ export class UserNotificationModel extends Model { }) ActorFollow: ActorFollowModel + @ForeignKey(() => PluginModel) + @Column + pluginId: number + + @BelongsTo(() => PluginModel, { + foreignKey: { + allowNull: true + }, + onDelete: 'cascade' + }) + Plugin: PluginModel + + @ForeignKey(() => ApplicationModel) + @Column + applicationId: number + + @BelongsTo(() => ApplicationModel, { + foreignKey: { + allowNull: true + }, + onDelete: 'cascade' + }) + Application: ApplicationModel + static listForApi (userId: number, start: number, count: number, sort: string, unread?: boolean) { const where = { userId } @@ -524,6 +578,18 @@ export class UserNotificationModel extends Model { } : undefined + const plugin = this.Plugin + ? { + name: this.Plugin.name, + type: this.Plugin.type, + latestVersion: this.Plugin.latestVersion + } + : undefined + + const peertube = this.Application + ? { latestVersion: this.Application.latestPeerTubeVersion } + : undefined + return { id: this.id, type: this.type, @@ -535,6 +601,8 @@ export class UserNotificationModel extends Model { videoBlacklist, account, actorFollow, + plugin, + peertube, createdAt: this.createdAt.toISOString(), updatedAt: this.updatedAt.toISOString() } @@ -553,17 +621,19 @@ export class UserNotificationModel extends Model { ? { threadId: abuse.VideoCommentAbuse.VideoComment.getThreadId(), - video: { - id: abuse.VideoCommentAbuse.VideoComment.Video.id, - name: abuse.VideoCommentAbuse.VideoComment.Video.name, - uuid: abuse.VideoCommentAbuse.VideoComment.Video.uuid - } + video: abuse.VideoCommentAbuse.VideoComment.Video + ? { + id: abuse.VideoCommentAbuse.VideoComment.Video.id, + name: abuse.VideoCommentAbuse.VideoComment.Video.name, + uuid: abuse.VideoCommentAbuse.VideoComment.Video.uuid + } + : undefined } : undefined const videoAbuse = abuse.VideoAbuse?.Video ? this.formatVideo(abuse.VideoAbuse.Video) : undefined - const accountAbuse = (!commentAbuse && !videoAbuse) ? this.formatActor(abuse.FlaggedAccount) : undefined + const accountAbuse = (!commentAbuse && !videoAbuse && abuse.FlaggedAccount) ? this.formatActor(abuse.FlaggedAccount) : undefined return { id: abuse.id, -- cgit v1.2.3