From e42002f5de99eb2b6b8da096eb807090827ee101 Mon Sep 17 00:00:00 2001 From: hesukastro Date: Fri, 8 May 2026 10:36:44 +0800 Subject: [PATCH] PLEC Update - Append timestamp to avoid filename conflicts - Start on workspace/dist/ folder or workspace/ --- ...olbox-0.1.0.vsix => hpl-toolbox-0.1.1.vsix | Bin 61868 -> 62163 bytes package.json | 2 +- src/tools/plecUpload.ts | 57 +++++++++--------- 3 files changed, 31 insertions(+), 28 deletions(-) rename hpl-toolbox-0.1.0.vsix => hpl-toolbox-0.1.1.vsix (73%) diff --git a/hpl-toolbox-0.1.0.vsix b/hpl-toolbox-0.1.1.vsix similarity index 73% rename from hpl-toolbox-0.1.0.vsix rename to hpl-toolbox-0.1.1.vsix index dc3ad22ccad89f292de4d0a35f090a9669869deb..6347af2d6d0301d16ca4bf6fae018ca93a9975ad 100644 GIT binary patch delta 12131 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 K9enuL_x}J!c04Np delta 11799 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'uploadUrl')!; const originUrl = cfg.get('originUrl')!; - const previewBase = cfg.get('previewBase')!; - const skipExistsCheck = cfg.get('skipExistsCheck')!; const valid: UploadRow[] = []; for (const r of rows) { @@ -77,22 +76,8 @@ async function handleUpload(panel: vscode.WebviewPanel, rows: UploadRow[]) { return; } - panel.webview.postMessage({ type: 'status', message: 'Checking filename availability...' }); - - if (!skipExistsCheck) { - for (const r of valid) { - const fname = path.basename(r.path); - const exists = await checkFileExists(previewBase + encodeURIComponent(fname)); - if (exists === true) { - panel.webview.postMessage({ - type: 'rowError', - rowId: r.id, - message: `Filename "${fname}" already exists on preview server. Rename and retry.`, - }); - return; - } - } - } + const stamp = timestampSuffix(); + const stampedNames = valid.map((r) => appendTimestamp(path.basename(r.path), stamp)); panel.webview.postMessage({ type: 'status', message: 'Uploading...' }); @@ -101,7 +86,7 @@ async function handleUpload(panel: vscode.WebviewPanel, rows: UploadRow[]) { const r = valid[i]; const idx = i + 1; const buf = fs.readFileSync(r.path); - const file = new File([buf], path.basename(r.path), { type: 'text/html' }); + const file = new File([buf], stampedNames[i], { type: 'text/html' }); form.append(`fileUpload_${idx}`, file as any); form.append(`iterationNameUpload_${idx}`, encodeURI(r.iteration.replace(/\s+/g, ''))); } @@ -147,15 +132,33 @@ async function handleUpload(panel: vscode.WebviewPanel, rows: UploadRow[]) { panel.webview.postMessage({ type: 'result', preview, raw: json, rawText: text }); } -async function checkFileExists(url: string): Promise { - try { - const res = await fetch(url, { method: 'HEAD' }); - if (res.status === 200) return true; - if (res.status === 404) return false; - return null; - } catch { - return null; +function timestampSuffix(d: Date = new Date()): string { + const pad = (n: number, w = 2) => String(n).padStart(w, '0'); + return ( + d.getFullYear().toString() + + pad(d.getMonth() + 1) + + pad(d.getDate()) + + pad(d.getHours()) + + pad(d.getMinutes()) + + pad(d.getSeconds()) + ); +} + +function appendTimestamp(filename: string, stamp: string): string { + const ext = path.extname(filename); + const base = ext ? filename.slice(0, -ext.length) : filename; + return `${base}_${stamp}${ext}`; +} + +function getPickerDefaultUri(): vscode.Uri | undefined { + const folders = vscode.workspace.workspaceFolders; + if (!folders || folders.length === 0) return undefined; + const root = folders[0].uri.fsPath; + const dist = path.join(root, 'dist'); + if (fs.existsSync(dist) && fs.statSync(dist).isDirectory()) { + return vscode.Uri.file(dist); } + return vscode.Uri.file(root); } function getHtml(): string {