From 2b61b707189e9d5e70e0c79b85e602933ee28015 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Fri, 29 Mar 2019 14:47:43 +0200 Subject: Fix components shown in categories 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 --- src/libs/installer/metadatajob.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'src/libs/installer/metadatajob.cpp') 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 &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 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 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; } -- cgit v1.2.3