X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fshare.ts;h=f256f8d21fca772d4c04bfab439e07bfaacde459;hb=c73e83da283c6d4eb094e384d59c4f8eb221507d;hp=53ecd3dab7a857b40c95dd28c5b663b00fd1ac84;hpb=4ba3b8ea1be85d95a508ac479f26b96ceea15971;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/share.ts b/server/lib/activitypub/share.ts index 53ecd3dab..f256f8d21 100644 --- a/server/lib/activitypub/share.ts +++ b/server/lib/activitypub/share.ts @@ -3,7 +3,7 @@ import { VideoPrivacy } from '../../../shared/models/videos' import { getServerActor } from '../../helpers/utils' import { VideoModel } from '../../models/video/video' import { VideoShareModel } from '../../models/video/video-share' -import { sendVideoAnnounceToFollowers } from './send' +import { sendVideoAnnounce } from './send' import { getAnnounceActivityPubUrl } from './url' async function shareVideoByServerAndChannel (video: VideoModel, t: Transaction) { @@ -12,27 +12,42 @@ async function shareVideoByServerAndChannel (video: VideoModel, t: Transaction) const serverActor = await getServerActor() const serverShareUrl = getAnnounceActivityPubUrl(video.url, serverActor) - const serverSharePromise = VideoShareModel.create({ - actorId: serverActor.id, - videoId: video.id, - url: serverShareUrl - }, { transaction: t }) + const serverSharePromise = VideoShareModel.findOrCreate({ + defaults: { + actorId: serverActor.id, + videoId: video.id, + url: serverShareUrl + }, + where: { + url: serverShareUrl + }, + transaction: t + }).then(([ serverShare, created ]) => { + if (created) return sendVideoAnnounce(serverActor, serverShare, video, t) + + return undefined + }) const videoChannelShareUrl = getAnnounceActivityPubUrl(video.url, video.VideoChannel.Actor) - const videoChannelSharePromise = VideoShareModel.create({ - actorId: video.VideoChannel.actorId, - videoId: video.id, - url: videoChannelShareUrl - }, { transaction: t }) + const videoChannelSharePromise = VideoShareModel.findOrCreate({ + defaults: { + actorId: video.VideoChannel.actorId, + videoId: video.id, + url: videoChannelShareUrl + }, + where: { + url: videoChannelShareUrl + }, + transaction: t + }).then(([ videoChannelShare, created ]) => { + if (created) return sendVideoAnnounce(serverActor, videoChannelShare, video, t) - const [ serverShare, videoChannelShare ] = await Promise.all([ - serverSharePromise, - videoChannelSharePromise - ]) + return undefined + }) return Promise.all([ - sendVideoAnnounceToFollowers(serverActor, videoChannelShare, video, t), - sendVideoAnnounceToFollowers(serverActor, serverShare, video, t) + serverSharePromise, + videoChannelSharePromise ]) }