type AvatarInfo = { name: string, onDisk: boolean, fileUrl: string }
async function updateActorAvatarInstance (actor: MActorDefault, info: AvatarInfo, t: Transaction) {
- if (info.name !== undefined) {
- if (actor.avatarId) {
- try {
- await actor.Avatar.destroy({ transaction: t })
- } catch (err) {
- logger.error('Cannot remove old avatar of actor %s.', actor.url, { err })
- }
- }
+ if (!info.name) return actor
- const avatar = await AvatarModel.create({
- filename: info.name,
- onDisk: info.onDisk,
- fileUrl: info.fileUrl
- }, { transaction: t })
+ if (actor.Avatar) {
+ // Don't update the avatar if the filename did not change
+ if (actor.Avatar.fileUrl === info.fileUrl) return actor
- actor.avatarId = avatar.id
- actor.Avatar = avatar
+ try {
+ await actor.Avatar.destroy({ transaction: t })
+ } catch (err) {
+ logger.error('Cannot remove old avatar of actor %s.', actor.url, { err })
+ }
}
+ const avatar = await AvatarModel.create({
+ filename: info.name,
+ onDisk: info.onDisk,
+ fileUrl: info.fileUrl
+ }, { transaction: t })
+
+ actor.avatarId = avatar.id
+ actor.Avatar = avatar
+
return actor
}