summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/libs/installer/metadatajob.cpp3
-rw-r--r--src/libs/installer/repositorycategory.cpp15
-rw-r--r--src/libs/installer/repositorycategory.h2
-rw-r--r--src/libs/installer/settings.cpp34
-rw-r--r--src/libs/installer/settings.h9
5 files changed, 54 insertions, 9 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp
index ecdf1cd31..7d7b46e72 100644
--- a/src/libs/installer/metadatajob.cpp
+++ b/src/libs/installer/metadatajob.cpp
@@ -326,6 +326,9 @@ void MetadataJob::xmlTaskFinished()
QHash<QString, QPair<Repository, Repository> > update;
update.insert(QLatin1String("replace"), qMakePair(original, replacement));
+ if (s.updateRepositoryCategories(update) == Settings::UpdatesApplied)
+ qDebug() << "Repository categories updated.";
+
if (s.updateDefaultRepositories(update) == Settings::UpdatesApplied
|| s.updateUserRepositories(update) == Settings::UpdatesApplied) {
if (m_core->isMaintainer()) {
diff --git a/src/libs/installer/repositorycategory.cpp b/src/libs/installer/repositorycategory.cpp
index 42fb41c99..ce06480c8 100644
--- a/src/libs/installer/repositorycategory.cpp
+++ b/src/libs/installer/repositorycategory.cpp
@@ -28,6 +28,7 @@
#include "repositorycategory.h"
#include "filedownloaderfactory.h"
+#include "constants.h"
#include <QDataStream>
#include <QFileInfo>
@@ -102,16 +103,20 @@ void RepositoryCategory::setTooltip(const QString &tooltip)
*/
QSet<Repository> RepositoryCategory::repositories() const
{
- return variantListToSet<Repository>(m_data.values(QLatin1String("Repositories")));
+ return variantListToSet<Repository>(m_data.values(scRepositories));
}
/*!
- Inserts a set of \a repositories to the category.
+ Inserts a set of \a repositories to the category. Removes old \a repositories
+ if \a replace is set to \c true.
*/
-void RepositoryCategory::setRepositories(const QSet<Repository> repositories)
+void RepositoryCategory::setRepositories(const QSet<Repository> repositories, const bool replace)
{
+ if (replace)
+ m_data.remove(scRepositories);
+
foreach (const Repository &repository, repositories)
- m_data.insertMulti(QLatin1String("Repositories"), QVariant().fromValue(repository));
+ m_data.insertMulti(scRepositories, QVariant().fromValue(repository));
}
/*!
@@ -119,7 +124,7 @@ void RepositoryCategory::setRepositories(const QSet<Repository> repositories)
*/
void RepositoryCategory::addRepository(const Repository repository)
{
- m_data.insertMulti(QLatin1String("Repositories"), QVariant().fromValue(repository));
+ m_data.insertMulti(scRepositories, QVariant().fromValue(repository));
}
/*!
diff --git a/src/libs/installer/repositorycategory.h b/src/libs/installer/repositorycategory.h
index 98d5df7bd..1996103a5 100644
--- a/src/libs/installer/repositorycategory.h
+++ b/src/libs/installer/repositorycategory.h
@@ -54,7 +54,7 @@ public:
void setTooltip(const QString &tooltip);
QSet<Repository> repositories() const;
- void setRepositories(const QSet<Repository> repositories);
+ void setRepositories(const QSet<Repository> repositories, const bool replace = false);
void addRepository(const Repository repository);
bool isEnabled() const;
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;
diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h
index 55b94d745..fff2324f1 100644
--- a/src/libs/installer/settings.h
+++ b/src/libs/installer/settings.h
@@ -115,13 +115,16 @@ public:
QSet<Repository> repositories() const;
QSet<Repository> defaultRepositories() const;
- QSet<RepositoryCategory> repositoryCategories() const;
- QMap<QString, RepositoryCategory> organizedRepositoryCategories() const;
void setDefaultRepositories(const QSet<Repository> &repositories);
void addDefaultRepositories(const QSet<Repository> &repositories);
- void addRepositoryCategories(const QSet<RepositoryCategory> &repositories);
Settings::Update updateDefaultRepositories(const RepoHash &updates);
+ QSet<RepositoryCategory> repositoryCategories() const;
+ QMap<QString, RepositoryCategory> organizedRepositoryCategories() const;
+ void setRepositoryCategories(const QSet<RepositoryCategory> &repositories);
+ void addRepositoryCategories(const QSet<RepositoryCategory> &repositories);
+ Settings::Update updateRepositoryCategories(const RepoHash &updates);
+
QSet<Repository> temporaryRepositories() const;
void setTemporaryRepositories(const QSet<Repository> &repositories, bool replace);
void addTemporaryRepositories(const QSet<Repository> &repositories, bool replace);