X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Favatar.ts;h=e79cd15466cf9cf685963474504938299496a003;hb=aaedadd5386b580e9ebac540201399c25c7f0b0f;hp=9005b3e225e1270fe696f24149784421cb87b12f;hpb=453e83ea5d81d203ba34bc43cd5c2c750ba40568;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/avatar.ts b/server/lib/avatar.ts index 9005b3e22..e79cd1546 100644 --- a/server/lib/avatar.ts +++ b/server/lib/avatar.ts @@ -1,23 +1,24 @@ import 'multer' import { sendUpdateActor } from './activitypub/send' import { AVATARS_SIZE, LRU_CACHE, QUEUE_CONCURRENCY } from '../initializers/constants' -import { updateActorAvatarInstance } from './activitypub' +import { updateActorAvatarInstance, deleteActorAvatarInstance } from './activitypub/actor' import { processImage } from '../helpers/image-utils' import { extname, join } from 'path' import { retryTransactionWrapper } from '../helpers/database-utils' -import * as uuidv4 from 'uuid/v4' +import { v4 as uuidv4 } from 'uuid' import { CONFIG } from '../initializers/config' import { sequelizeTypescript } from '../initializers/database' import * as LRUCache from 'lru-cache' import { queue } from 'async' import { downloadImage } from '../helpers/requests' -import { MAccountActorDefault, MChannelActorDefault } from '../typings/models' +import { MAccountDefault, MChannelDefault } from '../types/models' -async function updateActorAvatarFile ( - avatarPhysicalFile: Express.Multer.File, - accountOrChannel: MAccountActorDefault | MChannelActorDefault +async function updateLocalActorAvatarFile ( + accountOrChannel: MAccountDefault | MChannelDefault, + avatarPhysicalFile: Express.Multer.File ) { const extension = extname(avatarPhysicalFile.filename) + const avatarName = uuidv4() + extension const destination = join(CONFIG.STORAGE.AVATARS_DIR, avatarName) await processImage(avatarPhysicalFile.path, destination, AVATARS_SIZE) @@ -40,6 +41,21 @@ async function updateActorAvatarFile ( }) } +async function deleteLocalActorAvatarFile ( + accountOrChannel: MAccountDefault | MChannelDefault +) { + return retryTransactionWrapper(() => { + return sequelizeTypescript.transaction(async t => { + const updatedActor = await deleteActorAvatarInstance(accountOrChannel.Actor, t) + await updatedActor.save({ transaction: t }) + + await sendUpdateActor(accountOrChannel, t) + + return updatedActor.Avatar + }) + }) +} + type DownloadImageQueueTask = { fileUrl: string, filename: string } const downloadImageQueue = queue((task, cb) => { @@ -63,6 +79,7 @@ const avatarPathUnsafeCache = new LRUCache({ max: LRU_CACHE.AVAT export { avatarPathUnsafeCache, - updateActorAvatarFile, + updateLocalActorAvatarFile, + deleteLocalActorAvatarFile, pushAvatarProcessInQueue }