From 463881ceda0c3e60f9e891832125135cc3c4f194 Mon Sep 17 00:00:00 2001 From: daidai Date: Sat, 28 Mar 2026 09:44:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20downloadMedia?= =?UTF-8?q?=EF=BC=8C=E5=A4=8D=E7=94=A8=20useContextDownload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 PoolManager.downloadMedia 方法 - 删除 queue.js 的 downloadMedia 导出 - routes.js 直接使用 getPoolContext().getFirstPage() + useContextDownload --- src/backend/pool/PoolManager.js | 24 ------------------------ src/server/api/admin/routes.js | 11 +++++++---- src/server/queue.js | 15 +-------------- 3 files changed, 8 insertions(+), 42 deletions(-) diff --git a/src/backend/pool/PoolManager.js b/src/backend/pool/PoolManager.js index da0070e..8f51da3 100644 --- a/src/backend/pool/PoolManager.js +++ b/src/backend/pool/PoolManager.js @@ -313,30 +313,6 @@ export class PoolManager { } } - /** - * 使用 Worker 的浏览器上下文下载媒体 - * @param {string} url - 媒体 URL - * @returns {Promise<{image?: string, error?: string}>} - */ - async downloadMedia(url) { - // 找一个空闲的 worker - let worker = this.workers.find(w => w.page && w.busyCount === 0); - if (!worker) { - // 如果没有空闲的,用第一个有 page 的 - worker = this.workers.find(w => w.page); - } - if (!worker || !worker.page) { - return { error: '没有可用的浏览器实例' }; - } - - try { - const { useContextDownload } = await import('../utils/download.js'); - return await useContextDownload(url, worker.page); - } catch (e) { - return { error: `下载失败: ${e.message}` }; - } - } - /** * 获取第一个 Worker 的 page */ diff --git a/src/server/api/admin/routes.js b/src/server/api/admin/routes.js index 3514f93..71d75e7 100644 --- a/src/server/api/admin/routes.js +++ b/src/server/api/admin/routes.js @@ -48,6 +48,7 @@ import { } from '../../../utils/history.js'; import path from 'path'; import fs from 'fs/promises'; +import { useContextDownload } from '../../../backend/utils/download.js'; /** * 读取请求体 @@ -565,13 +566,15 @@ export function createAdminRouter(context) { const body = await readBody(req); const mediaIndex = body.mediaIndex ?? 0; - // 使用 queueManager 的浏览器下载(如果可用) + // 使用 Pool 的浏览器下载(如果可用) let downloadFn = null; try { - if (queueManager && queueManager.downloadMedia) { - downloadFn = (url) => queueManager.downloadMedia(url); + const poolContext = queueManager?.getPoolContext?.(); + const page = poolContext?.getFirstPage?.(); + if (page) { + downloadFn = (url) => useContextDownload(url, page); } - } catch { /* queueManager 不可用,使用后备方案 */ } + } catch { /* Pool 未初始化,使用后备方案 */ } const result = await retryMediaDownload(id, mediaIndex, downloadFn); if (result.success) { diff --git a/src/server/queue.js b/src/server/queue.js index a849e3d..1e2a20e 100644 --- a/src/server/queue.js +++ b/src/server/queue.js @@ -351,18 +351,6 @@ export function createQueueManager(queueConfig, callbacks) { return await getCookies(workerName, domain); } - /** - * 使用 Worker 的浏览器下载媒体 - * @param {string} url - 媒体 URL - * @returns {Promise<{image?: string, imageUrl?: string, error?: string}>} - */ - async function downloadMedia(url) { - if (!poolContext || !poolContext.downloadMedia) { - throw new Error('Pool 未初始化或不支持 downloadMedia'); - } - return await poolContext.downloadMedia(url); - } - return { addTask, getStatus, @@ -370,7 +358,6 @@ export function createQueueManager(queueConfig, callbacks) { canAcceptNonStreaming, initializePool, getPoolContext, - getWorkerCookies, - downloadMedia + getWorkerCookies }; }