feat: add per-vault reindexing with selective reload based on modified vaults, simplify hidden files whitelist logic to include all sub-hidden files when parent is whitelisted, and auto-uncheck includeHidden when adding whitelist items

This commit is contained in:
2026-03-26 15:08:01 -04:00
parent 80e2a7fc53
commit ac962bd416
4 changed files with 146 additions and 14 deletions
+36 -6
View File
@@ -3231,6 +3231,9 @@
// --- Hidden Files Configuration ---
// Track which vaults have been modified
let modifiedVaults = new Set();
async function loadHiddenFilesSettings() {
const container = document.getElementById("hidden-files-vault-list");
if (!container) return;
@@ -3290,7 +3293,7 @@
document.createTextNode("Liste blanche")
]);
const whitelistHint = el("span", { class: "config-hint", style: "display:block;margin-bottom:8px" }, [
document.createTextNode("Dossiers cachés spécifiques à afficher (ex: .obsidian, .github)")
document.createTextNode("Dossiers cachés spécifiques à afficher (tous les sous-dossiers cachés seront inclus)")
]);
const whitelistItems = el("div", { class: "hidden-files-whitelist-items", id: `whitelist-items-${vault.name}` });
@@ -3330,10 +3333,20 @@
// Event listeners
const addBtn = addRow.querySelector("button");
const input = addRow.querySelector("input");
const checkbox = toggleRow.querySelector("input[type='checkbox']");
addBtn.addEventListener("click", () => addWhitelistItem(vault.name));
addBtn.addEventListener("click", () => {
addWhitelistItem(vault.name);
modifiedVaults.add(vault.name);
});
input.addEventListener("keypress", (e) => {
if (e.key === "Enter") addWhitelistItem(vault.name);
if (e.key === "Enter") {
addWhitelistItem(vault.name);
modifiedVaults.add(vault.name);
}
});
checkbox.addEventListener("change", () => {
modifiedVaults.add(vault.name);
});
});
}
@@ -3353,6 +3366,7 @@
const removeBtn = item.querySelector("button");
removeBtn.addEventListener("click", () => {
item.remove();
modifiedVaults.add(vaultName);
});
return item;
@@ -3361,6 +3375,7 @@
function addWhitelistItem(vaultName) {
const input = document.getElementById(`whitelist-input-${vaultName}`);
const container = document.getElementById(`whitelist-items-${vaultName}`);
const includeHiddenCheckbox = document.getElementById(`hidden-include-${vaultName}`);
if (!input || !container) return;
@@ -3378,6 +3393,11 @@
return;
}
// Auto-uncheck "Afficher tous les fichiers cachés" when adding to whitelist
if (includeHiddenCheckbox && includeHiddenCheckbox.checked) {
includeHiddenCheckbox.checked = false;
}
const item = createWhitelistItem(vaultName, normalizedValue);
container.appendChild(item);
input.value = "";
@@ -3414,6 +3434,7 @@
});
await Promise.all(promises);
modifiedVaults.clear();
showToast("✓ Paramètres sauvegardés", "success");
} catch (err) {
console.error("Failed to save hidden files settings:", err);
@@ -3434,9 +3455,18 @@
// Update button text to show reindexing phase
if (btn) { btn.textContent = "⏳ Réindexation..."; }
// Then trigger reindex with saved settings
await api("/api/index/reload");
showToast("✓ Réindexation terminée", "success");
// Reindex only modified vaults if any, otherwise reindex all
if (modifiedVaults.size > 0) {
const vaultsToReindex = Array.from(modifiedVaults);
for (const vaultName of vaultsToReindex) {
await api(`/api/index/reload/${encodeURIComponent(vaultName)}`);
}
showToast(`✓ Réindexation terminée (${vaultsToReindex.length} vault${vaultsToReindex.length > 1 ? 's' : ''})`, "success");
} else {
await api("/api/index/reload");
showToast("✓ Réindexation terminée", "success");
}
loadDiagnostics();
await Promise.all([loadVaults(), loadTags()]);
} catch (err) {