summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-08-24 10:28:38 +0000
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-08-25 10:01:24 +0000
commitc573ce94e92b603f26a31451943920b830514a8b (patch)
tree10bdc47e3ced99d0a189c133a806d76d27e4a6ce /src
parent15cff3e2354f51d702976e704e4202390217c8c6 (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.cpp65
-rw-r--r--src/libs/installer/componentselectionpage_p.h5
-rw-r--r--src/libs/installer/metadatajob.cpp32
-rw-r--r--src/libs/installer/repositorycategory.cpp14
-rw-r--r--src/libs/installer/repositorycategory.h4
-rw-r--r--src/libs/installer/settings.cpp10
-rw-r--r--src/libs/installer/settings.h1
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 &current);
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);