aboutsummaryrefslogtreecommitdiffstats
path: root/datasources/buildsystemsource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'datasources/buildsystemsource.cpp')
-rw-r--r--datasources/buildsystemsource.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/datasources/buildsystemsource.cpp b/datasources/buildsystemsource.cpp
index 26433c0..95c22a2 100644
--- a/datasources/buildsystemsource.cpp
+++ b/datasources/buildsystemsource.cpp
@@ -25,6 +25,7 @@
#include "buildsystemsource.h"
#include <QtCore/QSettings>
+#include <QtCore/QCryptographicHash>
#include <projectexplorer/project.h>
#include <projectexplorer/session.h>
@@ -96,21 +97,42 @@ QVariant BuildSystemSource::data()
return result;
}
+static QSet<QByteArray> fromVariantList(const QVariantList &vl)
+{
+ QSet<QByteArray> result;
+ for (auto &&v : vl) {
+ result << v.toByteArray();
+ }
+
+ return result;
+}
+
void BuildSystemSource::loadImpl(QSettings *settings)
{
auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
for (int i = QMake; i < Count; ++i) {
m_projectsByBuildSystem[size_t(i)] =
- settings->value(buildSystemKeys()[i]).toStringList().toSet();
+ fromVariantList(settings->value(buildSystemKeys()[i]).toList());
}
}
+static QVariantList toVariantList(const QSet<QByteArray> &set)
+{
+ QVariantList result;
+ result.reserve(set.size());
+
+ std::transform(set.begin(), set.end(), std::back_inserter(result),
+ [](const QByteArray &ba) { return QVariant::fromValue(ba); });
+
+ return result;
+}
+
void BuildSystemSource::storeImpl(QSettings *settings)
{
auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
for (int i = QMake; i < Count; ++i) {
settings->setValue(
- buildSystemKeys()[i], QStringList(m_projectsByBuildSystem[size_t(i)].toList()));
+ buildSystemKeys()[i], toVariantList(m_projectsByBuildSystem[size_t(i)]));
}
}
@@ -120,13 +142,18 @@ void BuildSystemSource::resetImpl(QSettings *settings)
storeImpl(settings);
}
+static QByteArray hashPath(const Utils::FilePath& name)
+{
+ return QCryptographicHash::hash(name.toString().toUtf8(), QCryptographicHash::Md5);
+}
+
void BuildSystemSource::updateProjects()
{
for (auto project : ProjectExplorer::SessionManager::projects()) {
if (project) {
- auto projectName = QString::fromUtf8(project->id().name()).toLower();
- auto projectPath = project->projectFilePath().toString();
- m_projectsByBuildSystem[extractBuildSystemType(projectName)] << projectPath;
+ const auto projectName = QString::fromUtf8(project->id().name()).toLower();
+ const auto projectPath = project->projectFilePath();
+ m_projectsByBuildSystem[extractBuildSystemType(projectName)] << hashPath(projectPath);
}
}
}