From 3c9ab6763c8f007450f72d4d68c49fb4b6227c18 Mon Sep 17 00:00:00 2001 From: xuncha <1658671838@qq.com> Date: Sat, 31 Jan 2026 13:49:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=96=B9=E9=9D=A2=E5=86=8D?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E5=AA=92=E4=BD=93=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/services/exportService.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/electron/services/exportService.ts b/electron/services/exportService.ts index fda4063..948a2b0 100644 --- a/electron/services/exportService.ts +++ b/electron/services/exportService.ts @@ -142,6 +142,12 @@ class ExportService { this.configService = new ConfigService() } + private getClampedConcurrency(value: number | undefined, fallback = 2, max = 6): number { + if (typeof value !== 'number' || !Number.isFinite(value)) return fallback + const raw = Math.floor(value) + return Math.max(1, Math.min(raw, max)) + } + private cleanAccountDirName(dirName: string): string { const trimmed = dirName.trim() if (!trimmed) return trimmed @@ -1740,9 +1746,9 @@ class ExportService { phase: 'exporting-media' }) - // 并行导出媒体,限制 8 个并发 - const MEDIA_CONCURRENCY = 8 - await parallelLimit(mediaMessages, MEDIA_CONCURRENCY, async (msg) => { + // 并行导出媒体,并发数跟随导出设置 + const mediaConcurrency = this.getClampedConcurrency(options.exportConcurrency) + await parallelLimit(mediaMessages, mediaConcurrency, async (msg) => { const mediaKey = `${msg.localType}_${msg.localId}` if (!mediaCache.has(mediaKey)) { const mediaItem = await this.exportMediaForMessage(msg, sessionId, mediaRootDir, mediaRelativePrefix, { @@ -1956,8 +1962,8 @@ class ExportService { phase: 'exporting-media' }) - const MEDIA_CONCURRENCY = 8 - await parallelLimit(mediaMessages, MEDIA_CONCURRENCY, async (msg) => { + const mediaConcurrency = this.getClampedConcurrency(options.exportConcurrency) + await parallelLimit(mediaMessages, mediaConcurrency, async (msg) => { const mediaKey = `${msg.localType}_${msg.localId}` if (!mediaCache.has(mediaKey)) { const mediaItem = await this.exportMediaForMessage(msg, sessionId, mediaRootDir, mediaRelativePrefix, { @@ -2348,8 +2354,8 @@ class ExportService { phase: 'exporting-media' }) - const MEDIA_CONCURRENCY = 8 - await parallelLimit(mediaMessages, MEDIA_CONCURRENCY, async (msg) => { + const mediaConcurrency = this.getClampedConcurrency(options.exportConcurrency) + await parallelLimit(mediaMessages, mediaConcurrency, async (msg) => { const mediaKey = `${msg.localType}_${msg.localId}` if (!mediaCache.has(mediaKey)) { const mediaItem = await this.exportMediaForMessage(msg, sessionId, mediaRootDir, mediaRelativePrefix, { @@ -2653,8 +2659,8 @@ class ExportService { phase: 'exporting-media' }) - const MEDIA_CONCURRENCY = 8 - await parallelLimit(mediaMessages, MEDIA_CONCURRENCY, async (msg) => { + const mediaConcurrency = this.getClampedConcurrency(options.exportConcurrency) + await parallelLimit(mediaMessages, mediaConcurrency, async (msg) => { const mediaKey = `${msg.localType}_${msg.localId}` if (!mediaCache.has(mediaKey)) { const mediaItem = await this.exportMediaForMessage(msg, sessionId, mediaRootDir, mediaRelativePrefix, {