From d72059b1fe76b7ff8a8eccc72a92c512d36ec9f3 Mon Sep 17 00:00:00 2001
From: Christian Kandeler <christian.kandeler@digia.com>
Date: Mon, 20 Jan 2014 14:00:04 +0100
Subject: [PATCH] QbsProjectManager: Use the qbs::Profile abstraction.

No need to poke around in the settings directly.

Change-Id: I689039a0cb0afd2e3a4c32b2108755d79c8fb4b6
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 .../qbsprojectmanager/qbsprojectmanager.cpp   | 59 ++++---------------
 .../qbsprojectmanager/qbsprojectmanager.h     |  3 +-
 2 files changed, 14 insertions(+), 48 deletions(-)

diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
index b26b6cc7cb7..d444acc173d 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
@@ -44,12 +44,12 @@
 #include <QVariantMap>
 
 #include <qbs.h>
+#include <tools/profile.h> // TODO: Do this in qbs.h.
 
-// qbs settings structure:
-const char PROFILE_LIST[] = "preferences.qtcreator.kit.";
-const char PROFILES_PREFIX[] = "profiles.";
+const QChar sep = QLatin1Char('.');
 
-const QChar sep = QChar(QLatin1Char('.'));
+static QString qtcProfileGroup() { return QLatin1String("preferences.qtcreator.kit"); }
+static QString qtcProfilePrefix() { return qtcProfileGroup() + sep; }
 
 namespace QbsProjectManager {
 
@@ -111,29 +111,12 @@ QString QbsManager::profileForKit(const ProjectExplorer::Kit *k) const
 {
     if (!k)
         return QString();
-    return m_settings->value(QString::fromLatin1(PROFILE_LIST) + k->id().toString()).toString();
+    return m_settings->value(qtcProfilePrefix() + k->id().toString()).toString();
 }
 
 void QbsManager::setProfileForKit(const QString &name, const ProjectExplorer::Kit *k)
 {
-    m_settings->setValue(QString::fromLatin1(PROFILE_LIST) + k->id().toString(), name);
-}
-
-QStringList QbsManager::profileNames() const
-{
-    QStringList keyList = m_settings->allKeys();
-
-    QStringList result;
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QString::fromLatin1(PROFILES_PREFIX)))
-            continue;
-        QString profile = key;
-        profile.remove(0, QString::fromLatin1(PROFILES_PREFIX).count());
-        profile = profile.left(profile.indexOf(sep));
-        if (!result.contains(profile))
-            result << profile;
-    }
-    return result;
+    m_settings->setValue(qtcProfilePrefix() + k->id().toString(), name);
 }
 
 qbs::Settings *QbsManager::settings()
@@ -148,41 +131,25 @@ qbs::Preferences *QbsManager::preferences()
 
 void QbsManager::addProfile(const QString &name, const QVariantMap &data)
 {
-    const QString base = QLatin1String(PROFILES_PREFIX) + name + sep;
+    qbs::Profile profile(name, settings());
     const QVariantMap::ConstIterator cend = data.constEnd();
     for (QVariantMap::ConstIterator it = data.constBegin(); it != cend; ++it)
-        m_settings->setValue(base + it.key(), it.value());
+        profile.setValue(it.key(), it.value());
 }
 
 void QbsManager::removeCreatorProfiles()
 {
-    QStringList keyList = m_settings->allKeys();
-    QStringList profilesToDelete;
-
-    // Find profiles to remove:
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QLatin1String(PROFILE_LIST)))
-            continue;
-        profilesToDelete.append(m_settings->value(key).toString());
-        m_settings->remove(key);
-    }
-    // Remove profiles:
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QLatin1String(PROFILES_PREFIX)))
-            continue;
-        const QString kitname = key.mid(QString::fromLatin1(PROFILES_PREFIX).size());
-        foreach (const QString &i, profilesToDelete) {
-            if (kitname.startsWith(i + sep))
-                m_settings->remove(key);
-        }
+    foreach (const QString &key, m_settings->allKeysWithPrefix(qtcProfileGroup())) {
+        const QString fullKey = qtcProfilePrefix() + key;
+        qbs::Profile(m_settings->value(fullKey).toString(), m_settings).removeProfile();
+        m_settings->remove(fullKey);
     }
 }
 
 void QbsManager::addProfileFromKit(const ProjectExplorer::Kit *k)
 {
-    QStringList usedProfileNames = profileNames();
     const QString name = ProjectExplorer::Project::makeUnique(
-                QString::fromLatin1("qtc_") + k->fileSystemFriendlyName(), usedProfileNames);
+                QString::fromLatin1("qtc_") + k->fileSystemFriendlyName(), m_settings->profiles());
     setProfileForKit(name, k);
 
     // set up properties:
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
index 04af44c2aaa..ebbea9c14e1 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
@@ -69,10 +69,9 @@ public:
     QString mimeType() const;
     ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString);
 
-    // QBS settings management:
+    // QBS profiles management:
     QString profileForKit(const ProjectExplorer::Kit *k) const;
     void setProfileForKit(const QString &name, const ProjectExplorer::Kit *k);
-    QStringList profileNames() const;
 
     static qbs::Settings *settings();
     static qbs::Preferences *preferences();
-- 
GitLab