1 import { Transaction } from 'sequelize/types'
2 import { logger } from '@server/helpers/logger'
3 import { ActorImageModel } from '@server/models/actor/actor-image'
4 import { MActorImage, MActorImages } from '@server/types/models'
5 import { ActorImageType } from '@shared/models'
15 async function updateActorImageInstance (actor: MActorImages, type: ActorImageType, imageInfo: ImageInfo | null, t: Transaction) {
16 const oldImageModel = type === ActorImageType.AVATAR
21 // Don't update the avatar if the file URL did not change
22 if (imageInfo?.fileUrl && oldImageModel.fileUrl === imageInfo.fileUrl) return actor
25 await oldImageModel.destroy({ transaction: t })
27 setActorImage(actor, type, null)
29 logger.error('Cannot remove old actor image of actor %s.', actor.url, { err })
34 const imageModel = await ActorImageModel.create({
35 filename: imageInfo.name,
36 onDisk: imageInfo.onDisk ?? false,
37 fileUrl: imageInfo.fileUrl,
38 height: imageInfo.height,
39 width: imageInfo.width,
41 }, { transaction: t })
43 setActorImage(actor, type, imageModel)
49 async function deleteActorImageInstance (actor: MActorImages, type: ActorImageType, t: Transaction) {
51 if (type === ActorImageType.AVATAR) {
52 await actor.Avatar.destroy({ transaction: t })
57 await actor.Banner.destroy({ transaction: t })
63 logger.error('Cannot remove old image of actor %s.', actor.url, { err })
69 // ---------------------------------------------------------------------------
74 updateActorImageInstance,
75 deleteActorImageInstance
78 // ---------------------------------------------------------------------------
80 function setActorImage (actorModel: MActorImages, type: ActorImageType, imageModel: MActorImage) {
85 if (type === ActorImageType.AVATAR) {
86 actorModel.avatarId = id
87 actorModel.Avatar = imageModel
89 actorModel.bannerId = id
90 actorModel.Banner = imageModel