Фаза 1: мастер первого запуска — SettingsStore, GitManager (auto-init+коммиты), SyncManager (проверка соединений+ErrorCatalog), WelcomeWizard/ProviderSetupGuide; тесты smoke/git/vault (12/12)

This commit is contained in:
Flora (opencode)
2026-08-17 00:43:33 +03:00
parent 980fbcedcb
commit ed633ae036
18 changed files with 1412 additions and 29 deletions
+50 -11
View File
@@ -1,27 +1,66 @@
#include "app/VaultManager.h"
VaultManager::VaultManager(QObject *parent)
#include "core/SettingsStore.h"
#include "git/GitManager.h"
#include <QDir>
VaultManager::VaultManager(SettingsStore *settings, GitManager *git, QObject *parent)
: QObject(parent)
, m_settings(settings)
, m_git(git)
{
connect(m_settings, &SettingsStore::vaultsChanged,
this, &VaultManager::vaultsChanged);
connect(m_settings, &SettingsStore::currentVaultChanged,
this, &VaultManager::currentVaultChanged);
}
QStringList VaultManager::vaults() const
{
return m_vaults;
return m_settings->vaults();
}
QString VaultManager::currentVault() const
{
return m_currentVault;
return m_settings->currentVault();
}
void VaultManager::setCurrentVault(const QString &path)
QString VaultManager::createVault(const QString &path)
{
if (m_currentVault == path)
return;
m_currentVault = path;
if (!m_vaults.contains(path))
m_vaults.append(path);
emit currentVaultChanged();
emit vaultsChanged();
if (path.trimmed().isEmpty())
return QStringLiteral("Не указан путь к хранилищу.");
if (!QDir().mkpath(path))
return QStringLiteral("Не удалось создать папку «%1».").arg(path);
if (!m_git->initRepo(path)) {
emit operationError(m_git->lastError());
return m_git->lastError();
}
m_settings->addVault(path);
return QString();
}
QString VaultManager::openVault(const QString &path)
{
if (path.trimmed().isEmpty())
return QStringLiteral("Не указан путь к хранилищу.");
if (!QDir(path).exists())
return QStringLiteral("Папка «%1» не существует.").arg(path);
if (!m_git->initRepo(path)) {
emit operationError(m_git->lastError());
return m_git->lastError();
}
m_settings->addVault(path);
return QString();
}
void VaultManager::selectVault(const QString &path)
{
m_settings->setCurrentVault(path);
}
+22 -9
View File
@@ -3,29 +3,42 @@
#include <QObject>
#include <QStringList>
// Менеджер хранилищ: список известных хранилищ, основное хранилище,
// открытие нового хранилища в новом окне (мульти-окна).
// Реализация заполняется в Фазе 2; здесь — только каркас для скелета (Фаза 0).
class SettingsStore;
class GitManager;
// Менеджер хранилищ: список, создание/открытие, git-инициализация.
// Фаза 1: создание хранилища + автосоздание git-репозитория.
// Фаза 2 добавит мульти-окна (новое хранилище в новом окне).
class VaultManager : public QObject
{
Q_OBJECT
Q_PROPERTY(QStringList vaults READ vaults NOTIFY vaultsChanged)
Q_PROPERTY(QString currentVault READ currentVault WRITE setCurrentVault
NOTIFY currentVaultChanged)
Q_PROPERTY(QString currentVault READ currentVault NOTIFY currentVaultChanged)
public:
explicit VaultManager(QObject *parent = nullptr);
VaultManager(SettingsStore *settings, GitManager *git, QObject *parent = nullptr);
QStringList vaults() const;
QString currentVault() const;
void setCurrentVault(const QString &path);
// Создаёт хранилище: папка + git-репозиторий внутри. Возвращает "" при успехе
// или текст ошибки.
Q_INVOKABLE QString createVault(const QString &path);
// Открывает существующее хранилище (git-репозиторий внутри не обязателен —
// создаётся при необходимости). Возвращает текст ошибки или "".
Q_INVOKABLE QString openVault(const QString &path);
// Выбор хранилища пользователем по завершении мастера.
Q_INVOKABLE void selectVault(const QString &path);
signals:
void vaultsChanged();
void currentVaultChanged();
void operationError(const QString &message);
private:
QStringList m_vaults;
QString m_currentVault;
SettingsStore *m_settings;
GitManager *m_git;
};