X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fprocess%2Fprocess-create.ts;h=791148919f2958c2e1a6e9528543cbb478d2962d;hb=268eebed921ac13a9ce0f4717f4923aa24190657;hp=08d61996a2ff7bac2bfe08cb689b8b037f33c158;hpb=2ccaeeb341ffe8c2609039bf4c6d8835b4650316;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/process/process-create.ts b/server/lib/activitypub/process/process-create.ts index 08d61996a..791148919 100644 --- a/server/lib/activitypub/process/process-create.ts +++ b/server/lib/activitypub/process/process-create.ts @@ -1,20 +1,17 @@ -import * as Bluebird from 'bluebird' -import { ActivityCreate, VideoTorrentObject } from '../../../../shared' +import { ActivityCreate, VideoAbuseState, VideoTorrentObject } from '../../../../shared' 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 { 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 { VideoModel } from '../../../models/video/video' import { VideoAbuseModel } from '../../../models/video/video-abuse' import { VideoCommentModel } from '../../../models/video/video-comment' import { getOrCreateActorAndServerAndModel } from '../actor' -import { forwardActivity, getActorsInvolvedInVideo } from '../send/misc' -import { addVideoComments, resolveThread } from '../video-comments' -import { addVideoShares, getOrCreateAccountAndVideoAndChannel } from '../videos' +import { resolveThread } from '../video-comments' +import { getOrCreateAccountAndVideoAndChannel } from '../videos' +import { forwardActivity, forwardVideoRelatedActivity } from '../send/utils' async function processCreateActivity (activity: ActivityCreate) { const activityObject = activity.object @@ -24,13 +21,13 @@ async function processCreateActivity (activity: ActivityCreate) { if (activityType === 'View') { return processCreateView(actor, activity) } else if (activityType === 'Dislike') { - return processCreateDislike(actor, activity) + return retryTransactionWrapper(processCreateDislike, actor, activity) } else if (activityType === 'Video') { return processCreateVideo(actor, activity) } else if (activityType === 'Flag') { - return processCreateVideoAbuse(actor, activityObject as VideoAbuseObject) + return retryTransactionWrapper(processCreateVideoAbuse, actor, activityObject as VideoAbuseObject) } else if (activityType === 'Note') { - return processCreateVideoComment(actor, activity) + return retryTransactionWrapper(processCreateVideoComment, actor, activity) } logger.warn('Unknown activity object type %s when creating activity.', activityType, { activity: activity.id }) @@ -53,67 +50,10 @@ async function processCreateVideo ( const { video } = await getOrCreateAccountAndVideoAndChannel(videoToCreateData, actor) - // 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 } -async function createRates (actorUrls: string[], video: VideoModel, rate: VideoRateType) { - let rateCounts = 0 - const tasks: Bluebird[] = [] - - for (const actorUrl of actorUrls) { - const actor = await getOrCreateActorAndServerAndModel(actorUrl) - const p = AccountVideoRateModel - .create({ - videoId: video.id, - accountId: actor.Account.id, - type: rate - }) - .then(() => rateCounts += 1) - - tasks.push(p) - } - - await Promise.all(tasks) - - logger.info('Adding %d %s to video %s.', rateCounts, rate, video.uuid) - - // This is "likes" and "dislikes" - await video.increment(rate + 's', { by: rateCounts }) - - return -} - async function processCreateDislike (byActor: ActorModel, activity: ActivityCreate) { - const options = { - arguments: [ byActor, activity ], - errorMessage: 'Cannot dislike the video with many retries.' - } - - return retryTransactionWrapper(createVideoDislike, options) -} - -async function createVideoDislike (byActor: ActorModel, activity: ActivityCreate) { const dislike = activity.object as DislikeObject const byAccount = byActor.Account @@ -137,7 +77,8 @@ async function createVideoDislike (byActor: ActorModel, activity: ActivityCreate if (video.isOwned() && created === true) { // Don't resend the activity to the sender const exceptions = [ byActor ] - await forwardActivity(activity, t, exceptions) + + await forwardVideoRelatedActivity(activity, t, exceptions, video) } }) } @@ -147,8 +88,8 @@ async function processCreateView (byActor: ActorModel, activity: ActivityCreate) const { video } = await getOrCreateAccountAndVideoAndChannel(view.object) - const account = await ActorModel.loadByUrl(view.actor) - if (!account) throw new Error('Unknown account ' + view.actor) + const actor = await ActorModel.loadByUrl(view.actor) + if (!actor) throw new Error('Unknown actor ' + view.actor) await video.increment('views') @@ -159,16 +100,7 @@ async function processCreateView (byActor: ActorModel, activity: ActivityCreate) } } -function processCreateVideoAbuse (actor: ActorModel, videoAbuseToCreateData: VideoAbuseObject) { - const options = { - arguments: [ actor, videoAbuseToCreateData ], - errorMessage: 'Cannot insert the remote video abuse with many retries.' - } - - return retryTransactionWrapper(addRemoteVideoAbuse, options) -} - -async function addRemoteVideoAbuse (actor: ActorModel, videoAbuseToCreateData: VideoAbuseObject) { +async function processCreateVideoAbuse (actor: ActorModel, videoAbuseToCreateData: VideoAbuseObject) { logger.debug('Reporting remote abuse for video %s.', videoAbuseToCreateData.object) const account = actor.Account @@ -180,7 +112,8 @@ async function addRemoteVideoAbuse (actor: ActorModel, videoAbuseToCreateData: V const videoAbuseData = { reporterAccountId: account.id, reason: videoAbuseToCreateData.content, - videoId: video.id + videoId: video.id, + state: VideoAbuseState.PENDING } await VideoAbuseModel.create(videoAbuseData) @@ -189,16 +122,7 @@ async function addRemoteVideoAbuse (actor: ActorModel, videoAbuseToCreateData: V }) } -function processCreateVideoComment (byActor: ActorModel, activity: ActivityCreate) { - const options = { - arguments: [ byActor, activity ], - errorMessage: 'Cannot create video comment with many retries.' - } - - return retryTransactionWrapper(createVideoComment, options) -} - -async function createVideoComment (byActor: ActorModel, activity: ActivityCreate) { +async function processCreateVideoComment (byActor: ActorModel, activity: ActivityCreate) { const comment = activity.object as VideoCommentObject const byAccount = byActor.Account @@ -240,11 +164,7 @@ async function createVideoComment (byActor: ActorModel, activity: ActivityCreate // Don't resend the activity to the sender const exceptions = [ byActor ] - // Mastodon does not add our announces in audience, so we forward to them manually - const additionalActors = await getActorsInvolvedInVideo(video, t) - const additionalFollowerUrls = additionalActors.map(a => a.followersUrl) - - await forwardActivity(activity, t, exceptions, additionalFollowerUrls) + await forwardVideoRelatedActivity(activity, t, exceptions, video) } }) }