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
+43
View File
@@ -87,6 +87,11 @@ ApplicationWindow {
}
MenuSeparator { }
Action { text: qsTr("Настройки…"); onTriggered: settingsDialog.open() }
Action {
text: qsTr("Настройки хранилища…")
enabled: fileStore.ready
onTriggered: vaultSettingsDialog.open()
}
Action { text: qsTr("Выход"); onTriggered: window.close() }
}
Menu {
@@ -119,6 +124,18 @@ ApplicationWindow {
}
}
}
MenuSeparator { }
Action {
text: qsTr("Свойства заметки…")
enabled: documentManager.activeIndex >= 0 && fileStore.ready
onTriggered: {
const p = documentManager.pathAt(documentManager.activeIndex)
if (p.length>0) {
filePropsDialog.filePath = p
filePropsDialog.open()
}
}
}
}
Menu {
title: qsTr("&Вид")
@@ -183,6 +200,32 @@ ApplicationWindow {
id: settingsDialog
}
VaultSettingsDialog {
id: vaultSettingsDialog
}
FilePropertiesDialog {
id: filePropsDialog
}
// Fallback для пути визарда: хранилище открыли прямо в этом окне
// (не через WindowController) — открываем настройки и базу здесь.
// Обычный путь уже подключён в C++, повторный open() безвреден (guard ниже).
function ensureVaultDb() {
if (!fileStore.ready)
return
if (vaultDatabase.isOpen && vaultDatabase.vault === fileStore.vault)
return
vaultSettings.open(fileStore.vault)
if (vaultDatabase.open(fileStore.vault))
mdParser.setDatabaseForVault(fileStore.vault, vaultDatabase)
}
Connections {
target: fileStore
function onVaultChanged() { window.ensureVaultDb() }
function onReadyChanged() { if (fileStore.ready) window.ensureVaultDb() }
}
Popup {
id: vaultSwitcher
x: 12