import { VideoModel } from '../../../models/video/video'
import { VideoCommentModel } from '../../../models/video/video-comment'
import { VideoShareModel } from '../../../models/video/video-share'
-import { activitypubHttpJobScheduler, ActivityPubHttpPayload } from '../../jobs/activitypub-http-job-scheduler'
+import { JobQueue } from '../../job-queue'
async function forwardActivity (
activity: Activity,
logger.debug('Creating forwarding job.', { uris })
- const jobPayload: ActivityPubHttpPayload = {
+ const payload = {
uris,
body: activity
}
-
- return activitypubHttpJobScheduler.createJob(t, 'activitypubHttpBroadcastHandler', jobPayload)
+ return JobQueue.Instance.createJob({ type: 'activitypub-http-broadcast', payload })
}
async function broadcastToFollowers (
actorsException: ActorModel[] = []
) {
const uris = await computeFollowerUris(toActorFollowers, actorsException, t)
- return broadcastTo(uris, data, byActor, t)
+ return broadcastTo(uris, data, byActor)
}
async function broadcastToActors (
data: any,
byActor: ActorModel,
toActors: ActorModel[],
- t: Transaction,
actorsException: ActorModel[] = []
) {
const uris = await computeUris(toActors, actorsException)
- return broadcastTo(uris, data, byActor, t)
+ return broadcastTo(uris, data, byActor)
}
-async function broadcastTo (uris: string[], data: any, byActor: ActorModel, t: Transaction) {
+async function broadcastTo (uris: string[], data: any, byActor: ActorModel) {
if (uris.length === 0) return undefined
logger.debug('Creating broadcast job.', { uris })
- const jobPayload: ActivityPubHttpPayload = {
+ const payload = {
uris,
signatureActorId: byActor.id,
body: data
}
- return activitypubHttpJobScheduler.createJob(t, 'activitypubHttpBroadcastHandler', jobPayload)
+ return JobQueue.Instance.createJob({ type: 'activitypub-http-broadcast', payload })
}
-async function unicastTo (data: any, byActor: ActorModel, toActorUrl: string, t: Transaction) {
+async function unicastTo (data: any, byActor: ActorModel, toActorUrl: string) {
logger.debug('Creating unicast job.', { uri: toActorUrl })
- const jobPayload: ActivityPubHttpPayload = {
- uris: [ toActorUrl ],
+ const payload = {
+ uri: toActorUrl,
signatureActorId: byActor.id,
body: data
}
- return activitypubHttpJobScheduler.createJob(t, 'activitypubHttpUnicastHandler', jobPayload)
+ return JobQueue.Instance.createJob({ type: 'activitypub-http-unicast', payload })
}
function getOriginVideoAudience (video: VideoModel, actorsInvolvedInVideo: ActorModel[]) {
async function getAudience (actorSender: ActorModel, t: Transaction, isPublic = true) {
const followerInboxUrls = await actorSender.getFollowerSharedInboxUrls(t)
+ return buildAudience(followerInboxUrls, isPublic)
+}
+
+function buildAudience (followerInboxUrls: string[], isPublic = true) {
// Thanks Mastodon: https://github.com/tootsuite/mastodon/blob/master/app/lib/activitypub/tag_manager.rb#L47
let to = []
let cc = []
const toActorFollowerIds = toActorFollower.map(a => a.id)
const result = await ActorFollowModel.listAcceptedFollowerSharedInboxUrls(toActorFollowerIds, t)
- const sharedInboxesException = actorsException.map(f => f.sharedInboxUrl)
+ const sharedInboxesException = actorsException.map(f => f.sharedInboxUrl || f.inboxUrl)
return result.data.filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
}
async function computeUris (toActors: ActorModel[], actorsException: ActorModel[] = []) {
- const toActorSharedInboxesSet = new Set(toActors.map(a => a.sharedInboxUrl))
+ const toActorSharedInboxesSet = new Set(toActors.map(a => a.sharedInboxUrl || a.inboxUrl))
- const sharedInboxesException = actorsException.map(f => f.sharedInboxUrl)
+ const sharedInboxesException = actorsException.map(f => f.sharedInboxUrl || f.inboxUrl)
return Array.from(toActorSharedInboxesSet)
.filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
}
export {
broadcastToFollowers,
unicastTo,
+ buildAudience,
getAudience,
getOriginVideoAudience,
getActorsInvolvedInVideo,