summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/settings.cpp
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2019-06-24 09:21:39 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2019-08-15 10:00:37 +0000
commit55ecbb9660048b06959d471b783a05e4f6b47efd (patch)
treefdc942d40902f0df0ec769ad3baf8eb8d9749745 /src/libs/installer/settings.cpp
parent120e527ed16f6c579e46f71c9018ad35ad1cb528 (diff)
Update repository categories on server authentication request
If repositories in a category were located on a server that requires user authentication, IFW couldn't update information of the repositories inside a category during runtime. This prevents for example storing credentials from the authentication request dialog and blocks the usage of that category. Add a method for updating contents in repository categories and a unit test for the new method. Also some minor tweaks to relevant bits of code. Task-number: QTIFW-1358 Change-Id: Idfa2559df6d0d2a6de428b8d5fb1f7672aa1e300 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r--src/libs/installer/settings.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index e0c9a3970..0963f2208 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -616,12 +616,46 @@ void Settings::addDefaultRepositories(const QSet<Repository> &repositories)
d->m_data.insertMulti(scRepositories, QVariant().fromValue(repository));
}
+void Settings::setRepositoryCategories(const QSet<RepositoryCategory> &repositories)
+{
+ d->m_data.remove(scRepositoryCategories);
+ addRepositoryCategories(repositories);
+}
+
void Settings::addRepositoryCategories(const QSet<RepositoryCategory> &repositories)
{
foreach (const RepositoryCategory &repository, repositories)
d->m_data.insertMulti(scRepositoryCategories, QVariant().fromValue(repository));
}
+Settings::Update Settings::updateRepositoryCategories(const RepoHash &updates)
+{
+ if (updates.isEmpty())
+ return Settings::NoUpdatesApplied;
+
+ QSet<RepositoryCategory> categories = repositoryCategories();
+ QList<RepositoryCategory> categoriesList = categories.values();
+ QPair<Repository, Repository> updateValues = updates.value(QLatin1String("replace"));
+
+ bool update = false;
+
+ foreach (RepositoryCategory category, categoriesList) {
+ QSet<Repository> repositories = category.repositories();
+ if (repositories.contains(updateValues.first)) {
+ update = true;
+ repositories.remove(updateValues.first);
+ repositories.insert(updateValues.second);
+ category.setRepositories(repositories, true);
+ categoriesList.replace(categoriesList.indexOf(category), category);
+ }
+ }
+ if (update) {
+ categories = categoriesList.toSet();
+ setRepositoryCategories(categories);
+ }
+ return update ? Settings::UpdatesApplied : Settings::NoUpdatesApplied;
+}
+
static bool apply(const RepoHash &updates, QHash<QUrl, Repository> *reposToUpdate)
{
bool update = false;