Files
Flora/src/main.cpp
T
grendervill fdf59f5b39 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 зелёных)
2026-09-07 16:30:06 +03:00

91 lines
4.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlError>
#include <QQmlContext>
#include <QCommandLineParser>
#include <QQuickStyle>
#include <QSettings>
#include "app/VaultManager.h"
#include "app/WindowController.h"
#include "core/DocumentManager.h"
#include "core/SettingsStore.h"
#include "core/VaultIndex.h"
#include "git/GitManager.h"
#include "markdown/MdParser.h"
#include "sync/SyncManager.h"
#include <cmark-gfm.h>
#include <git2.h>
int main(int argc, char *argv[])
{
// Отключаем runtime QML-кэш — гарантирует что QML-изменения подхватываются сразу
qputenv("QML_DISABLE_DISK_CACHE", "1");
// Единообразный светлый стиль — без нативной тёмной темы macOS
QQuickStyle::setStyle("Basic");
QGuiApplication app(argc, argv);
app.setApplicationName("Flora");
app.setOrganizationName("Flora");
app.setApplicationVersion("0.0.1");
QCommandLineParser parser;
parser.setApplicationDescription("Минималистичный markdown-заметочник с git-историей");
parser.addHelpOption();
parser.addVersionOption();
parser.process(app);
// Версии библиотек — быстрая проверка, что зависимости подключены и слинкованы.
int gitMajor = 0, gitMinor = 0, gitRev = 0;
git_libgit2_version(&gitMajor, &gitMinor, &gitRev);
qInfo("Flora %s | cmark-gfm %s | libgit2 %d.%d.%d",
qPrintable(app.applicationVersion()),
cmark_version_string(),
gitMajor, gitMinor, gitRev);
SettingsStore settingsStore;
GitManager gitManager;
SyncManager syncManager;
VaultManager vaultManager(&settingsStore, &gitManager);
DocumentManager documentManager;
MdParser mdParser;
VaultIndex vaultIndex;
QQmlApplicationEngine engine;
QObject::connect(&engine, &QQmlApplicationEngine::warnings,
[](const QList<QQmlError> &list) {
for (const QQmlError &e : list)
qWarning("QML: %s", qPrintable(e.toString()));
});
engine.rootContext()->setContextProperty("settingsStore", &settingsStore);
engine.rootContext()->setContextProperty("gitManager", &gitManager);
engine.rootContext()->setContextProperty("syncManager", &syncManager);
engine.rootContext()->setContextProperty("vaultManager", &vaultManager);
engine.rootContext()->setContextProperty("documentManager", &documentManager);
engine.rootContext()->setContextProperty("mdParser", &mdParser);
engine.rootContext()->setContextProperty("vaultIndex", &vaultIndex);
WindowController windowController(
&engine, QStringLiteral("qrc:/qt/qml/Flora/qml/MainWindow.qml"), &mdParser);
engine.rootContext()->setContextProperty("windowController", &windowController);
// При открытии любого окна — запоминаем его как последнее выбранное (для следующего запуска)
QObject::connect(&windowController, &WindowController::windowOpened,
&settingsStore, [&](const QString &vault){
if (!vault.isEmpty()) settingsStore.setCurrentVault(vault);
});
// Основное окно = последнее выбранное хранилище (а не последнее добавленное).
// currentVault теперь обновляется при каждом выборе в переключателе.
windowController.openWindow(settingsStore.currentVault());
// Окна создаются через QQmlComponent (WindowController), поэтому проверяем
// количество окон, а не engine.rootObjects() (для таких объектов он пуст).
if (windowController.windowCount() == 0) {
qWarning("=== Не удалось создать окно приложения ===");
return -1;
}
return app.exec();
}