diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2020-08-24 10:28:38 +0000 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2020-08-25 10:01:24 +0000 |
commit | c573ce94e92b603f26a31451943920b830514a8b (patch) | |
tree | 10bdc47e3ced99d0a189c133a806d76d27e4a6ce /src | |
parent | 15cff3e2354f51d702976e704e4202390217c8c6 (diff) |
Revert "Modify repository category functionality"
This reverts commit 99cbbd439ea1f572b4242d77035b0da3a27c79ec.
Reason for revert: The speed benefit gained by converting existing online repositories to use unified metadata does not offset the penalty of fetching all categorized repositories. This is especially bad on Windows where install script evaluation takes long time.
Change-Id: I03f4ab41f21e139b40c82baf741b2459966d6d43
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/componentselectionpage_p.cpp | 65 | ||||
-rw-r--r-- | src/libs/installer/componentselectionpage_p.h | 5 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 32 | ||||
-rw-r--r-- | src/libs/installer/repositorycategory.cpp | 14 | ||||
-rw-r--r-- | src/libs/installer/repositorycategory.h | 4 | ||||
-rw-r--r-- | src/libs/installer/settings.cpp | 10 | ||||
-rw-r--r-- | src/libs/installer/settings.h | 1 |
7 files changed, 46 insertions, 85 deletions
diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index d0603844c..cb8f321d0 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -216,24 +216,26 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() m_categoryGroupBox->setTitle(m_core->settings().repositoryCategoryDisplayName()); m_categoryGroupBox->setObjectName(QLatin1String("CategoryGroupBox")); QVBoxLayout *categoryLayout = new QVBoxLayout(m_categoryGroupBox); + QPushButton *fetchCategoryButton = new QPushButton(tr("Filter")); + fetchCategoryButton->setObjectName(QLatin1String("FetchCategoryButton")); + connect(fetchCategoryButton, &QPushButton::clicked, this, + &ComponentSelectionPagePrivate::fetchRepositoryCategories); foreach (RepositoryCategory repository, m_core->settings().organizedRepositoryCategories()) { QCheckBox *checkBox = new QCheckBox; checkBox->setObjectName(repository.displayname()); checkBox->setChecked(repository.isEnabled()); connect(checkBox, &QCheckBox::stateChanged, this, - &ComponentSelectionPagePrivate::updateRepositoryCategories, Qt::QueuedConnection); + &ComponentSelectionPagePrivate::checkboxStateChanged); checkBox->setText(repository.displayname()); checkBox->setToolTip(repository.tooltip()); categoryLayout->addWidget(checkBox); } + categoryLayout->addWidget(fetchCategoryButton); vLayout->addWidget(m_categoryGroupBox); vLayout->addStretch(); m_mainGLayout->addWidget(m_categoryWidget, 1, 0); - - // Apply default enabled categories as initial component filters - QMetaObject::invokeMethod(this, "updateRepositoryCategories", Qt::QueuedConnection); } void ComponentSelectionPagePrivate::showCategoryLayout(bool show) @@ -342,6 +344,18 @@ void ComponentSelectionPagePrivate::deselectAll() m_currentModel->setCheckedState(ComponentModel::AllUnchecked); } +void ComponentSelectionPagePrivate::checkboxStateChanged() +{ + QList<QCheckBox*> checkboxes = m_categoryGroupBox->findChildren<QCheckBox *>(); + bool enableFetchButton = false; + foreach (QCheckBox *checkbox, checkboxes) { + if (checkbox->isChecked()) { + enableFetchButton = true; + break; + } + } +} + void ComponentSelectionPagePrivate::enableRepositoryCategory(const QString &repositoryName, bool enable) { QMap<QString, RepositoryCategory> organizedRepositoryCategories = m_core->settings().organizedRepositoryCategories(); @@ -379,7 +393,7 @@ void ComponentSelectionPagePrivate::updateWidgetVisibility(bool show) #endif } -void ComponentSelectionPagePrivate::updateRepositoryCategories() +void ComponentSelectionPagePrivate::fetchRepositoryCategories() { updateWidgetVisibility(true); @@ -390,43 +404,10 @@ void ComponentSelectionPagePrivate::updateRepositoryCategories() enableRepositoryCategory(checkbox->objectName(), checkbox->isChecked()); } - // < name, visible > - QHash<QString, bool> componentVisibleHash; - // Prepare a QHash dictionary for repository urls, so we don't have to get - // copies of Repository objects later by value when iterating over categories. - const QHash<QString, QSet<QUrl> > repoUrlsForCategories = m_core->settings().repositoryUrlsForCategories(); - const QSet<RepositoryCategory> repoCategories = m_core->settings().repositoryCategories(); - const QList<Component *> components = m_core->components(PackageManagerCore::ComponentType::All); - foreach (const Component *component, components) { - bool hasRepoCategory = false; - bool hasEnabledCategory = false; - - foreach (const RepositoryCategory &repoCategory, repoCategories) { - const QSet<QUrl> repoUrls = repoUrlsForCategories.value(repoCategory.displayname()); - foreach (const QUrl &url, repoUrls) { - if (component->repositoryUrl() == url) { - hasRepoCategory = true; - hasEnabledCategory = repoCategory.isEnabled(); - break; - } - } - if (hasEnabledCategory) - break; - } - const QString componentName = component->name(); - const QModelIndex &idx = m_currentModel->indexFromComponentName(componentName); - if (idx.isValid()) { - // Same component name can appear in multiple repositories, only one enabled - // category or non-categorized repo is required to show the component in view. - if (componentVisibleHash.value(componentName)) - continue; - - const bool show = (!hasRepoCategory || hasEnabledCategory); - m_treeView->setRowHidden(idx.row(), idx.parent(), !show); - componentVisibleHash.insert(componentName, show); - } + if (!m_core->fetchRemotePackagesTree()) { + MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(), + QLatin1String("FailToFetchPackages"), tr("Error"), m_core->error()); } - updateWidgetVisibility(false); } diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h index 0ed00152e..bce13246b 100644 --- a/src/libs/installer/componentselectionpage_p.h +++ b/src/libs/installer/componentselectionpage_p.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -74,9 +74,10 @@ public slots: void currentSelectedChanged(const QModelIndex ¤t); void selectAll(); void deselectAll(); + void checkboxStateChanged(); void enableRepositoryCategory(const QString &repositoryName, bool enable); void updateWidgetVisibility(bool show); - void updateRepositoryCategories(); + void fetchRepositoryCategories(); void customButtonClicked(int which); void onProgressChanged(int progress); void setMessage(const QString &msg); diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 1f375f56b..55379c358 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -88,9 +88,11 @@ QList<Metadata> MetadataJob::metadata() const { QList<Metadata> metadata = m_metaFromDefaultRepositories.values(); foreach (RepositoryCategory repositoryCategory, m_core->settings().repositoryCategories()) { - QList<ArchiveMetadata> archiveMetaList = m_fetchedArchive.values(repositoryCategory.displayname()); - foreach (ArchiveMetadata archiveMeta, archiveMetaList) { - metadata.append(archiveMeta.metaData); + if (m_core->isUpdater() || (repositoryCategory.isEnabled() && m_fetchedArchive.contains(repositoryCategory.displayname()))) { + QList<ArchiveMetadata> archiveMetaList = m_fetchedArchive.values(repositoryCategory.displayname()); + foreach (ArchiveMetadata archiveMeta, archiveMetaList) { + metadata.append(archiveMeta.metaData); + } } } return metadata; @@ -688,18 +690,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()) { - 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 (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); + } } - if (fetch) - repositories.insert(repository); - } } return repositories; } diff --git a/src/libs/installer/repositorycategory.cpp b/src/libs/installer/repositorycategory.cpp index d1a51e8b0..79b1cc6a8 100644 --- a/src/libs/installer/repositorycategory.cpp +++ b/src/libs/installer/repositorycategory.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -113,18 +113,6 @@ QSet<Repository> RepositoryCategory::repositories() const } /*! - Returns the list of repository URLs the category has. -*/ -QSet<QUrl> RepositoryCategory::repositoryUrls() const -{ - QSet<QUrl> repositoryUrls; - foreach (const Repository &repository, repositories()) - repositoryUrls.insert(repository.url()); - - return repositoryUrls; -} - -/*! Inserts a set of \a repositories to the category. Removes old \a repositories if \a replace is set to \c true. */ diff --git a/src/libs/installer/repositorycategory.h b/src/libs/installer/repositorycategory.h index 0f950d577..faa8d252b 100644 --- a/src/libs/installer/repositorycategory.h +++ b/src/libs/installer/repositorycategory.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -54,8 +54,6 @@ public: void setTooltip(const QString &tooltip); QSet<Repository> repositories() const; - QSet<QUrl> repositoryUrls() const; - void setRepositories(const QSet<Repository> repositories, const bool replace = false); void addRepository(const Repository repository); diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index a8c0eece3..347449dcc 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -641,16 +641,6 @@ QMap<QString, RepositoryCategory> Settings::organizedRepositoryCategories() cons return map; } -QHash<QString, QSet<QUrl> > Settings::repositoryUrlsForCategories() const -{ - // < category displayname, repo urls > - QHash<QString, QSet<QUrl> > repoUrlsForCategories; - foreach (const RepositoryCategory &repoCategory, repositoryCategories()) - repoUrlsForCategories.insert(repoCategory.displayname(), repoCategory.repositoryUrls()); - - return repoUrlsForCategories; -} - void Settings::setDefaultRepositories(const QSet<Repository> &repositories) { d->m_data.remove(scRepositories); diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h index 1e372d1f3..6927c54a0 100644 --- a/src/libs/installer/settings.h +++ b/src/libs/installer/settings.h @@ -124,7 +124,6 @@ public: QSet<RepositoryCategory> repositoryCategories() const; QMap<QString, RepositoryCategory> organizedRepositoryCategories() const; - QHash<QString, QSet<QUrl> > repositoryUrlsForCategories() const; void setRepositoryCategories(const QSet<RepositoryCategory> &repositories); void addRepositoryCategories(const QSet<RepositoryCategory> &repositories); Settings::Update updateRepositoryCategories(const RepoHash &updates); |