Инкрементальный индекс, пресеты автосейва, диалог Настройки
- 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:
@@ -26,16 +26,31 @@ Item {
|
||||
target: fileStore
|
||||
function onVaultChanged() { if (fileStore.ready) vaultIndex.rebuild(fileStore.vault) }
|
||||
function onReadyChanged() { if (fileStore.ready) vaultIndex.rebuild(fileStore.vault) }
|
||||
// Внешнее изменение (синхронизация/другая программа): досинхронизировать индекс
|
||||
// по mtime — дёшево, без полного рескана
|
||||
function onExternalChanged() { if (fileStore.ready) vaultIndex.syncIncremental() }
|
||||
}
|
||||
Connections {
|
||||
target: documentManager
|
||||
function onActiveIndexChanged() { root.refreshLinksTags() }
|
||||
function onOpenTabsChanged() { root.refreshLinksTags() }
|
||||
function onContentChanged(i) { if (i === documentManager.activeIndex) { root.refreshLinksTags(); rebuildDebounce.restart() } }
|
||||
function onDocumentSaved() { rebuildDebounce.restart() }
|
||||
function onContentChanged(i) { if (i === documentManager.activeIndex) { root.refreshLinksTags(); indexDebounce.restart() } }
|
||||
function onDocumentSaved(idx, path) {
|
||||
if (fileStore.ready && path && path.length > 0) vaultIndex.updateFile(path)
|
||||
}
|
||||
}
|
||||
Connections { target: vaultIndex; function onIndexChanged() { root.refreshLinksTags() } }
|
||||
Timer { id: rebuildDebounce; interval: 800; onTriggered: if (fileStore.ready) vaultIndex.rebuild(fileStore.vault) }
|
||||
// Правка активного файла: обновить только его (один парс), а не всё хранилище
|
||||
Timer {
|
||||
id: indexDebounce
|
||||
interval: 800
|
||||
onTriggered: {
|
||||
if (fileStore.ready && documentManager.activeIndex >= 0) {
|
||||
const p = documentManager.pathAt(documentManager.activeIndex)
|
||||
if (p && p.length > 0) vaultIndex.updateFile(p)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Делаем панели ресайзабельными внутри правой колонки — увеличенная зона по всей ширине
|
||||
SplitView {
|
||||
|
||||
Reference in New Issue
Block a user