X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-comment.ts;h=449aa74cb10a1f503bf48e58fd6229078c380f1f;hb=970ceac0a6bf4990b8924738591df4949491ec9b;hp=edb72d4e2c9698f7ed16c3a30be77d781d957128;hpb=bf1f650817dadfd5eeee9e5e0b6b6938c136e25d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-comment.ts b/server/lib/video-comment.ts index edb72d4e2..449aa74cb 100644 --- a/server/lib/video-comment.ts +++ b/server/lib/video-comment.ts @@ -1,43 +1,53 @@ import * as Sequelize from 'sequelize' import { ResultList } from '../../shared/models' -import { VideoCommentThread } from '../../shared/models/videos/video-comment.model' +import { VideoCommentThreadTree } from '../../shared/models/videos/video-comment.model' +import { AccountModel } from '../models/account/account' import { VideoModel } from '../models/video/video' import { VideoCommentModel } from '../models/video/video-comment' import { getVideoCommentActivityPubUrl } from './activitypub' +import { sendCreateVideoComment } from './activitypub/send' async function createVideoComment (obj: { text: string, - inReplyToComment: number, + inReplyToComment: VideoCommentModel | null, video: VideoModel - actorId: number + account: AccountModel }, t: Sequelize.Transaction) { - let originCommentId: number = null - if (obj.inReplyToComment) { - const repliedComment = await VideoCommentModel.loadById(obj.inReplyToComment) - if (!repliedComment) throw new Error('Unknown replied comment.') + let originCommentId: number | null = null + let inReplyToCommentId: number | null = null - originCommentId = repliedComment.originCommentId || repliedComment.id + if (obj.inReplyToComment && obj.inReplyToComment !== null) { + originCommentId = obj.inReplyToComment.originCommentId || obj.inReplyToComment.id + inReplyToCommentId = obj.inReplyToComment.id } const comment = await VideoCommentModel.create({ text: obj.text, originCommentId, - inReplyToComment: obj.inReplyToComment, + inReplyToCommentId, videoId: obj.video.id, - actorId: obj.actorId - }, { transaction: t }) + accountId: obj.account.id, + url: new Date().toISOString() + }, { transaction: t, validate: false }) - comment.set('url', getVideoCommentActivityPubUrl(obj.video, comment)) + comment.url = getVideoCommentActivityPubUrl(obj.video, comment) - return comment.save({ transaction: t }) + const savedComment = await comment.save({ transaction: t }) + savedComment.InReplyToVideoComment = obj.inReplyToComment + savedComment.Video = obj.video + savedComment.Account = obj.account + + await sendCreateVideoComment(savedComment, t) + + return savedComment } -function buildFormattedCommentTree (resultList: ResultList): VideoCommentThread { +function buildFormattedCommentTree (resultList: ResultList): VideoCommentThreadTree { // Comments are sorted by id ASC const comments = resultList.data const comment = comments.shift() - const thread: VideoCommentThread = { + const thread: VideoCommentThreadTree = { comment: comment.toFormattedJSON(), children: [] } @@ -48,16 +58,14 @@ function buildFormattedCommentTree (resultList: ResultList): while (comments.length !== 0) { const childComment = comments.shift() - const childCommentThread: VideoCommentThread = { + const childCommentThread: VideoCommentThreadTree = { comment: childComment.toFormattedJSON(), children: [] } const parentCommentThread = idx[childComment.inReplyToCommentId] - if (!parentCommentThread) { - const msg = `Cannot format video thread tree, parent ${childComment.inReplyToCommentId} not found for child ${childComment.id}` - throw new Error(msg) - } + // Maybe the parent comment was blocked by the admin/user + if (!parentCommentThread) continue parentCommentThread.children.push(childCommentThread) idx[childComment.id] = childCommentThread