From 38097da994d3e524d8b70eaf66277b897e9a5fca Mon Sep 17 00:00:00 2001 From: admin <362324317@qq.com> Date: Mon, 18 May 2026 01:48:05 +0800 Subject: [PATCH] v0.3.52: Retry creates subfolder inside daily folder for new share link, preserving folder structure --- VERSION | 2 +- source_clean/VERSION | 2 +- .../src/cloud/drivers/quark-storage.ts | 32 +++++++++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/VERSION b/VERSION index 6b9aa4e..d57e08b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.51 +0.3.52 diff --git a/source_clean/VERSION b/source_clean/VERSION index 6b9aa4e..d57e08b 100644 --- a/source_clean/VERSION +++ b/source_clean/VERSION @@ -1 +1 @@ -0.3.51 +0.3.52 diff --git a/source_clean/src/cloud/drivers/quark-storage.ts b/source_clean/src/cloud/drivers/quark-storage.ts index 3856806..af181d6 100644 --- a/source_clean/src/cloud/drivers/quark-storage.ts +++ b/source_clean/src/cloud/drivers/quark-storage.ts @@ -69,14 +69,22 @@ export async function saveFromShare(cookie, nickname, shareUrl, sourceTitle, ret const fidTokens = topFiles.map(f => f.share_fid_token); // 按日期创建/查找文件夹,每天的转存存入当天文件夹 await quark_api.humanDelay(); - const saveDirName = retrySave - ? quark_api.dailyFolderName() + '_' + Math.random().toString(36).slice(2, 6) - : quark_api.dailyFolderName(); - console.log(`[Quark] saveFromShare: looking for/create dir "${saveDirName}"${retrySave ? ' (retry)' : ''}`); + const saveDirName = quark_api.dailyFolderName(); + console.log(`[Quark] saveFromShare: looking for/create dir "${saveDirName}"`); const saveDirFid = await findOrCreateDir(cookie, saveDirName); - const targetPdirFid = saveDirFid || '0'; + let targetPdirFid = saveDirFid || '0'; + let retrySubFolderFid = ''; if (saveDirFid) { console.log(`[Quark] Using save directory: ${saveDirName} (fid: ${saveDirFid})`); + if (retrySave) { + const subName = 'retry_' + Math.random().toString(36).slice(2, 6); + console.log(`[Quark] Retry: creating subfolder "${subName}" inside "${saveDirName}"`); + retrySubFolderFid = await findOrCreateDir(cookie, subName, saveDirFid); + if (retrySubFolderFid) { + targetPdirFid = retrySubFolderFid; + console.log(`[Quark] Retry: saving to subfolder ${subName} (fid: ${retrySubFolderFid})`); + } + } } else { console.log(`[Quark] WARNING: failed to create/find dir "${saveDirName}", saving to root`); @@ -109,6 +117,10 @@ export async function saveFromShare(cookie, nickname, shareUrl, sourceTitle, ret shareFid = savedFids[0]; savedFolderName = topFiles[0]?.file_name || ''; } + if (retrySave && retrySubFolderFid) { + shareFid = retrySubFolderFid; + console.log(`[Quark] Retry: sharing subfolder (fid: ${retrySubFolderFid}) instead of saved content`); + } // Step 6: Create share link FIRST (before rename), so all files are guaranteed to be shared await quark_api.humanDelay(); let shareUrlResult = ''; @@ -241,13 +253,13 @@ export async function saveFromShare(cookie, nickname, shareUrl, sourceTitle, ret /** * Create a new directory at root. */ -export async function createDir(cookie, dirName) { +export async function createDir(cookie, dirName, parentFid = '0') { try { const resp = await fetch(`https://drive-pc.quark.cn/1/clouddrive/file?${quark_api.makeQuery()}`, { method: 'POST', headers: { ...quark_api.getHeaders(cookie), 'Content-Type': 'application/json' }, body: JSON.stringify({ - pdir_fid: '0', + pdir_fid: parentFid, file_name: dirName, dir: true, dir_path: '', @@ -270,9 +282,9 @@ export async function createDir(cookie, dirName) { /** * Find an existing directory by name, or create it if not found. */ -export async function findOrCreateDir(cookie, dirName) { +export async function findOrCreateDir(cookie, dirName, parentFid = '0') { try { - const rootFiles = await quark_api.listDirAllPages(cookie, '0'); + const rootFiles = await quark_api.listDirAllPages(cookie, parentFid); const existing = rootFiles.find(f => f.dir && f.file_name === dirName); if (existing?.fid) { console.log(`[Quark] Found existing daily folder: ${dirName} (fid: ${existing.fid})`); @@ -283,7 +295,7 @@ export async function findOrCreateDir(cookie, dirName) { catch (err) { console.log(`[Quark] findOrCreateDir list error: ${err.message}`); } - const fid = await createDir(cookie, dirName); + const fid = await createDir(cookie, dirName, parentFid); console.log(`[Quark] createDir result for "${dirName}": ${fid || 'null'}`); return fid; }