diff options
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 3 | ||||
-rw-r--r-- | src/libs/installer/repositorycategory.cpp | 15 | ||||
-rw-r--r-- | src/libs/installer/repositorycategory.h | 2 | ||||
-rw-r--r-- | src/libs/installer/settings.cpp | 34 | ||||
-rw-r--r-- | src/libs/installer/settings.h | 9 |
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); |