import { MAccount, MActor, MActorFull, MChannel } from '@server/types/models'
import { ActivityPubActor, ActorImageType } from '@shared/models'
import { getOrCreateAPOwner } from './get'
-import { updateActorImageInstance } from './image'
+import { updateActorImages } from './image'
import { fetchActorFollowsCount } from './shared'
-import { getImageInfoFromObject } from './shared/object-to-model-attributes'
+import { getImagesInfoFromObject } from './shared/object-to-model-attributes'
export class APActorUpdater {
- private accountOrChannel: MAccount | MChannel
-
- private readonly actorFieldsSave: object
- private readonly accountOrChannelFieldsSave: object
+ private readonly accountOrChannel: MAccount | MChannel
constructor (
private readonly actorObject: ActivityPubActor,
private readonly actor: MActorFull
) {
- this.actorFieldsSave = this.actor.toJSON()
-
if (this.actorObject.type === 'Group') this.accountOrChannel = this.actor.VideoChannel
else this.accountOrChannel = this.actor.Account
-
- this.accountOrChannelFieldsSave = this.accountOrChannel.toJSON()
}
async update () {
- const avatarInfo = getImageInfoFromObject(this.actorObject, ActorImageType.AVATAR)
- const bannerInfo = getImageInfoFromObject(this.actorObject, ActorImageType.BANNER)
+ const avatarsInfo = getImagesInfoFromObject(this.actorObject, ActorImageType.AVATAR)
+ const bannersInfo = getImagesInfoFromObject(this.actorObject, ActorImageType.BANNER)
try {
await this.updateActorInstance(this.actor, this.actorObject)
}
await runInReadCommittedTransaction(async t => {
- await updateActorImageInstance(this.actor, ActorImageType.AVATAR, avatarInfo, t)
- await updateActorImageInstance(this.actor, ActorImageType.BANNER, bannerInfo, t)
+ await updateActorImages(this.actor, ActorImageType.BANNER, bannersInfo, t)
+ await updateActorImages(this.actor, ActorImageType.AVATAR, avatarsInfo, t)
})
await runInReadCommittedTransaction(async t => {
logger.info('Remote account %s updated', this.actorObject.url)
} catch (err) {
- if (this.actor !== undefined && this.actorFieldsSave !== undefined) {
- resetSequelizeInstance(this.actor, this.actorFieldsSave)
+ if (this.actor !== undefined) {
+ await resetSequelizeInstance(this.actor)
}
- if (this.accountOrChannel !== undefined && this.accountOrChannelFieldsSave !== undefined) {
- resetSequelizeInstance(this.accountOrChannel, this.accountOrChannelFieldsSave)
+ if (this.accountOrChannel !== undefined) {
+ await resetSequelizeInstance(this.accountOrChannel)
}
// This is just a debug because we will retry the insert