Files
Flora/src/main.cpp
T

81 lines
3.4 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 "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[])
{
// Единообразный светлый стиль — без нативной тёмной темы 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"));
engine.rootContext()->setContextProperty("windowController", &windowController);
// Основное окно = последнее (основное) хранилище. Если хранилищ нет —
// откроется мастер первого запуска.
windowController.openWindow(settingsStore.currentVault());
// Окна создаются через QQmlComponent (WindowController), поэтому проверяем
// количество окон, а не engine.rootObjects() (для таких объектов он пуст).
if (windowController.windowCount() == 0) {
qWarning("=== Не удалось создать окно приложения ===");
return -1;
}
return app.exec();
}