Add persistent default temp directory setting with web UI
- Add settings.json persistence (load/save) in backend - Add GET/POST /api/settings endpoints for default_temp_dir - Add Default Temp Directory config UI in Temporary Storage section - Auto-fallback: jobs use saved default if no per-job temp_dir set - Per-job Advanced Options placeholder syncs with saved default - Add settings.json to .gitignore for per-machine config
This commit is contained in:
@@ -2122,6 +2122,55 @@ async function initializeApp() {
|
||||
|
||||
// Load initial temp info
|
||||
loadTempInfo();
|
||||
|
||||
// Default temp directory setting
|
||||
const saveTempDirBtn = document.getElementById("save-temp-dir-btn");
|
||||
const defaultTempDirInput = document.getElementById("default-temp-dir-input");
|
||||
const tempDirStatus = document.getElementById("temp-dir-status");
|
||||
|
||||
// Load saved default temp dir on init
|
||||
loadDefaultTempDir();
|
||||
|
||||
if (saveTempDirBtn) {
|
||||
saveTempDirBtn.addEventListener("click", async () => {
|
||||
const newDir = defaultTempDirInput ? defaultTempDirInput.value.trim() : "";
|
||||
tempDirStatus.textContent = "";
|
||||
tempDirStatus.style.color = "";
|
||||
saveTempDirBtn.disabled = true;
|
||||
saveTempDirBtn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Saving...';
|
||||
try {
|
||||
const res = await fetch("/api/settings", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ default_temp_dir: newDir })
|
||||
});
|
||||
if (res.ok) {
|
||||
tempDirStatus.style.color = "var(--success, #4caf50)";
|
||||
tempDirStatus.textContent = newDir
|
||||
? `\u2713 Default temp directory saved: ${newDir}`
|
||||
: "\u2713 Reset to project default temp/ directory.";
|
||||
// Also update the per-job input placeholder/value
|
||||
const perJobInput = document.getElementById("temp-dir-input");
|
||||
if (perJobInput && !perJobInput.value.trim()) {
|
||||
perJobInput.placeholder = newDir
|
||||
? `Default: ${newDir} (override here)`
|
||||
: "e.g. /mnt/fast_ssd/temp (Leave empty for default temp/)";
|
||||
}
|
||||
} else {
|
||||
const errData = await res.json().catch(() => ({}));
|
||||
tempDirStatus.style.color = "var(--danger, #f44336)";
|
||||
tempDirStatus.textContent = `\u2717 ${errData.detail || "Failed to save setting."}`;
|
||||
}
|
||||
} catch (err) {
|
||||
tempDirStatus.style.color = "var(--danger, #f44336)";
|
||||
tempDirStatus.textContent = "\u2717 Network error saving setting.";
|
||||
console.error(err);
|
||||
} finally {
|
||||
saveTempDirBtn.disabled = false;
|
||||
saveTempDirBtn.innerHTML = '<i class="fa-solid fa-floppy-disk"></i> Save';
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function loadTempInfo() {
|
||||
@@ -2220,4 +2269,22 @@ async function loadTempInfo() {
|
||||
}
|
||||
}
|
||||
|
||||
async function loadDefaultTempDir() {
|
||||
try {
|
||||
const res = await fetch("/api/settings");
|
||||
if (!res.ok) return;
|
||||
const settings = await res.json();
|
||||
const savedDir = settings.default_temp_dir || "";
|
||||
const defaultInput = document.getElementById("default-temp-dir-input");
|
||||
if (defaultInput) defaultInput.value = savedDir;
|
||||
// Update per-job input placeholder
|
||||
const perJobInput = document.getElementById("temp-dir-input");
|
||||
if (perJobInput && savedDir && !perJobInput.value.trim()) {
|
||||
perJobInput.placeholder = `Default: ${savedDir} (override here)`;
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Failed to load settings:", err);
|
||||
}
|
||||
}
|
||||
|
||||
initializeApp();
|
||||
|
||||
Reference in New Issue
Block a user