From 55ecbb9660048b06959d471b783a05e4f6b47efd Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Mon, 24 Jun 2019 09:21:39 +0300 Subject: 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 --- src/libs/installer/settings.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/libs/installer/settings.cpp') 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 &repositories) d->m_data.insertMulti(scRepositories, QVariant().fromValue(repository)); } +void Settings::setRepositoryCategories(const QSet &repositories) +{ + d->m_data.remove(scRepositoryCategories); + addRepositoryCategories(repositories); +} + void Settings::addRepositoryCategories(const QSet &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 categories = repositoryCategories(); + QList categoriesList = categories.values(); + QPair updateValues = updates.value(QLatin1String("replace")); + + bool update = false; + + foreach (RepositoryCategory category, categoriesList) { + QSet 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 *reposToUpdate) { bool update = false; -- cgit v1.2.3