3 Commits

5 changed files with 25 additions and 14 deletions

View File

@@ -1 +1 @@
0.3.50 0.3.53

View File

@@ -1 +1 @@
0.3.50 0.3.53

View File

@@ -373,7 +373,7 @@
<div v-else class="tag-empty">暂无失效关键词所有链接将默认判为有效</div> <div v-else class="tag-empty">暂无失效关键词所有链接将默认判为有效</div>
</div> </div>
<el-divider content-position="left">夸克网盘转存清理</el-divider> <el-divider content-position="left">转存文件清理</el-divider>
<div class="field-block"> <div class="field-block">
<div class="field-label-row"> <div class="field-label-row">

View File

@@ -114,7 +114,6 @@ async function batchDeleteFiles(cookie, fids) {
body: JSON.stringify({ body: JSON.stringify({
action_type: 1, action_type: 1,
filelist: fids, filelist: fids,
exclude_filelist: [],
}), }),
signal: AbortSignal.timeout(30000), signal: AbortSignal.timeout(30000),
}); });

View File

@@ -69,14 +69,22 @@ export async function saveFromShare(cookie, nickname, shareUrl, sourceTitle, ret
const fidTokens = topFiles.map(f => f.share_fid_token); const fidTokens = topFiles.map(f => f.share_fid_token);
// 按日期创建/查找文件夹,每天的转存存入当天文件夹 // 按日期创建/查找文件夹,每天的转存存入当天文件夹
await quark_api.humanDelay(); await quark_api.humanDelay();
const saveDirName = retrySave const saveDirName = quark_api.dailyFolderName();
? quark_api.dailyFolderName() + '_' + Math.random().toString(36).slice(2, 6) console.log(`[Quark] saveFromShare: looking for/create dir "${saveDirName}"`);
: quark_api.dailyFolderName();
console.log(`[Quark] saveFromShare: looking for/create dir "${saveDirName}"${retrySave ? ' (retry)' : ''}`);
const saveDirFid = await findOrCreateDir(cookie, saveDirName); const saveDirFid = await findOrCreateDir(cookie, saveDirName);
const targetPdirFid = saveDirFid || '0'; let targetPdirFid = saveDirFid || '0';
let retrySubFolderFid = '';
if (saveDirFid) { if (saveDirFid) {
console.log(`[Quark] Using save directory: ${saveDirName} (fid: ${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 { else {
console.log(`[Quark] WARNING: failed to create/find dir "${saveDirName}", saving to root`); 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]; shareFid = savedFids[0];
savedFolderName = topFiles[0]?.file_name || ''; 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 // Step 6: Create share link FIRST (before rename), so all files are guaranteed to be shared
await quark_api.humanDelay(); await quark_api.humanDelay();
let shareUrlResult = ''; let shareUrlResult = '';
@@ -241,13 +253,13 @@ export async function saveFromShare(cookie, nickname, shareUrl, sourceTitle, ret
/** /**
* Create a new directory at root. * Create a new directory at root.
*/ */
export async function createDir(cookie, dirName) { export async function createDir(cookie, dirName, parentFid = '0') {
try { try {
const resp = await fetch(`https://drive-pc.quark.cn/1/clouddrive/file?${quark_api.makeQuery()}`, { const resp = await fetch(`https://drive-pc.quark.cn/1/clouddrive/file?${quark_api.makeQuery()}`, {
method: 'POST', method: 'POST',
headers: { ...quark_api.getHeaders(cookie), 'Content-Type': 'application/json' }, headers: { ...quark_api.getHeaders(cookie), 'Content-Type': 'application/json' },
body: JSON.stringify({ body: JSON.stringify({
pdir_fid: '0', pdir_fid: parentFid,
file_name: dirName, file_name: dirName,
dir: true, dir: true,
dir_path: '', dir_path: '',
@@ -270,9 +282,9 @@ export async function createDir(cookie, dirName) {
/** /**
* Find an existing directory by name, or create it if not found. * 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 { 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); const existing = rootFiles.find(f => f.dir && f.file_name === dirName);
if (existing?.fid) { if (existing?.fid) {
console.log(`[Quark] Found existing daily folder: ${dirName} (fid: ${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) { catch (err) {
console.log(`[Quark] findOrCreateDir list error: ${err.message}`); 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'}`); console.log(`[Quark] createDir result for "${dirName}": ${fid || 'null'}`);
return fid; return fid;
} }