diff options
-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); |