X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fprocess%2Fprocess-update.ts;h=ad3bb392dd8cf4ae121519eaaef939507829b835;hb=2cb03dc1f4e01ba491c36caff30c33fe9c5bad89;hp=a47d605d82fbf6b4d5c1434f710f0529488ba054;hpb=001ed2d40c8d2c8f494f5dc7f91ed62d56df10fd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/process/process-update.ts b/server/lib/activitypub/process/process-update.ts index a47d605d8..ad3bb392d 100644 --- a/server/lib/activitypub/process/process-update.ts +++ b/server/lib/activitypub/process/process-update.ts @@ -1,12 +1,12 @@ -import { ActivityUpdate, CacheFileObject, VideoTorrentObject } from '../../../../shared/models/activitypub' +import { ActivityUpdate, CacheFileObject, VideoObject } from '../../../../shared/models/activitypub' import { ActivityPubActor } from '../../../../shared/models/activitypub/activitypub-actor' import { resetSequelizeInstance, retryTransactionWrapper } from '../../../helpers/database-utils' import { logger } from '../../../helpers/logger' -import { sequelizeTypescript } from '../../../initializers' +import { sequelizeTypescript } from '../../../initializers/database' import { AccountModel } from '../../../models/account/account' import { ActorModel } from '../../../models/activitypub/actor' import { VideoChannelModel } from '../../../models/video/video-channel' -import { getAvatarInfoIfExists, updateActorAvatarInstance, updateActorInstance } from '../actor' +import { getImageInfoIfExists, updateActorImageInstance, updateActorInstance } from '../actor' import { getOrCreateVideoAndAccountAndChannel, getOrCreateVideoChannelFromVideoObject, updateVideoFromAP } from '../videos' import { sanitizeAndCheckVideoTorrentObject } from '../../../helpers/custom-validators/activitypub/videos' import { isCacheFileObjectValid } from '../../../helpers/custom-validators/activitypub/cache-file' @@ -14,8 +14,10 @@ import { createOrUpdateCacheFile } from '../cache-file' import { forwardVideoRelatedActivity } from '../send/utils' import { PlaylistObject } from '../../../../shared/models/activitypub/objects/playlist-object' import { createOrUpdateVideoPlaylist } from '../playlist' -import { APProcessorOptions } from '../../../typings/activitypub-processor.model' -import { MActorSignature, MAccountIdActor } from '../../../typings/models' +import { APProcessorOptions } from '../../../types/activitypub-processor.model' +import { MActorSignature, MAccountIdActor } from '../../../types/models' +import { isRedundancyAccepted } from '@server/lib/redundancy' +import { ActorImageType } from '@shared/models' async function processUpdateActivity (options: APProcessorOptions) { const { activity, byActor } = options @@ -54,14 +56,22 @@ export { // --------------------------------------------------------------------------- async function processUpdateVideo (actor: MActorSignature, activity: ActivityUpdate) { - const videoObject = activity.object as VideoTorrentObject + const videoObject = activity.object as VideoObject if (sanitizeAndCheckVideoTorrentObject(videoObject) === false) { logger.debug('Video sent by update is not valid.', { videoObject }) return undefined } - const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: videoObject.id, allowRefresh: false, fetchType: 'all' }) + const { video, created } = await getOrCreateVideoAndAccountAndChannel({ + videoObject: videoObject.id, + allowRefresh: false, + fetchType: 'all' + }) + // We did not have this video, it has been created so no need to update + if (created) return + + // Load new channel const channelActor = await getOrCreateVideoChannelFromVideoObject(videoObject) const account = actor.Account as MAccountIdActor @@ -78,6 +88,8 @@ async function processUpdateVideo (actor: MActorSignature, activity: ActivityUpd } async function processUpdateCacheFile (byActor: MActorSignature, activity: ActivityUpdate) { + if (await isRedundancyAccepted(activity, byActor) !== true) return + const cacheFileObject = activity.object as CacheFileObject if (!isCacheFileObjectValid(cacheFileObject)) { @@ -108,7 +120,8 @@ async function processUpdateActor (actor: ActorModel, activity: ActivityUpdate) let accountOrChannelFieldsSave: object // Fetch icon? - const avatarInfo = await getAvatarInfoIfExists(actorAttributesToUpdate) + const avatarInfo = getImageInfoIfExists(actorAttributesToUpdate, ActorImageType.AVATAR) + const bannerInfo = getImageInfoIfExists(actorAttributesToUpdate, ActorImageType.BANNER) try { await sequelizeTypescript.transaction(async t => { @@ -121,10 +134,12 @@ async function processUpdateActor (actor: ActorModel, activity: ActivityUpdate) await updateActorInstance(actor, actorAttributesToUpdate) - if (avatarInfo !== undefined) { - const avatarOptions = Object.assign({}, avatarInfo, { onDisk: false }) + for (const imageInfo of [ avatarInfo, bannerInfo ]) { + if (!imageInfo) continue + + const imageOptions = Object.assign({}, imageInfo, { onDisk: false }) - await updateActorAvatarInstance(actor, avatarOptions, t) + await updateActorImageInstance(actor, imageOptions, t) } await actor.save({ transaction: t })