Фаза 1: мастер первого запуска — SettingsStore, GitManager (auto-init+коммиты), SyncManager (проверка соединений+ErrorCatalog), WelcomeWizard/ProviderSetupGuide; тесты smoke/git/vault (12/12)
This commit is contained in:
+50
-11
@@ -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
@@ -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;
|
||||
};
|
||||
Reference in New Issue
Block a user