process-view.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { getOrCreateVideoAndAccountAndChannel } from '../videos'
  2. import { forwardVideoRelatedActivity } from '../send/utils'
  3. import { Redis } from '../../redis'
  4. import { ActivityCreate, ActivityView, ViewObject } from '../../../../shared/models/activitypub'
  5. import { APProcessorOptions } from '../../../typings/activitypub-processor.model'
  6. import { MActorSignature } from '../../../typings/models'
  7. async function processViewActivity (options: APProcessorOptions<ActivityCreate | ActivityView>) {
  8. const { activity, byActor } = options
  9. return processCreateView(activity, byActor)
  10. }
  11. // ---------------------------------------------------------------------------
  12. export {
  13. processViewActivity
  14. }
  15. // ---------------------------------------------------------------------------
  16. async function processCreateView (activity: ActivityView | ActivityCreate, byActor: MActorSignature) {
  17. const videoObject = activity.type === 'View' ? activity.object : (activity.object as ViewObject).object
  18. const options = {
  19. videoObject,
  20. fetchType: 'only-video' as 'only-video'
  21. }
  22. const { video } = await getOrCreateVideoAndAccountAndChannel(options)
  23. await Redis.Instance.addVideoView(video.id)
  24. if (video.isOwned()) {
  25. // Don't resend the activity to the sender
  26. const exceptions = [ byActor ]
  27. await forwardVideoRelatedActivity(activity, undefined, exceptions, video)
  28. }
  29. }