send-announce.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { Transaction } from 'sequelize'
  2. import { ActivityAnnounce, ActivityAudience } from '../../../../shared/models/activitypub'
  3. import { broadcastToFollowers } from './utils'
  4. import { audiencify, getActorsInvolvedInVideo, getAudience, getAudienceFromFollowersOf } from '../audience'
  5. import { logger } from '../../../helpers/logger'
  6. import { MActorLight, MVideo } from '../../../typings/models'
  7. import { MVideoShare } from '../../../typings/models/video'
  8. async function buildAnnounceWithVideoAudience (
  9. byActor: MActorLight,
  10. videoShare: MVideoShare,
  11. video: MVideo,
  12. t: Transaction
  13. ) {
  14. const announcedObject = video.url
  15. const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t)
  16. const audience = getAudienceFromFollowersOf(actorsInvolvedInVideo)
  17. const activity = buildAnnounceActivity(videoShare.url, byActor, announcedObject, audience)
  18. return { activity, actorsInvolvedInVideo }
  19. }
  20. async function sendVideoAnnounce (byActor: MActorLight, videoShare: MVideoShare, video: MVideo, t: Transaction) {
  21. const { activity, actorsInvolvedInVideo } = await buildAnnounceWithVideoAudience(byActor, videoShare, video, t)
  22. logger.info('Creating job to send announce %s.', videoShare.url)
  23. const followersException = [ byActor ]
  24. return broadcastToFollowers(activity, byActor, actorsInvolvedInVideo, t, followersException)
  25. }
  26. function buildAnnounceActivity (url: string, byActor: MActorLight, object: string, audience?: ActivityAudience): ActivityAnnounce {
  27. if (!audience) audience = getAudience(byActor)
  28. return audiencify({
  29. type: 'Announce' as 'Announce',
  30. id: url,
  31. actor: byActor.url,
  32. object
  33. }, audience)
  34. }
  35. // ---------------------------------------------------------------------------
  36. export {
  37. sendVideoAnnounce,
  38. buildAnnounceActivity,
  39. buildAnnounceWithVideoAudience
  40. }