diff options
author | Katja Marttila <katja.marttila@qt.io> | 2019-03-29 14:47:43 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2019-04-01 11:43:13 +0000 |
commit | 2b61b707189e9d5e70e0c79b85e602933ee28015 (patch) | |
tree | fe2e04cd218214137c3dd68fbc95f3f8c0bbc707 /src | |
parent | 701beccd14edb3c7ca5445833d0cf93435c52666 (diff) |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 29 |
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; } |