mirror of
https://github.com/chenx-dust/EZ4Connect.git
synced 2026-09-20 10:23:33 +08:00
182 lines
4.0 KiB
C++
182 lines
4.0 KiB
C++
#include "profileservice.h"
|
|
|
|
#include <QFileInfo>
|
|
#include <QSettings>
|
|
|
|
#include <utility>
|
|
|
|
#include "application/profilebackend.h"
|
|
|
|
ProfileService::ProfileService(
|
|
std::unique_ptr<ProfileBackend> backend,
|
|
const QString &overrideConfigPath,
|
|
QObject *parent
|
|
)
|
|
: QObject(parent),
|
|
profileBackend(std::move(backend)),
|
|
currentSettings(nullptr),
|
|
overrideConfiguration(!overrideConfigPath.isEmpty())
|
|
{
|
|
if (!overrideConfiguration)
|
|
{
|
|
currentId = profileBackend->activeProfile();
|
|
currentSettings = new QSettings(
|
|
profileBackend->profilePath(currentId),
|
|
QSettings::IniFormat
|
|
);
|
|
}
|
|
else
|
|
{
|
|
currentId = "custom";
|
|
currentSettings = new QSettings(overrideConfigPath, QSettings::IniFormat);
|
|
}
|
|
}
|
|
|
|
ProfileService::~ProfileService()
|
|
{
|
|
currentSettings->sync();
|
|
delete currentSettings;
|
|
}
|
|
|
|
QSettings *ProfileService::settings() const
|
|
{
|
|
return currentSettings;
|
|
}
|
|
|
|
QString ProfileService::currentProfileId() const
|
|
{
|
|
return currentId;
|
|
}
|
|
|
|
QStringList ProfileService::profiles() const
|
|
{
|
|
return profileBackend->listProfiles();
|
|
}
|
|
|
|
bool ProfileService::usesOverrideConfiguration() const
|
|
{
|
|
return overrideConfiguration;
|
|
}
|
|
|
|
bool ProfileService::switchTo(const QString &profileId)
|
|
{
|
|
if (!overrideConfiguration && profileId == currentId)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (!QFileInfo::exists(profileBackend->profilePath(profileId)))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
currentSettings->sync();
|
|
if (!profileBackend->setActiveProfile(profileId))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
delete currentSettings;
|
|
currentSettings = new QSettings(
|
|
profileBackend->profilePath(profileId),
|
|
QSettings::IniFormat
|
|
);
|
|
currentId = profileId;
|
|
overrideConfiguration = false;
|
|
return true;
|
|
}
|
|
|
|
QString ProfileService::createAndSwitch(const QString &requestedName)
|
|
{
|
|
currentSettings->sync();
|
|
const QString profileId = profileBackend->createProfile(
|
|
requestedName,
|
|
currentSettings->fileName()
|
|
);
|
|
if (profileId.isEmpty() || !switchTo(profileId))
|
|
{
|
|
if (!profileId.isEmpty())
|
|
{
|
|
profileBackend->removeProfile(profileId);
|
|
}
|
|
return {};
|
|
}
|
|
return profileId;
|
|
}
|
|
|
|
bool ProfileService::renameCurrent(const QString &newProfileId)
|
|
{
|
|
if (currentId.isEmpty() || overrideConfiguration)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
currentSettings->sync();
|
|
if (!profileBackend->renameProfile(currentId, newProfileId))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
const QString previousId = currentId;
|
|
if (!profileBackend->setActiveProfile(newProfileId))
|
|
{
|
|
profileBackend->renameProfile(newProfileId, previousId);
|
|
return false;
|
|
}
|
|
|
|
currentId = newProfileId;
|
|
delete currentSettings;
|
|
currentSettings = new QSettings(
|
|
profileBackend->profilePath(currentId),
|
|
QSettings::IniFormat
|
|
);
|
|
return true;
|
|
}
|
|
|
|
bool ProfileService::removeCurrentAndSwitchToDefault()
|
|
{
|
|
if (currentId.isEmpty() || overrideConfiguration)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
const QString removedProfileId = currentId;
|
|
const QString defaultProfilePath = profileBackend->profilePath("");
|
|
if (!QFileInfo::exists(defaultProfilePath))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
currentSettings->sync();
|
|
if (!profileBackend->setActiveProfile(""))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!profileBackend->removeProfile(removedProfileId))
|
|
{
|
|
profileBackend->setActiveProfile(removedProfileId);
|
|
return false;
|
|
}
|
|
|
|
delete currentSettings;
|
|
currentSettings = new QSettings(defaultProfilePath, QSettings::IniFormat);
|
|
currentId.clear();
|
|
return true;
|
|
}
|
|
|
|
QString ProfileService::normalizeProfileId(const QString &name) const
|
|
{
|
|
return profileBackend->normalizeProfileId(name);
|
|
}
|
|
|
|
bool ProfileService::silentStartEnabled() const
|
|
{
|
|
return profileBackend->silentStartEnabled();
|
|
}
|
|
|
|
void ProfileService::migrateAutoStartSetting(bool enabled)
|
|
{
|
|
profileBackend->setAutoStartEnabled(enabled);
|
|
}
|