X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Flocal-actor.ts;h=8c10ed700fd4e4f311341fd49f99e929aa7c7f51;hb=37ff5005b47b9df2933a0b8812609a6c41faa170;hp=1d9be76e2d4b83e6215320d6f175174a6a8e3656;hpb=a2fb5fb8b1007e3ce82e707917f5d9a37374e99b;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/local-actor.ts b/server/lib/local-actor.ts index 1d9be76e2..8c10ed700 100644 --- a/server/lib/local-actor.ts +++ b/server/lib/local-actor.ts @@ -1,6 +1,7 @@ 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' @@ -87,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 @@ -109,6 +126,7 @@ const actorImagePathUnsafeCache = new LRUCache({ max: LRU_CACHE. export { actorImagePathUnsafeCache, updateLocalActorImageFiles, + findAvailableLocalActorName, downloadActorImageFromWorker, deleteLocalActorImageFile, downloadImageFromWorker,