From 6d489812a23a785b4f9bb180a8dd3f768460e31b Mon Sep 17 00:00:00 2001 From: mtvpls Date: Sun, 17 May 2026 14:04:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=B8=E5=85=8B=E7=9B=B4?= =?UTF-8?q?=E9=93=BE=E6=92=AD=E6=94=BE=E9=87=8D=E5=A4=8D=E8=BD=AC=E5=AD=98?= =?UTF-8?q?=E7=9B=B8=E5=90=8C=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/page.tsx | 4 +- src/app/api/admin/netdisk/route.ts | 2 +- src/app/api/netdisk/quark/proxy/route.ts | 2 + src/lib/config.ts | 6 +-- src/lib/netdisk/quark-session-resolver.ts | 2 +- src/lib/netdisk/quark.client.ts | 45 ++++++++++++++++++++++- 6 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index fec0de6..07955f0 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -3936,7 +3936,7 @@ const NetDiskConfigComponent = ({ const [enabled, setEnabled] = useState(false); const [cookie, setCookie] = useState(''); const [savePath, setSavePath] = useState('/'); - const [quarkPlayMode, setQuarkPlayMode] = useState<'direct_first' | 'transcode_first'>('direct_first'); + const [quarkPlayMode, setQuarkPlayMode] = useState<'direct_first' | 'transcode_first'>('transcode_first'); const [mobileEnabled, setMobileEnabled] = useState(false); const [mobileAuthorization, setMobileAuthorization] = useState(''); const [baiduEnabled, setBaiduEnabled] = useState(false); @@ -3960,7 +3960,7 @@ const NetDiskConfigComponent = ({ setEnabled(quark?.Enabled || false); setCookie(quark?.Cookie || ''); setSavePath(quark?.SavePath || '/'); - setQuarkPlayMode(quark?.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first'); + setQuarkPlayMode(quark?.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first'); setMobileEnabled(mobile?.Enabled || false); setMobileAuthorization(mobile?.Authorization || ''); setBaiduEnabled(config?.NetDiskConfig?.Baidu?.Enabled || false); diff --git a/src/app/api/admin/netdisk/route.ts b/src/app/api/admin/netdisk/route.ts index 84428e3..d4f4546 100644 --- a/src/app/api/admin/netdisk/route.ts +++ b/src/app/api/admin/netdisk/route.ts @@ -79,7 +79,7 @@ export async function POST(request: NextRequest) { Enabled: Boolean(Quark?.Enabled), Cookie: normalizedCookie, SavePath: Quark?.SavePath || '/', - PlayMode: Quark?.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first', + PlayMode: Quark?.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first', }; adminConfig.NetDiskConfig.Mobile = { Enabled: Boolean(Mobile?.Enabled), diff --git a/src/app/api/netdisk/quark/proxy/route.ts b/src/app/api/netdisk/quark/proxy/route.ts index e021f0e..2af76ba 100644 --- a/src/app/api/netdisk/quark/proxy/route.ts +++ b/src/app/api/netdisk/quark/proxy/route.ts @@ -45,6 +45,8 @@ export async function GET(request: NextRequest) { shareId: session.shareId, shareToken: session.shareToken, fileId: file.fid, + fileName: file.name, + size: file.size, shareFileToken: file.shareFidToken, playFolderFid: session.playFolderFid, }); diff --git a/src/lib/config.ts b/src/lib/config.ts index 256b953..f937921 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -724,7 +724,7 @@ export function configSelfCheck(adminConfig: AdminConfig): AdminConfig { Enabled: false, Cookie: '', SavePath: '/', - PlayMode: 'direct_first', + PlayMode: 'transcode_first', }, Mobile: { Enabled: false, @@ -762,11 +762,11 @@ export function configSelfCheck(adminConfig: AdminConfig): AdminConfig { Enabled: false, Cookie: '', SavePath: '/', - PlayMode: 'direct_first', + PlayMode: 'transcode_first', }; } if (!adminConfig.NetDiskConfig.Quark.PlayMode) { - adminConfig.NetDiskConfig.Quark.PlayMode = 'direct_first'; + adminConfig.NetDiskConfig.Quark.PlayMode = 'transcode_first'; } if (!adminConfig.NetDiskConfig.Mobile) { diff --git a/src/lib/netdisk/quark-session-resolver.ts b/src/lib/netdisk/quark-session-resolver.ts index f0cb3d5..aad6a88 100644 --- a/src/lib/netdisk/quark-session-resolver.ts +++ b/src/lib/netdisk/quark-session-resolver.ts @@ -34,7 +34,7 @@ export async function resolveQuarkSession(id: string) { throw new Error('夸克网盘播放信息恢复失败'); } - const playMode: QuarkPlayMode = quarkConfig.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first'; + const playMode: QuarkPlayMode = quarkConfig.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first'; return { session, diff --git a/src/lib/netdisk/quark.client.ts b/src/lib/netdisk/quark.client.ts index 1ea7a64..f3e0b7c 100644 --- a/src/lib/netdisk/quark.client.ts +++ b/src/lib/netdisk/quark.client.ts @@ -298,6 +298,27 @@ async function findDirectoryByName( ) || null; } +async function findDriveFileInFolder( + cookie: string, + parentFid: string, + input: { fileName?: string; size?: number } +): Promise { + const fileName = input.fileName?.trim(); + if (!fileName) return null; + + const items = await fetchAllDriveFolderItems(cookie, parentFid); + return items.find((item: any) => { + const isDir = Boolean(item.dir || item.is_dir || item.file_type === 0); + if (isDir) return false; + const itemName = String(item.file_name || item.name || ''); + if (itemName !== fileName) return false; + if (input.size && Number(item.size || 0) > 0) { + return Number(item.size || 0) === input.size; + } + return true; + }) || null; +} + export async function validateQuarkCookieReadable(cookie: string): Promise { const safeCookie = assertQuarkCookieHeaderSafe(cookie); await fetchDriveFolderItems(safeCookie, '0'); @@ -626,11 +647,22 @@ export async function saveQuarkShareFile( shareId: string; shareToken: string; fileId: string; + fileName?: string; + size?: number; shareFileToken?: string; playFolderFid: string; } ): Promise { const safeCookie = assertQuarkCookieHeaderSafe(cookie); + + const existedFile = await findDriveFileInFolder(safeCookie, input.playFolderFid, { + fileName: input.fileName, + size: input.size, + }); + if (existedFile) { + return String(existedFile.fid || existedFile.file_id); + } + const taskId = await submitSaveTask( safeCookie, { pwdId: input.shareId, passcode: '' }, @@ -639,8 +671,9 @@ export async function saveQuarkShareFile( [ { fid: input.fileId, - fileName: '', + fileName: input.fileName || '', dir: false, + size: input.size, shareFidToken: input.shareFileToken, }, ] @@ -668,6 +701,14 @@ export async function saveQuarkShareFile( return String(saveAsTopFids[0]); } + const savedFile = await findDriveFileInFolder(safeCookie, input.playFolderFid, { + fileName: input.fileName, + size: input.size, + }); + if (savedFile) { + return String(savedFile.fid || savedFile.file_id); + } + const status = data?.data?.status; if (status === -1 || status === 'failed' || data?.data?.err_code) { throw new Error(data?.data?.message || data?.data?.err_msg || '夸克任务执行失败'); @@ -686,7 +727,7 @@ export async function saveQuarkShareFile( export async function getQuarkPlayUrls( cookie: string, savedFileId: string, - playMode: QuarkPlayMode = 'direct_first' + playMode: QuarkPlayMode = 'transcode_first' ): Promise> { const safeCookie = assertQuarkCookieHeaderSafe(cookie); const headers = getHeaders(safeCookie);