import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
import { JobQueue } from '../../job-queue'
import { getActorsInvolvedInVideo, getAudienceFromFollowersOf, getRemoteVideoAudience } from '../audience'
-import { getServerActor } from '../../../helpers/utils'
import { afterCommitIfTransaction } from '../../../helpers/database-utils'
-import { MActorWithInboxes, MActor, MActorId, MActorLight, MVideo, MVideoAccountLight } from '../../../typings/models'
-import { ContextType } from '@server/helpers/activitypub'
+import { MActor, MActorId, MActorLight, MActorWithInboxes, MVideoAccountLight, MVideoId, MVideoImmutable } from '../../../typings/models'
+import { getServerActor } from '@server/models/application/application'
+import { ContextType } from '@shared/models/activitypub/context'
async function sendVideoRelatedActivity (activityBuilder: (audience: ActivityAudience) => Activity, options: {
byActor: MActorLight
- video: MVideoAccountLight
+ video: MVideoImmutable | MVideoAccountLight
transaction?: Transaction
contextType?: ContextType
}) {
// Send to origin
if (video.isOwned() === false) {
- const audience = getRemoteVideoAudience(video, actorsInvolvedInVideo)
+ const accountActor = (video as MVideoAccountLight).VideoChannel?.Account?.Actor || await ActorModel.loadAccountActorByVideoId(video.id)
+
+ const audience = getRemoteVideoAudience(accountActor, actorsInvolvedInVideo)
const activity = activityBuilder(audience)
return afterCommitIfTransaction(transaction, () => {
- return unicastTo(activity, byActor, video.VideoChannel.Account.Actor.getSharedInbox(), contextType)
+ return unicastTo(activity, byActor, accountActor.getSharedInbox(), contextType)
})
}
async function forwardVideoRelatedActivity (
activity: Activity,
t: Transaction,
- followersException: MActorWithInboxes[] = [],
- video: MVideo
+ followersException: MActorWithInboxes[],
+ video: MVideoId
) {
// Mastodon does not add our announces in audience, so we forward to them manually
const additionalActors = await getActorsInvolvedInVideo(video, t)
const result = await ActorFollowModel.listAcceptedFollowerSharedInboxUrls(toActorFollowerIds, t)
const sharedInboxesException = await buildSharedInboxesException(actorsException)
- return result.data.filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
+ return result.data.filter(sharedInbox => sharedInboxesException.includes(sharedInbox) === false)
}
async function computeUris (toActors: MActor[], actorsException: MActorWithInboxes[] = []) {
const sharedInboxesException = await buildSharedInboxesException(actorsException)
return Array.from(toActorSharedInboxesSet)
- .filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
+ .filter(sharedInbox => sharedInboxesException.includes(sharedInbox) === false)
}
async function buildSharedInboxesException (actorsException: MActorWithInboxes[]) {