summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);