diff options
Diffstat (limited to 'src/libs/installer/metadatajob.cpp')
-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; } |