Инкрементальный индекс, пресеты автосейва, диалог Настройки

- VaultIndex: updateFile/removeFile/syncIncremental (mtime+size), полный рескан только на старте/смене/внешних изменениях; relink висячих [[ссылок]] при создании файла; FileStore.externalChanged для внешних правок
- QML: сейвы и правки идут точечно, дерево — через syncIncremental
- Настройки: пресеты safe/balanced/eco/manual (диск 2/5/10с/выкл, коммит после паузы 5/15/60с/вручную), диалог с +/-, шкалами и подсказкой; коммит только в простое, в manual — по Ctrl+S
- Удалены highlightedCode, словный merge, fileDiffText/Html, 2-arg fileHistory; renderInner без побочек
- Тесты: инкремент индекса, пресеты, autosaveEnabled, ~~~-блоки
This commit is contained in:
2026-09-06 23:02:05 +03:00
parent 1f140d3433
commit 417d0273b7
20 changed files with 802 additions and 80 deletions
+51 -1
View File
@@ -14,6 +14,7 @@ constexpr auto kKeyTheme = "ui/theme";
constexpr auto kKeyLeftW = "ui/leftPanelWidth";
constexpr auto kKeyRightW = "ui/rightPanelWidth";
constexpr auto kKeyViewModes = "ui/viewModes";
constexpr auto kKeyAutosavePreset = "autosave/preset";
QString encodeKey(const QString &s) {
// Процент-кодирование чтобы избежать интерпретации "/" как разделителя групп в QSettings Ini
@@ -276,4 +277,53 @@ void SettingsStore::setViewModeForFile(const QString &vault, const QString &file
root.insert(encKey, cleanMode);
s.setValue(kKeyViewModes, root);
s.sync();
}
}
QString SettingsStore::autosavePreset() const
{
QSettings s;
const QString p = s.value(kKeyAutosavePreset, QStringLiteral("balanced")).toString();
if (p == "safe" || p == "balanced" || p == "eco" || p == "manual")
return p;
return QStringLiteral("balanced");
}
void SettingsStore::setAutosavePreset(const QString &p)
{
QString clean = p.trimmed();
if (clean != "safe" && clean != "balanced" && clean != "eco" && clean != "manual")
clean = QStringLiteral("balanced");
QSettings s;
if (s.value(kKeyAutosavePreset).toString() == clean)
return;
s.setValue(kKeyAutosavePreset, clean);
s.sync();
emit autosavePresetChanged();
}
int SettingsStore::autosaveDiskMs() const
{
const QString p = autosavePreset();
if (p == "safe") return 2000;
if (p == "eco") return 10000;
if (p == "manual") return 0;
return 5000; // balanced
}
int SettingsStore::autocommitIdleMs() const
{
const QString p = autosavePreset();
if (p == "safe") return 5000;
if (p == "eco") return 60000;
if (p == "manual") return 0;
return 15000; // balanced
}
bool SettingsStore::autosaveEnabled() const
{
return autosavePreset() != "manual";
}
bool SettingsStore::autocommitEnabled() const
{
return autosavePreset() != "manual";
}