+ const { result, statusCode } = await fetchRemoteActor(actorUrl)
+
+ if (statusCode === HttpStatusCode.NOT_FOUND_404) {
+ logger.info('Deleting actor %s because there is a 404 in refresh actor.', actor.url)
+ actor.Account
+ ? await actor.Account.destroy()
+ : await actor.VideoChannel.destroy()
+
+ return { actor: undefined, refreshed: false }
+ }
+
+ if (result === undefined) {
+ logger.warn('Cannot fetch remote actor in refresh actor.')
+ return { actor, refreshed: false }
+ }
+
+ return sequelizeTypescript.transaction(async t => {
+ updateInstanceWithAnother(actor, result.actor)
+
+ if (result.avatar !== undefined) {
+ const avatarInfo = {
+ name: result.avatar.name,
+ fileUrl: result.avatar.fileUrl,
+ onDisk: false
+ }
+
+ await updateActorAvatarInstance(actor, avatarInfo, t)
+ }
+
+ // Force update
+ actor.setDataValue('updatedAt', new Date())
+ await actor.save({ transaction: t })
+
+ if (actor.Account) {
+ actor.Account.name = result.name
+ actor.Account.description = result.summary
+
+ await actor.Account.save({ transaction: t })
+ } else if (actor.VideoChannel) {
+ actor.VideoChannel.name = result.name
+ actor.VideoChannel.description = result.summary
+ actor.VideoChannel.support = result.support
+
+ await actor.VideoChannel.save({ transaction: t })
+ }
+
+ return { refreshed: true, actor }
+ })
+ } catch (err) {
+ logger.warn('Cannot refresh actor %s.', actor.url, { err })
+ return { actor, refreshed: false }
+ }