From 213e30ef90806369529684ac9c247d73b8dc7928 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 7 Apr 2021 10:36:13 +0200 Subject: Add banner tests --- server/lib/activitypub/actor.ts | 72 +++++++++++------------- server/lib/activitypub/process/process-update.ts | 9 +-- server/lib/actor-image.ts | 3 +- 3 files changed, 36 insertions(+), 48 deletions(-) (limited to 'server/lib') diff --git a/server/lib/activitypub/actor.ts b/server/lib/activitypub/actor.ts index fe4796a3d..917fed6ec 100644 --- a/server/lib/activitypub/actor.ts +++ b/server/lib/activitypub/actor.ts @@ -34,6 +34,7 @@ import { MActorFull, MActorFullActor, MActorId, + MActorImage, MActorImages, MChannel } from '../../types/models' @@ -169,38 +170,34 @@ async function updateActorInstance (actorInstance: ActorModel, attributes: Activ } } -type AvatarInfo = { name: string, onDisk: boolean, fileUrl: string, type: ActorImageType } -async function updateActorImageInstance (actor: MActorImages, info: AvatarInfo, t: Transaction) { - if (!info.name) return actor - - const oldImageModel = info.type === ActorImageType.AVATAR +type ImageInfo = { name: string, onDisk?: boolean, fileUrl: string } +async function updateActorImageInstance (actor: MActorImages, type: ActorImageType, imageInfo: ImageInfo | null, t: Transaction) { + const oldImageModel = type === ActorImageType.AVATAR ? actor.Avatar : actor.Banner if (oldImageModel) { // Don't update the avatar if the file URL did not change - if (info.fileUrl && oldImageModel.fileUrl === info.fileUrl) return actor + if (imageInfo?.fileUrl && oldImageModel.fileUrl === imageInfo.fileUrl) return actor try { await oldImageModel.destroy({ transaction: t }) + + setActorImage(actor, type, null) } catch (err) { logger.error('Cannot remove old actor image of actor %s.', actor.url, { err }) } } - const imageModel = await ActorImageModel.create({ - filename: info.name, - onDisk: info.onDisk, - fileUrl: info.fileUrl, - type: info.type - }, { transaction: t }) + if (imageInfo) { + const imageModel = await ActorImageModel.create({ + filename: imageInfo.name, + onDisk: imageInfo.onDisk ?? false, + fileUrl: imageInfo.fileUrl, + type: type + }, { transaction: t }) - if (info.type === ActorImageType.AVATAR) { - actor.avatarId = imageModel.id - actor.Avatar = imageModel - } else { - actor.bannerId = imageModel.id - actor.Banner = imageModel + setActorImage(actor, type, imageModel) } return actor @@ -310,27 +307,8 @@ async function refreshActorIfNeeded { updateInstanceWithAnother(actor, result.actor) - if (result.avatar !== undefined) { - const avatarInfo = { - name: result.avatar.name, - fileUrl: result.avatar.fileUrl, - onDisk: false, - type: ActorImageType.AVATAR - } - - await updateActorImageInstance(actor, avatarInfo, t) - } - - if (result.banner !== undefined) { - const bannerInfo = { - name: result.banner.name, - fileUrl: result.banner.fileUrl, - onDisk: false, - type: ActorImageType.BANNER - } - - await updateActorImageInstance(actor, bannerInfo, t) - } + await updateActorImageInstance(actor, ActorImageType.AVATAR, result.avatar, t) + await updateActorImageInstance(actor, ActorImageType.BANNER, result.banner, t) // Force update actor.setDataValue('updatedAt', new Date()) @@ -381,6 +359,22 @@ export { // --------------------------------------------------------------------------- +function setActorImage (actorModel: MActorImages, type: ActorImageType, imageModel: MActorImage) { + const id = imageModel + ? imageModel.id + : null + + if (type === ActorImageType.AVATAR) { + actorModel.avatarId = id + actorModel.Avatar = imageModel + } else { + actorModel.bannerId = id + actorModel.Banner = imageModel + } + + return actorModel +} + function saveActorAndServerAndModelIfNotExist ( result: FetchRemoteActorResult, ownerActor?: MActorFullActor, diff --git a/server/lib/activitypub/process/process-update.ts b/server/lib/activitypub/process/process-update.ts index ad3bb392d..6df9b93b2 100644 --- a/server/lib/activitypub/process/process-update.ts +++ b/server/lib/activitypub/process/process-update.ts @@ -134,13 +134,8 @@ async function processUpdateActor (actor: ActorModel, activity: ActivityUpdate) await updateActorInstance(actor, actorAttributesToUpdate) - for (const imageInfo of [ avatarInfo, bannerInfo ]) { - if (!imageInfo) continue - - const imageOptions = Object.assign({}, imageInfo, { onDisk: false }) - - await updateActorImageInstance(actor, imageOptions, t) - } + await updateActorImageInstance(actor, ActorImageType.AVATAR, avatarInfo, t) + await updateActorImageInstance(actor, ActorImageType.BANNER, bannerInfo, t) await actor.save({ transaction: t }) diff --git a/server/lib/actor-image.ts b/server/lib/actor-image.ts index 59afa93bd..fa1a2a18a 100644 --- a/server/lib/actor-image.ts +++ b/server/lib/actor-image.ts @@ -34,11 +34,10 @@ async function updateLocalActorImageFile ( const actorImageInfo = { name: imageName, fileUrl: null, - type, onDisk: true } - const updatedActor = await updateActorImageInstance(accountOrChannel.Actor, actorImageInfo, t) + const updatedActor = await updateActorImageInstance(accountOrChannel.Actor, type, actorImageInfo, t) await updatedActor.save({ transaction: t }) await sendUpdateActor(accountOrChannel, t) -- cgit v1.2.3