X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Flocal-actor.ts;h=8c10ed700fd4e4f311341fd49f99e929aa7c7f51;hb=dc9c9500bf5f0fd66906576ee3df4f1c49a1871d;hp=1d9be76e2d4b83e6215320d6f175174a6a8e3656;hpb=83b1b7eaf1c04837f92de497e74895bee808eb83;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,