]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-comment.ts
Fix RSS feed when HLS only is enabled
[github/Chocobozzz/PeerTube.git] / server / models / video / video-comment.ts
index fb6078ed889411496331fda3be8118b0fb547b05..de27b3d875fb3745682f5a056405162b5298f85f 100644 (file)
@@ -1,9 +1,8 @@
 import * as Bluebird from 'bluebird'
 import { uniq } from 'lodash'
-import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction } from 'sequelize'
+import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction, WhereOptions } from 'sequelize'
 import {
   AllowNull,
-  BeforeDestroy,
   BelongsTo,
   Column,
   CreatedAt,
@@ -16,7 +15,6 @@ import {
   Table,
   UpdatedAt
 } from 'sequelize-typescript'
-import { logger } from '@server/helpers/logger'
 import { getServerActor } from '@server/models/application/application'
 import { MAccount, MAccountId, MUserAccountId } from '@server/types/models'
 import { VideoPrivacy } from '@shared/models'
@@ -42,11 +40,11 @@ import {
 import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse'
 import { AccountModel } from '../account/account'
 import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
-import { buildBlockedAccountSQL, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
+import { buildBlockedAccountSQL, buildBlockedAccountSQLOptimized, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
 import { VideoModel } from './video'
 import { VideoChannelModel } from './video-channel'
 
-enum ScopeNames {
+export enum ScopeNames {
   WITH_ACCOUNT = 'WITH_ACCOUNT',
   WITH_ACCOUNT_FOR_API = 'WITH_ACCOUNT_FOR_API',
   WITH_IN_REPLY_TO = 'WITH_IN_REPLY_TO',
@@ -242,51 +240,13 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
 
   @HasMany(() => VideoCommentAbuseModel, {
     foreignKey: {
-      name: 'commentId',
+      name: 'videoCommentId',
       allowNull: true
     },
     onDelete: 'set null'
   })
   CommentAbuses: VideoCommentAbuseModel[]
 
-  @BeforeDestroy
-  static async saveEssentialDataToAbuses (instance: VideoCommentModel, options) {
-    const tasks: Promise<any>[] = []
-
-    if (!Array.isArray(instance.CommentAbuses)) {
-      instance.CommentAbuses = await instance.$get('CommentAbuses')
-
-      if (instance.CommentAbuses.length === 0) return undefined
-    }
-
-    if (!instance.Video) {
-      instance.Video = await instance.$get('Video')
-    }
-
-    logger.info('Saving video comment %s for abuse.', instance.url)
-
-    const details = Object.assign(instance.toFormattedJSON(), {
-      Video: {
-        id: instance.Video.id,
-        name: instance.Video.name,
-        uuid: instance.Video.uuid
-      }
-    })
-
-    for (const abuse of instance.CommentAbuses) {
-      abuse.deletedComment = details
-
-      tasks.push(abuse.save({ transaction: options.transaction }))
-    }
-
-    Promise.all(tasks)
-           .catch(err => {
-             logger.error('Some errors when saving details of comment %s in its abuses before destroy hook.', instance.url, { err })
-           })
-
-    return undefined
-  }
-
   static loadById (id: number, t?: Transaction): Bluebird<MComment> {
     const query: FindOptions = {
       where: {
@@ -500,19 +460,20 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
     const serverActor = await getServerActor()
     const { start, count, videoId, accountId, videoChannelId } = parameters
 
-    const accountExclusion = {
-      [Op.notIn]: Sequelize.literal(
-        '(' + buildBlockedAccountSQL([ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]) + ')'
-      )
+    const whereAnd: WhereOptions[] = buildBlockedAccountSQLOptimized(
+      '"VideoCommentModel"."accountId"',
+      [ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]
+    )
+
+    if (accountId) {
+      whereAnd.push({
+        [Op.eq]: accountId
+      })
+    }
+
+    const accountWhere = {
+      [Op.and]: whereAnd
     }
-    const accountWhere = accountId
-      ? {
-        [Op.and]: {
-          ...accountExclusion,
-          [Op.eq]: accountId
-        }
-      }
-      : accountExclusion
 
     const videoChannelWhere = videoChannelId ? { id: videoChannelId } : undefined
 
@@ -695,7 +656,7 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
       id: this.id,
       url: this.url,
       text: this.text,
-      threadId: this.originCommentId || this.id,
+      threadId: this.getThreadId(),
       inReplyToCommentId: this.inReplyToCommentId || null,
       videoId: this.videoId,
       createdAt: this.createdAt,