summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2019-03-29 14:47:43 +0200
committerKatja Marttila <katja.marttila@qt.io>2019-04-01 11:43:13 +0000
commit2b61b707189e9d5e70e0c79b85e602933ee28015 (patch)
treefe2e04cd218214137c3dd68fbc95f3f8c0bbc707
parent701beccd14edb3c7ca5445833d0cf93435c52666 (diff)
Fix components shown in categories3.1.0-rc3.1.0
If same repository was included in several different categories, and the categories were fetched in the same time, the components were shown only in one of the categories. Fixed so that once the repository is downloaded, the related meta is included to all categories. This also speeds up other category download times. Task-id: QTIFW-1314 Change-Id: I0d890a52dee15a9bde11383f608f547a32b99ee7 Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
-rw-r--r--src/libs/installer/metadatajob.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp
index 6052da02e..c69fda3d0 100644
--- a/src/libs/installer/metadatajob.cpp
+++ b/src/libs/installer/metadatajob.cpp
@@ -626,6 +626,18 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re
ArchiveMetadata archiveMetadata;
archiveMetadata.metaData = metadata;
m_fetchedArchive.insertMulti(metadata.repository.categoryname(), archiveMetadata);
+
+ //Check if other categories have the same url (contains same metadata)
+ //so we can speed up other category fetches
+ foreach (RepositoryCategory category, m_core->settings().repositoryCategories()) {
+ if (category.displayname() != metadata.repository.categoryname()) {
+ foreach (Repository repository, category.repositories()) {
+ if (repository.url() == metadata.repository.url()) {
+ m_fetchedArchive.insertMulti(category.displayname(), archiveMetadata);
+ }
+ }
+ }
+ }
// Hash for faster lookups
m_metaFromArchive.insert(metadata.directory, metadata);
}
@@ -732,11 +744,20 @@ QSet<Repository> MetadataJob::getRepositories()
// If repository is already fetched, do not fetch it again.
// In updater mode, fetch always all archive repositories to get updates
foreach (RepositoryCategory repositoryCategory, m_core->settings().repositoryCategories()) {
- if (m_core->isUpdater() || (repositoryCategory.isEnabled() && !m_fetchedArchive.contains(repositoryCategory.displayname()))) {
- foreach (Repository repository, repositoryCategory.repositories()) {
- repositories.insert(repository);
+ if (m_core->isUpdater() || (repositoryCategory.isEnabled())) {
+ foreach (Repository repository, repositoryCategory.repositories()) {
+ QHashIterator<QString, ArchiveMetadata> i(m_fetchedArchive);
+ bool fetch = true;
+ while (i.hasNext()) {
+ i.next();
+ ArchiveMetadata metaData = i.value();
+ if (repository.url() == metaData.metaData.repository.url())
+ fetch = false;
+ }
+ if (fetch)
+ repositories.insert(repository);
+ }
}
- }
}
return repositories;
}