X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Flocal-actor.ts;h=8c10ed700fd4e4f311341fd49f99e929aa7c7f51;hb=dc9c9500bf5f0fd66906576ee3df4f1c49a1871d;hp=e3b04c09467b23123e66f4bcbe820578bab972be;hpb=c53853ca1b8e32aea5259d436d3d284b9d178919;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/local-actor.ts b/server/lib/local-actor.ts index e3b04c094..8c10ed700 100644 --- a/server/lib/local-actor.ts +++ b/server/lib/local-actor.ts @@ -1,19 +1,19 @@ import { remove } from 'fs-extra' import LRUCache from 'lru-cache' import { join } from 'path' +import { Transaction } from 'sequelize/types' import { ActorModel } from '@server/models/actor/actor' import { getLowercaseExtension } from '@shared/core-utils' import { buildUUID } from '@shared/extra-utils' import { ActivityPubActorType, ActorImageType } from '@shared/models' import { retryTransactionWrapper } from '../helpers/database-utils' -import { processImage } from '../helpers/image-utils' import { CONFIG } from '../initializers/config' import { ACTOR_IMAGES_SIZE, LRU_CACHE, WEBSERVER } from '../initializers/constants' import { sequelizeTypescript } from '../initializers/database' import { MAccountDefault, MActor, MChannelDefault } from '../types/models' import { deleteActorImages, updateActorImages } from './activitypub/actors' import { sendUpdateActor } from './activitypub/send' -import { downloadImageFromWorker } from './worker/parent-process' +import { downloadImageFromWorker, processImageFromWorker } from './worker/parent-process' function buildActorInstance (type: ActivityPubActorType, url: string, preferredUsername: string) { return new ActorModel({ @@ -42,7 +42,7 @@ async function updateLocalActorImageFiles ( const imageName = buildUUID() + extension const destination = join(CONFIG.STORAGE.ACTOR_IMAGES, imageName) - await processImage(imagePhysicalFile.path, destination, imageSize, true) + await processImageFromWorker({ path: imagePhysicalFile.path, destination, newSize: imageSize, keepOriginal: true }) return { imageName, @@ -88,6 +88,22 @@ async function deleteLocalActorImageFile (accountOrChannel: MAccountDefault | MC // --------------------------------------------------------------------------- +async function findAvailableLocalActorName (baseActorName: string, transaction?: Transaction) { + let actor = await ActorModel.loadLocalByName(baseActorName, transaction) + if (!actor) return baseActorName + + for (let i = 1; i < 30; i++) { + const name = `${baseActorName}-${i}` + + actor = await ActorModel.loadLocalByName(name, transaction) + if (!actor) return name + } + + throw new Error('Cannot find available actor local name (too much iterations).') +} + +// --------------------------------------------------------------------------- + function downloadActorImageFromWorker (options: { fileUrl: string filename: string @@ -110,6 +126,7 @@ const actorImagePathUnsafeCache = new LRUCache({ max: LRU_CACHE. export { actorImagePathUnsafeCache, updateLocalActorImageFiles, + findAvailableLocalActorName, downloadActorImageFromWorker, deleteLocalActorImageFile, downloadImageFromWorker,