import { Transaction } from 'sequelize'
+import { Activity } from '../../../../shared/models/activitypub/activity'
import { logger } from '../../../helpers/logger'
import { ACTIVITY_PUB, database as db } from '../../../initializers'
import { AccountInstance } from '../../../models/account/account-interface'
+import { VideoChannelInstance } from '../../../models/index'
+import { VideoInstance } from '../../../models/video/video-interface'
import {
activitypubHttpJobScheduler,
ActivityPubHttpPayload
} from '../../jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler'
-import { VideoInstance } from '../../../models/video/video-interface'
-import { Activity } from '../../../../shared/models/activitypub/activity'
async function forwardActivity (
activity: Activity,
}
}
- const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls)
- const uris = await computeFollowerUris(toAccountFollowers, followersException)
+ const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls, t)
+ const uris = await computeFollowerUris(toAccountFollowers, followersException, t)
if (uris.length === 0) {
logger.info('0 followers for %s, no forwarding.', toAccountFollowers.map(a => a.id).join(', '))
- return
+ return undefined
}
logger.debug('Creating forwarding job.', { uris })
t: Transaction,
followersException: AccountInstance[] = []
) {
- const uris = await computeFollowerUris(toAccountFollowers, followersException)
+ const uris = await computeFollowerUris(toAccountFollowers, followersException, t)
if (uris.length === 0) {
logger.info('0 followers for %s, no broadcasting.', toAccountFollowers.map(a => a.id).join(', '))
- return
+ return undefined
}
logger.debug('Creating broadcast job.', { uris })
}
}
-function getVideoFollowersAudience (accountsInvolvedInVideo: AccountInstance[]) {
+function getOriginVideoChannelAudience (videoChannel: VideoChannelInstance, accountsInvolved: AccountInstance[]) {
+ return {
+ to: [ videoChannel.Account.url ],
+ cc: accountsInvolved.map(a => a.followersUrl)
+ }
+}
+
+function getObjectFollowersAudience (accountsInvolvedInObject: AccountInstance[]) {
return {
- to: accountsInvolvedInVideo.map(a => a.followersUrl),
+ to: accountsInvolvedInObject.map(a => a.followersUrl),
cc: []
}
}
-async function getAccountsInvolvedInVideo (video: VideoInstance) {
- const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id)
+async function getAccountsInvolvedInVideo (video: VideoInstance, t: Transaction) {
+ const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id, t)
accountsToForwardView.push(video.VideoChannel.Account)
return accountsToForwardView
}
-async function getAudience (accountSender: AccountInstance, isPublic = true) {
- const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls()
+async function getAccountsInvolvedInVideoChannel (videoChannel: VideoChannelInstance, t: Transaction) {
+ const accountsToForwardView = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t)
+ accountsToForwardView.push(videoChannel.Account)
+
+ return accountsToForwardView
+}
+
+async function getAudience (accountSender: AccountInstance, t: Transaction, isPublic = true) {
+ const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls(t)
// Thanks Mastodon: https://github.com/tootsuite/mastodon/blob/master/app/lib/activitypub/tag_manager.rb#L47
let to = []
return { to, cc }
}
-async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[]) {
+async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[], t: Transaction) {
const toAccountFollowerIds = toAccountFollower.map(a => a.id)
- const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds)
+ const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds, t)
const followersSharedInboxException = followersException.map(f => f.sharedInboxUrl)
const uris = result.data.filter(sharedInbox => followersSharedInboxException.indexOf(sharedInbox) === -1)
export {
broadcastToFollowers,
+ getOriginVideoChannelAudience,
unicastTo,
getAudience,
getOriginVideoAudience,
getAccountsInvolvedInVideo,
- getVideoFollowersAudience,
+ getAccountsInvolvedInVideoChannel,
+ getObjectFollowersAudience,
forwardActivity
}