import { DislikeObject, VideoAbuseObject, ViewObject } from '../../../../shared/models/activitypub/objects'
import { VideoCommentObject } from '../../../../shared/models/activitypub/objects/video-comment-object'
import { VideoRateType } from '../../../../shared/models/videos'
-import { logger, retryTransactionWrapper } from '../../../helpers'
+import { retryTransactionWrapper } from '../../../helpers/database-utils'
+import { logger } from '../../../helpers/logger'
import { sequelizeTypescript } from '../../../initializers'
import { AccountVideoRateModel } from '../../../models/account/account-video-rate'
import { ActorModel } from '../../../models/activitypub/actor'
import { getOrCreateActorAndServerAndModel } from '../actor'
import { forwardActivity } from '../send/misc'
import { generateThumbnailFromUrl } from '../videos'
-import { addVideoShares, videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from './misc'
+import { addVideoComments, addVideoShares, videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from './misc'
async function processCreateActivity (activity: ActivityCreate) {
const activityObject = activity.object
// Process outside the transaction because we could fetch remote data
if (videoToCreateData.likes && Array.isArray(videoToCreateData.likes.orderedItems)) {
+ logger.info('Adding likes of video %s.', video.uuid)
await createRates(videoToCreateData.likes.orderedItems, video, 'like')
}
if (videoToCreateData.dislikes && Array.isArray(videoToCreateData.dislikes.orderedItems)) {
+ logger.info('Adding dislikes of video %s.', video.uuid)
await createRates(videoToCreateData.dislikes.orderedItems, video, 'dislike')
}
if (videoToCreateData.shares && Array.isArray(videoToCreateData.shares.orderedItems)) {
+ logger.info('Adding shares of video %s.', video.uuid)
await addVideoShares(video, videoToCreateData.shares.orderedItems)
}
+ if (videoToCreateData.comments && Array.isArray(videoToCreateData.comments.orderedItems)) {
+ logger.info('Adding comments of video %s.', video.uuid)
+ await addVideoComments(video, videoToCreateData.comments.orderedItems)
+ }
+
return video
}
if (!byAccount) throw new Error('Cannot create video comment with the non account actor ' + byActor.url)
return sequelizeTypescript.transaction(async t => {
- const video = await VideoModel.loadByUrl(comment.inReplyTo, t)
+ let video = await VideoModel.loadByUrl(comment.inReplyTo, t)
// This is a new thread
if (video) {
- return VideoCommentModel.create({
+ await VideoCommentModel.create({
url: comment.id,
text: comment.content,
originCommentId: null,
inReplyToComment: null,
videoId: video.id,
- actorId: byActor.id
+ accountId: byAccount.id
+ }, { transaction: t })
+ } else {
+ const inReplyToComment = await VideoCommentModel.loadByUrl(comment.inReplyTo, t)
+ if (!inReplyToComment) throw new Error('Unknown replied comment ' + comment.inReplyTo)
+
+ video = await VideoModel.load(inReplyToComment.videoId)
+
+ const originCommentId = inReplyToComment.originCommentId || inReplyToComment.id
+ await VideoCommentModel.create({
+ url: comment.id,
+ text: comment.content,
+ originCommentId,
+ inReplyToCommentId: inReplyToComment.id,
+ videoId: video.id,
+ accountId: byAccount.id
}, { transaction: t })
}
- const inReplyToComment = await VideoCommentModel.loadByUrl(comment.inReplyTo, t)
- if (!inReplyToComment) throw new Error('Unknown replied comment ' + comment.inReplyTo)
-
- const originCommentId = inReplyToComment.originCommentId || inReplyToComment.id
- return VideoCommentModel.create({
- url: comment.id,
- text: comment.content,
- originCommentId,
- inReplyToCommentId: inReplyToComment.id,
- videoId: inReplyToComment.videoId,
- actorId: byActor.id
- }, { transaction: t })
+ if (video.isOwned()) {
+ // Don't resend the activity to the sender
+ const exceptions = [ byActor ]
+ await forwardActivity(activity, t, exceptions)
+ }
})
}