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 <jani.heikkinen@qt.io>
This commit is contained in:
Katja Marttila 2019-03-29 14:47:43 +02:00
parent 701beccd14
commit 2b61b70718

View File

@ -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;
}