]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/activitypub/process/process-announce.ts
Fetch remote AP objects
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / process / process-announce.ts
index 5568ff538d21ae7f9e290d6627fe6c09ca33da8d..bf7d7879db440b91556b01a164e495785dd32b9e 100644 (file)
@@ -1,11 +1,13 @@
-import { ActivityAnnounce, ActivityCreate } from '../../../../shared/models/activitypub'
-import { logger, retryTransactionWrapper } from '../../../helpers'
+import { ActivityAnnounce } from '../../../../shared/models/activitypub'
+import { retryTransactionWrapper } from '../../../helpers/database-utils'
+import { logger } from '../../../helpers/logger'
 import { sequelizeTypescript } from '../../../initializers'
 import { ActorModel } from '../../../models/activitypub/actor'
 import { VideoModel } from '../../../models/video/video'
 import { VideoShareModel } from '../../../models/video/video-share'
 import { getOrCreateActorAndServerAndModel } from '../actor'
 import { forwardActivity } from '../send/misc'
+import { getOrCreateAccountAndVideoAndChannel } from '../videos'
 import { processCreateActivity } from './process-create'
 
 async function processAnnounceActivity (activity: ActivityAnnounce) {
@@ -43,19 +45,19 @@ function processVideoShare (actorAnnouncer: ActorModel, activity: ActivityAnnoun
   return retryTransactionWrapper(shareVideo, options)
 }
 
-function shareVideo (actorAnnouncer: ActorModel, activity: ActivityAnnounce) {
+async function shareVideo (actorAnnouncer: ActorModel, activity: ActivityAnnounce) {
   const announced = activity.object
+  let video: VideoModel
+
+  if (typeof announced === 'string') {
+    const res = await getOrCreateAccountAndVideoAndChannel(announced)
+    video = res.video
+  } else {
+    video = await processCreateActivity(announced)
+  }
 
   return sequelizeTypescript.transaction(async t => {
     // Add share entry
-    let video: VideoModel
-
-    if (typeof announced === 'string') {
-      video = await VideoModel.loadByUrlAndPopulateAccount(announced as string)
-      if (!video) throw new Error('Unknown video to share ' + announced)
-    } else {
-      video = await processCreateActivity(announced as ActivityCreate)
-    }
 
     const share = {
       actorId: actorAnnouncer.id,