X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fprocess%2Fprocess-update.ts;h=0b96ba3526593b731f607fab94fd25b661911dda;hb=418d092afa81e2c8fe8ac6838fc4b5eb0af6a782;hp=ed3489ebfe0ab52b25f9ce6bdc9a2c0a2853b2af;hpb=e587e0ecee5bec43a225995948faaa4bc97f080a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/process/process-update.ts b/server/lib/activitypub/process/process-update.ts index ed3489ebf..0b96ba352 100644 --- a/server/lib/activitypub/process/process-update.ts +++ b/server/lib/activitypub/process/process-update.ts @@ -10,8 +10,10 @@ import { fetchAvatarIfExists, updateActorAvatarInstance, updateActorInstance } f import { getOrCreateVideoAndAccountAndChannel, getOrCreateVideoChannelFromVideoObject, updateVideoFromAP } from '../videos' import { sanitizeAndCheckVideoTorrentObject } from '../../../helpers/custom-validators/activitypub/videos' import { isCacheFileObjectValid } from '../../../helpers/custom-validators/activitypub/cache-file' -import { VideoRedundancyModel } from '../../../models/redundancy/video-redundancy' -import { createCacheFile, updateCacheFile } from '../cache-file' +import { createOrUpdateCacheFile } from '../cache-file' +import { forwardVideoRelatedActivity } from '../send/utils' +import { PlaylistObject } from '../../../../shared/models/activitypub/objects/playlist-object' +import { createOrUpdateVideoPlaylist } from '../playlist' async function processUpdateActivity (activity: ActivityUpdate, byActor: ActorModel) { const objectType = activity.object.type @@ -32,6 +34,10 @@ async function processUpdateActivity (activity: ActivityUpdate, byActor: ActorMo return retryTransactionWrapper(processUpdateCacheFile, byActorFull, activity) } + if (objectType === 'Playlist') { + return retryTransactionWrapper(processUpdatePlaylist, byActor, activity) + } + return undefined } @@ -51,7 +57,7 @@ async function processUpdateVideo (actor: ActorModel, activity: ActivityUpdate) return undefined } - const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: videoObject.id }) + const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: videoObject.id, allowRefresh: false }) const channelActor = await getOrCreateVideoChannelFromVideoObject(videoObject) const updateOptions = { @@ -59,7 +65,6 @@ async function processUpdateVideo (actor: ActorModel, activity: ActivityUpdate) videoObject, account: actor.Account, channel: channelActor.VideoChannel, - updateViews: true, overrideTo: activity.to } return updateVideoFromAP(updateOptions) @@ -68,18 +73,23 @@ async function processUpdateVideo (actor: ActorModel, activity: ActivityUpdate) async function processUpdateCacheFile (byActor: ActorModel, activity: ActivityUpdate) { const cacheFileObject = activity.object as CacheFileObject - if (!isCacheFileObjectValid(cacheFileObject) === false) { - logger.debug('Cahe file object sent by update is not valid.', { cacheFileObject }) + if (!isCacheFileObjectValid(cacheFileObject)) { + logger.debug('Cache file object sent by update is not valid.', { cacheFileObject }) return undefined } - const redundancyModel = await VideoRedundancyModel.loadByUrl(cacheFileObject.id) - if (!redundancyModel) { - const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFileObject.id }) - return createCacheFile(cacheFileObject, video, byActor) - } + const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFileObject.object }) + + await sequelizeTypescript.transaction(async t => { + await createOrUpdateCacheFile(cacheFileObject, video, byActor, t) + }) + + if (video.isOwned()) { + // Don't resend the activity to the sender + const exceptions = [ byActor ] - return updateCacheFile(cacheFileObject, redundancyModel, byActor) + await forwardVideoRelatedActivity(activity, undefined, exceptions, video) + } } async function processUpdateActor (actor: ActorModel, activity: ActivityUpdate) { @@ -131,3 +141,12 @@ async function processUpdateActor (actor: ActorModel, activity: ActivityUpdate) throw err } } + +async function processUpdatePlaylist (byActor: ActorModel, activity: ActivityUpdate) { + const playlistObject = activity.object as PlaylistObject + const byAccount = byActor.Account + + if (!byAccount) throw new Error('Cannot update video playlist with the non account actor ' + byActor.url) + + await createOrUpdateVideoPlaylist(playlistObject, byAccount, activity.to) +}