Skip to content

Commit 82181cc

Browse files
committed
refactor: use new migration class.
Signed-off-by: Camila Ayres <hello@camilasan.com>
1 parent 49c121e commit 82181cc

5 files changed

Lines changed: 38 additions & 92 deletions

File tree

src/gui/accountmanager.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#if !DISABLE_ACCOUNT_MIGRATION
2121
#include "legacyaccountselectiondialog.h"
2222
#endif
23+
#include "settings/migration.h"
2324

2425
#include <QSettings>
2526
#include <QDir>
@@ -339,7 +340,8 @@ bool AccountManager::restoreFromLegacySettings()
339340
configFile.setDownloadLimit(settings->value(ConfigFile::downloadLimitC, configFile.downloadLimit()).toInt());
340341

341342
// Try to load the single account.
342-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::SetupUsers);
343+
auto migration = configFile.migration();
344+
migration.setMigrationPhase(Migration::MigrationPhase::SetupUsers);
343345
if (!settings->childKeys().isEmpty()) {
344346
settings->beginGroup(accountsC);
345347
const auto childGroups = selectedAccountIds.isEmpty() ? settings->childGroups() : selectedAccountIds;
@@ -534,8 +536,9 @@ void AccountManager::migrateNetworkSettings(const AccountPtr &account, const QSe
534536

535537
// Override user settings with global settings if user is set to use global settings
536538
ConfigFile configFile;
539+
auto migration = configFile.migration();
537540
auto accountProxySetting = settings.value(networkProxySettingC).toInt();
538-
if (accountProxySetting == 0 && configFile.isMigrationInProgress()) {
541+
if (accountProxySetting == 0 && migration.isInProgress()) {
539542
accountProxyType = static_cast<QNetworkProxy::ProxyType>(configFile.proxyType());
540543
accountProxyHost = configFile.proxyHostName();
541544
accountProxyPort = configFile.proxyPort();
@@ -666,8 +669,9 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings)
666669
acc->setDownloadLimit(settings.value(networkDownloadLimitC).toInt());
667670

668671
ConfigFile configFile;
672+
auto migration = configFile.migration();
669673
const auto proxyPasswordKey = QString(acc->userIdAtHostWithPort() + networkProxyPasswordKeychainKeySuffixC);
670-
const auto appName = configFile.isUnbrandedToBrandedMigrationInProgress() ? ConfigFile::unbrandedAppName
674+
const auto appName = migration.isUnbrandedToBrandedMigration() ? ConfigFile::unbrandedAppName
671675
: Theme::instance()->appName();
672676
const auto job = new QKeychain::ReadPasswordJob(appName, this);
673677
job->setKey(proxyPasswordKey);

src/gui/accountstate.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "ocsuserstatusconnector.h"
1818
#include "pushnotifications.h"
1919
#include "networkjobs.h"
20+
#include "settings/migration.h"
2021

2122
#include <QSettings>
2223
#include <QTimer>
@@ -297,9 +298,10 @@ void AccountState::checkConnectivity()
297298
if (!account()->credentials()->wasFetched()) {
298299
_waitingForNewCredentials = true;
299300
ConfigFile configFile;
300-
const auto shouldTryUnbrandedToBrandedMigration = configFile.shouldTryUnbrandedToBrandedMigration();
301+
auto migration = configFile.migration();
302+
const auto shouldTryUnbrandedToBrandedMigration = migration.shouldTryUnbrandedToBrandedMigration();
301303
qCDebug(lcAccountState) << "shouldTryUnbrandedToBrandedMigration?" << shouldTryUnbrandedToBrandedMigration;
302-
qCDebug(lcAccountState) << "migrationPhase?" << configFile.migrationPhase();
304+
qCDebug(lcAccountState) << "migrationPhase?" << migration.migrationPhase();
303305
const auto appName = shouldTryUnbrandedToBrandedMigration ? configFile.unbrandedAppName : "";
304306
account()->credentials()->fetchFromKeychain(appName);
305307
return;
@@ -498,8 +500,9 @@ void AccountState::slotCredentialsFetched(AbstractCredentials *)
498500
<< "attempting to connect";
499501
_waitingForNewCredentials = false;
500502
ConfigFile configFile;
501-
if (configFile.isMigrationInProgress()) {
502-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::Done);
503+
auto migration = configFile.migration();
504+
if (migration.isInProgress()) {
505+
migration.setMigrationPhase(Migration::MigrationPhase::Done);
503506
}
504507
checkConnectivity();
505508
}

src/gui/application.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "common/vfs.h"
4040

4141
#include "config.h"
42+
#include "settings/migration.h"
4243

4344
#if defined(Q_OS_WIN)
4445
#include <windows.h>
@@ -121,21 +122,22 @@ namespace {
121122
bool Application::configVersionMigration()
122123
{
123124
ConfigFile configFile;
124-
const auto shouldTryToMigrate = configFile.shouldTryToMigrate();
125+
Migration migration;
126+
const auto shouldTryToMigrate = migration.shouldTryToMigrate();
125127
if (!shouldTryToMigrate) {
126128
qCInfo(lcApplication) << "This is not an upgrade/downgrade/migration. Proceed to read current application config file.";
127-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::Done);
129+
migration.setMigrationPhase(Migration::MigrationPhase::Done);
128130
return false;
129131
}
130132

131-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::SetupConfigFile);
133+
migration.setMigrationPhase(Migration::MigrationPhase::SetupConfigFile);
132134
QStringList deleteKeys, ignoreKeys;
133135
AccountManager::backwardMigrationSettingsKeys(&deleteKeys, &ignoreKeys);
134136
FolderMan::backwardMigrationSettingsKeys(&deleteKeys, &ignoreKeys);
135137
configFile.setClientPreviousVersionString(configFile.clientVersionString());
136138

137-
qCDebug(lcApplication) << "Migration is in progress:" << configFile.isMigrationInProgress();
138-
const auto versionChanged = configFile.isUpgrade() || configFile.isDowngrade();
139+
qCDebug(lcApplication) << "Migration is in progress:" << migration.isInProgress();
140+
const auto versionChanged = migration.versionChanged();
139141
if (versionChanged) {
140142
qCInfo(lcApplication) << "Version changed. Removing updater settings from config.";
141143
configFile.cleanUpdaterConfiguration();
@@ -181,7 +183,7 @@ bool Application::configVersionMigration()
181183
"Continuing will mean <b>%2 these settings</b>.<br>"
182184
"<br>"
183185
"The current configuration file was already backed up to <i>%3</i>.")
184-
.arg((configFile.isDowngrade() ? tr("newer", "newer software version") : tr("older", "older software version")),
186+
.arg((Migration().isDowngrade() ? tr("newer", "newer software version") : tr("older", "older software version")),
185187
deleteKeys.isEmpty()? tr("ignoring") : tr("deleting"),
186188
backupFilesList.join("<br>")));
187189
box.addButton(tr("Quit"), QMessageBox::AcceptRole);
@@ -493,19 +495,20 @@ void Application::setupAccountsAndFolders()
493495
{
494496
_folderManager.reset(new FolderMan);
495497
ConfigFile configFile;
496-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::SetupUsers);
498+
auto migration = configFile.migration();
499+
migration.setMigrationPhase(Migration::MigrationPhase::SetupUsers);
497500
const auto accountsRestoreResult = restoreLegacyAccount();
498501
const auto accounts = AccountManager::instance()->accounts();
499502
if (accountsRestoreResult != AccountManager::AccountsRestoreSuccessFromLegacyVersion
500-
&& accounts.empty()) {
503+
|| accounts.empty()) {
501504
qCWarning(lcApplication) << "Migration result: " << accountsRestoreResult;
502505
qCDebug(lcApplication) << "is migration disabled?" << DISABLE_ACCOUNT_MIGRATION;
503506
qCWarning(lcApplication) << "No accounts were migrated, prompting user to set up accounts and folders from scratch.";
504-
507+
migration.setMigrationPhase(Migration::MigrationPhase::Done);
505508
return;
506509
}
507510

508-
configFile.setMigrationPhase(ConfigFile::MigrationPhase::SetupFolders);
511+
migration.setMigrationPhase(Migration::MigrationPhase::SetupFolders);
509512
const auto foldersListSize = FolderMan::instance()->setupFolders();
510513
FolderMan::instance()->setSyncEnabled(true);
511514

@@ -519,6 +522,7 @@ void Application::setupAccountsAndFolders()
519522

520523
const auto accountsListSize = accounts.size();
521524
if (accountsRestoreResult == AccountManager::AccountsRestoreSuccessFromLegacyVersion
525+
&& accountsListSize > 0
522526
&& Theme::instance()->displayLegacyImportDialog()
523527
&& !AccountManager::instance()->forceLegacyImport()) {
524528
const auto accountsRestoreMessage = accountsListSize > 1

src/libsync/configfile.cpp

Lines changed: 6 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "theme.h"
1515
#include "updatechannel.h"
1616
#include "version.h"
17+
#include "settings/migration.h"
1718

1819
#ifndef TOKEN_AUTH_ONLY
1920
#include <QWidget>
@@ -89,7 +90,7 @@ Q_LOGGING_CATEGORY(lcConfigFile, "nextcloud.sync.configfile", QtInfoMsg)
8990

9091
QString ConfigFile::_confDir = {};
9192
QString ConfigFile::_discoveredLegacyConfigPath = {};
92-
ConfigFile::MigrationPhase ConfigFile::_migrationPhase = ConfigFile::MigrationPhase::NotStarted;
93+
Migration ConfigFile::_migration = Migration{};
9394

9495
static chrono::milliseconds millisecondsValue(const QSettings &setting, const char *key,
9596
chrono::milliseconds defaultValue)
@@ -324,7 +325,7 @@ void ConfigFile::restoreGeometryHeader(QHeaderView *header)
324325
QVariant ConfigFile::getPolicySetting(const QString &setting, const QVariant &defaultValue) const
325326
{
326327
if (Utility::isWindows()) {
327-
const auto appName = isUnbrandedToBrandedMigrationInProgress() ? unbrandedAppName : Theme::instance()->appNameGUI();
328+
const auto appName = migration().isUnbrandedToBrandedMigration() ? unbrandedAppName : Theme::instance()->appNameGUI();
328329
// check for policies first and return immediately if a value is found.
329330
QSettings userPolicy(QString::fromLatin1(R"(HKEY_CURRENT_USER\Software\Policies\%1\%2)").arg(APPLICATION_VENDOR, appName),
330331
QSettings::NativeFormat);
@@ -819,7 +820,7 @@ QVariant ConfigFile::getValue(const QString &param, const QString &group,
819820
const QVariant &defaultValue) const
820821
{
821822
QVariant systemSetting;
822-
const auto appName = isUnbrandedToBrandedMigrationInProgress() ? unbrandedAppName : Theme::instance()->appNameGUI();
823+
const auto appName = migration().isUnbrandedToBrandedMigration() ? unbrandedAppName : Theme::instance()->appNameGUI();
823824
if (Utility::isMac()) {
824825
QSettings systemSettings(QLatin1String("/Library/Preferences/" APPLICATION_REV_DOMAIN ".plist"), QSettings::NativeFormat);
825826
if (!group.isEmpty()) {
@@ -1369,60 +1370,8 @@ void ConfigFile::removeFileProviderDomainMappingByDomainIdentifier(const QString
13691370
}
13701371
}
13711372

1372-
bool ConfigFile::isUpgrade() const
1373-
{
1374-
const auto currentVersion = QVersionNumber::fromString(MIRALL_VERSION_STRING);
1375-
const auto previousVersion = QVersionNumber::fromString(clientPreviousVersionString());
1376-
return currentVersion > previousVersion;
1377-
}
1378-
1379-
bool ConfigFile::isDowngrade() const
1380-
{
1381-
const auto currentVersion = QVersionNumber::fromString(MIRALL_VERSION_STRING);
1382-
const auto previousVersion = QVersionNumber::fromString(clientPreviousVersionString());
1383-
return previousVersion > currentVersion;
1384-
}
1385-
1386-
bool ConfigFile::shouldTryUnbrandedToBrandedMigration() const
1387-
{
1388-
return migrationPhase() == ConfigFile::MigrationPhase::SetupFolders
1389-
&& Theme::instance()->appName() != unbrandedAppName;
1390-
}
1391-
1392-
bool ConfigFile::isUnbrandedToBrandedMigrationInProgress() const
1393-
{
1394-
return isMigrationInProgress() && Theme::instance()->appName() != unbrandedAppName;
1395-
}
1396-
1397-
bool ConfigFile::shouldTryToMigrate() const
1398-
{
1399-
return !isClientVersionSet() && (isUpgrade() || isDowngrade());
1400-
}
1401-
1402-
bool ConfigFile::isClientVersionSet() const
1403-
{
1404-
const auto currentVersion = QVersionNumber::fromString(MIRALL_VERSION_STRING);
1405-
const auto clientConfigVersion = QVersionNumber::fromString(clientVersionString());
1406-
const auto isVersionSet = !clientConfigVersion.isNull() && !clientPreviousVersionString().isEmpty();
1407-
return isVersionSet && clientConfigVersion == currentVersion;
1408-
}
1409-
1410-
bool ConfigFile::isMigrationInProgress() const
1411-
{
1412-
return _migrationPhase != MigrationPhase::NotStarted && _migrationPhase != MigrationPhase::Done;
1413-
}
1414-
1415-
void ConfigFile::setMigrationPhase(const MigrationPhase phase)
1416-
{
1417-
// do not rollback
1418-
if (phase > _migrationPhase) {
1419-
_migrationPhase = phase;
1420-
}
1421-
}
1422-
1423-
ConfigFile::MigrationPhase ConfigFile::migrationPhase() const
1424-
{
1425-
return _migrationPhase;
1373+
Migration &ConfigFile::migration() {
1374+
return _migration;
14261375
}
14271376

14281377
}

src/libsync/configfile.h

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class ExcludedFiles;
2323
namespace OCC {
2424

2525
class AbstractCredentials;
26+
class Migration;
2627

2728
/**
2829
* @brief The ConfigFile class
@@ -264,23 +265,8 @@ class OWNCLOUDSYNC_EXPORT ConfigFile
264265
void removeFileProviderDomainUuidMapping(const QString &accountId);
265266
void removeFileProviderDomainMappingByDomainIdentifier(const QString domainIdentifier);
266267

267-
/// Helper function for migration/upgrade proccess
268-
enum MigrationPhase {
269-
NotStarted,
270-
SetupConfigFile,
271-
SetupUsers,
272-
SetupFolders,
273-
Done
274-
};
275-
[[nodiscard]] bool isUpgrade() const;
276-
[[nodiscard]] bool isDowngrade() const;
277-
[[nodiscard]] bool shouldTryUnbrandedToBrandedMigration() const;
278-
[[nodiscard]] bool isUnbrandedToBrandedMigrationInProgress() const;
279-
[[nodiscard]] bool shouldTryToMigrate() const;
280-
[[nodiscard]] bool isClientVersionSet() const;
281-
[[nodiscard]] bool isMigrationInProgress() const;
282-
[[nodiscard]] MigrationPhase migrationPhase() const;
283-
void setMigrationPhase(const MigrationPhase phase);
268+
[[nodiscard]] static Migration &migration();
269+
284270
static constexpr char unbrandedAppName[] = "Nextcloud";
285271
static constexpr char legacyAppName[] = "Owncloud";
286272

@@ -326,7 +312,7 @@ class OWNCLOUDSYNC_EXPORT ConfigFile
326312

327313
static QString _confDir;
328314
static QString _discoveredLegacyConfigPath;
329-
static MigrationPhase _migrationPhase;
315+
static Migration _migration;
330316
};
331317
}
332318
#endif // CONFIGFILE_H

0 commit comments

Comments
 (0)