avatar.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import 'multer'
  2. import { sendUpdateActor } from './activitypub/send'
  3. import { AVATARS_SIZE, CONFIG, sequelizeTypescript } from '../initializers'
  4. import { updateActorAvatarInstance } from './activitypub'
  5. import { processImage } from '../helpers/image-utils'
  6. import { AccountModel } from '../models/account/account'
  7. import { VideoChannelModel } from '../models/video/video-channel'
  8. import { extname, join } from 'path'
  9. import { retryTransactionWrapper } from '../helpers/database-utils'
  10. import * as uuidv4 from 'uuid/v4'
  11. async function updateActorAvatarFile (avatarPhysicalFile: Express.Multer.File, accountOrChannel: AccountModel | VideoChannelModel) {
  12. const extension = extname(avatarPhysicalFile.filename)
  13. const avatarName = uuidv4() + extension
  14. const destination = join(CONFIG.STORAGE.AVATARS_DIR, avatarName)
  15. await processImage(avatarPhysicalFile, destination, AVATARS_SIZE)
  16. return retryTransactionWrapper(() => {
  17. return sequelizeTypescript.transaction(async t => {
  18. const updatedActor = await updateActorAvatarInstance(accountOrChannel.Actor, avatarName, t)
  19. await updatedActor.save({ transaction: t })
  20. await sendUpdateActor(accountOrChannel, t)
  21. return updatedActor.Avatar
  22. })
  23. })
  24. }
  25. export {
  26. updateActorAvatarFile
  27. }