- const avatar = await AvatarModel.loadByName(filename)
- if (avatar.onDisk === false) {
- if (!avatar.fileUrl) return res.sendStatus(404)
+ const image = await ActorImageModel.loadByName(filename)
+ if (!image) return res.status(HttpStatusCode.NOT_FOUND_404).end()
+
+ if (image.onDisk === false) {
+ if (!image.fileUrl) return res.status(HttpStatusCode.NOT_FOUND_404).end()
+
+ logger.info('Lazy serve remote actor image %s.', image.fileUrl)
+
+ try {
+ await downloadActorImageFromWorker({
+ filename: image.filename,
+ fileUrl: image.fileUrl,
+ size: getActorImageSize(image),
+ type: image.type
+ })
+ } catch (err) {
+ logger.warn('Cannot process remote actor image %s.', image.fileUrl, { err })
+ return res.status(HttpStatusCode.NOT_FOUND_404).end()
+ }
+
+ image.onDisk = true
+ image.save()
+ .catch(err => logger.error('Cannot save new actor image disk state.', { err }))
+ }