SQLite-база хранилища: свойства, ~sql-блоки, настройки хранилища

- Frontmatter: шапка --- ключ: значение (источник правды свойств)
- VaultSettings: .flora/settings.json (журнал, sqlEnabled, sqlMaxRows)
- Database: files/tags/file_tags/links/properties, только SELECT/WITH
  на read-only соединении (mode=ro + query_only + зонд), лимит строк
- MdParser: ~sql-блоки таблицей (parseBlocks + Renderer), шапка скрыта в просмотре
- Окно: per-window Database/VaultSettings, sync при сохранении, дебаунс reindex
- QML: VaultSettingsDialog, FilePropertiesDialog, меню, автообновление ~sql
- FileStore.journalDir, DocumentManager.reloadDocument
- Тест flora_db_test (23/23 зелёных)
This commit is contained in:
2026-09-07 16:30:06 +03:00
parent 0a46471cc6
commit fdf59f5b39
26 changed files with 1972 additions and 17 deletions
+10
View File
@@ -44,6 +44,16 @@ Item {
// contentItem.contentY = 0
}
// База изменилась (переиндексация, правка свойств, вкл/выкл SQL) —
// ~sql-блоки надо пересчитать. Дебаунс против шторма при reindex.
Timer { id: dbDebounce; interval: 400; onTriggered: root.update() }
Connections {
target: vaultDatabase
function onChanged() { dbDebounce.restart() }
function onQueryEnabledChanged() { dbDebounce.restart() }
function onMaxRowsChanged() { dbDebounce.restart() }
}
Connections {
target: mdParser
function onBlocksReady(reqId, blocks) {
+1 -1
View File
@@ -181,7 +181,7 @@ Item {
readonly property bool hasNote: {
const _ = cal.currentMonth
if (modelData <= 0 || !fileStore.ready) return false
return fileStore.fileExists(fileStore.vault + "/Журнал/" + ds + ".md")
return fileStore.fileExists(fileStore.vault + "/" + fileStore.journalDir + "/" + ds + ".md")
}
readonly property bool isSelected: false // можно подсветить выбранный день
+2 -3
View File
@@ -35,9 +35,8 @@ Item {
function onActiveIndexChanged() { root.refreshLinksTags() }
function onOpenTabsChanged() { root.refreshLinksTags() }
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)
}
// Сохранение обрабатывает C++ (WindowController): сначала индекс, потом база.
// Здесь не дублируем, иначе двойной парс файла.
}
Connections { target: vaultIndex; function onIndexChanged() { root.refreshLinksTags() } }
// Правка активного файла: обновить только его (один парс), а не всё хранилище