-
-async function refreshActorIfNeeded (actor: ActorModel) {
- if (!actor.isOutdated()) return actor
-
- try {
- const actorUrl = await getUrlFromWebfinger(actor.preferredUsername, actor.getHost())
- const result = await fetchRemoteActor(actorUrl)
- if (result === undefined) {
- logger.warn('Cannot fetch remote actor in refresh actor.')
- return actor
- }
-
- return sequelizeTypescript.transaction(async t => {
- updateInstanceWithAnother(actor, result.actor)
-
- if (result.avatarName !== undefined) {
- await updateActorAvatarInstance(actor, result.avatarName, t)
- }
-
- // Force update
- actor.setDataValue('updatedAt', new Date())
- await actor.save({ transaction: t })
-
- if (actor.Account) {
- await actor.save({ transaction: t })
-
- actor.Account.set('name', result.name)
- actor.Account.set('description', result.summary)
- await actor.Account.save({ transaction: t })
- } else if (actor.VideoChannel) {
- await actor.save({ transaction: t })
-
- actor.VideoChannel.set('name', result.name)
- actor.VideoChannel.set('description', result.summary)
- actor.VideoChannel.set('support', result.support)
- await actor.VideoChannel.save({ transaction: t })
- }
-
- return actor
- })
- } catch (err) {
- logger.warn('Cannot refresh actor.', err)
- return actor
- }
-}