Correctly parse account server url when migration from legacy config
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 11 Jan 2023 18:22:56 +0000 (19:22 +0100)
committerClaudio Cambra <claudio.cambra@gmail.com>
Mon, 23 Jan 2023 15:29:01 +0000 (16:29 +0100)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/accountmanager.cpp

index f27d056ea06b23afba957792261089daca380ff4..a2cfd8d1b4ca193d0136efac4911a2d7aedb8ba6 100644 (file)
@@ -188,16 +188,31 @@ bool AccountManager::restoreFromLegacySettings()
                 qCInfo(lcAccountManager) << "Migrate: overrideUrl" << cleanOverrideUrl;
 
                 if (!cleanOverrideUrl.isEmpty()) {
-                    const auto oCUrl = oCSettings->value(QLatin1String(urlC)).toString();
-                    const auto cleanOCUrl = oCUrl.endsWith('/') ? oCUrl.chopped(1) : oCUrl;
-
-                    // in case the urls are equal reset the settings object to read from
-                    // the ownCloud settings object
-                    qCInfo(lcAccountManager) << "Migrate oC config if " << cleanOCUrl << " == " << cleanOverrideUrl << ":"
-                                             << (cleanOCUrl == cleanOverrideUrl ? "Yes" : "No");
-                    if (cleanOCUrl == cleanOverrideUrl) {
-                        qCInfo(lcAccountManager) << "Copy settings" << oCSettings->allKeys().join(", ");
-                        settings = std::move(oCSettings);
+                    oCSettings->beginGroup(QLatin1String(accountsC));
+                    const auto accountsChildGroups = oCSettings->childGroups();
+
+                    for (const auto &accountId : accountsChildGroups) {
+                        oCSettings->beginGroup(accountId);
+                        const auto oCUrl = oCSettings->value(QLatin1String(urlC)).toString();
+                        const auto cleanOCUrl = oCUrl.endsWith('/') ? oCUrl.chopped(1) : oCUrl;
+
+                        // in case the urls are equal reset the settings object to read from
+                        // the ownCloud settings object
+                        qCInfo(lcAccountManager) << "Migrate oC config if " << cleanOCUrl << " == " << cleanOverrideUrl << ":"
+                                                 << (cleanOCUrl == cleanOverrideUrl ? "Yes" : "No");
+                        if (cleanOCUrl == cleanOverrideUrl) {
+                            qCInfo(lcAccountManager) << "Copy settings" << oCSettings->allKeys().join(", ");
+                            oCSettings->endGroup(); // current accountID group
+                            oCSettings->endGroup(); // accounts group
+                            settings = std::move(oCSettings);
+                            break;
+                        }
+
+                        oCSettings->endGroup();
+                    }
+
+                    if (oCSettings) {
+                        oCSettings->endGroup();
                     }
                 } else {
                     qCInfo(lcAccountManager) << "Copy settings" << oCSettings->allKeys().join(", ");