From 6ffe1a8061af8f4dd3cd50aba1b9bca51ee4f0c5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 26 Jun 2024 16:02:16 +0200 Subject: [PATCH] ExtensionBrowser: Delay fetching of json data from server The fetching is postponed until the extension manager is shown. This also adds a spinner which is shown during the fetching of the data. Change-Id: Id24ae772bcdfdf885ecfd5341d9a8d02f398c1a0 Reviewed-by: hjk --- .../extensionmanager/extensionsbrowser.cpp | 21 +++++++++++++++---- .../extensionmanager/extensionsbrowser.h | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index b2bc534fdf8..13816ff5dd2 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -249,6 +250,7 @@ public: class ExtensionsBrowserPrivate { public: + bool dataFetched = false; ExtensionsModel *model; QLineEdit *searchBox; QListView *extensionsView; @@ -256,6 +258,7 @@ public: QSortFilterProxyModel *filterProxyModel; int columnsCount = 2; Tasking::TaskTreeRunner taskTreeRunner; + SpinnerSolution::Spinner *m_spinner; }; ExtensionsBrowser::ExtensionsBrowser(QWidget *parent) @@ -311,6 +314,8 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent) WelcomePageHelpers::setBackgroundColor(d->extensionsView->viewport(), Theme::Token_Background_Default); + d->m_spinner = new SpinnerSolution::Spinner(SpinnerSolution::SpinnerSize::Large, this); + auto updateModel = [this] { d->filterProxyModel->sort(0); @@ -324,8 +329,6 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent) }; connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, updateModel); - connect(PluginManager::instance(), &PluginManager::initializationDone, - this, &ExtensionsBrowser::fetchExtensions); connect(d->searchBox, &QLineEdit::textChanged, d->filterProxyModel, &QSortFilterProxyModel::setFilterWildcard); } @@ -362,6 +365,15 @@ int ExtensionsBrowser::extraListViewWidth() const + 1; // Needed } +void ExtensionsBrowser::showEvent(QShowEvent *event) +{ + if (!d->dataFetched) { + d->dataFetched = true; + fetchExtensions(); + } + QWidget::showEvent(event); +} + void ExtensionsBrowser::fetchExtensions() { #ifdef WITH_TESTS @@ -372,7 +384,7 @@ void ExtensionsBrowser::fetchExtensions() using namespace Tasking; - const auto onQuerySetup = [](NetworkQuery &query) { + const auto onQuerySetup = [this](NetworkQuery &query) { const QString host = "https://qc-extensions.qt.io"; const QString url = "%1/api/v1/search?request="; const QString requestTemplate @@ -382,10 +394,10 @@ void ExtensionsBrowser::fetchExtensions() .arg(QSysInfo::productType()) .arg(QSysInfo::productVersion()) .arg(QSysInfo::currentCpuArchitecture()); - query.setRequest(QNetworkRequest(QUrl::fromUserInput(request))); query.setNetworkAccessManager(NetworkAccessManager::instance()); qCDebug(browserLog).noquote() << "Sending request:" << request; + d->m_spinner->show(); }; const auto onQueryDone = [this](const NetworkQuery &query, DoneWith result) { const QByteArray response = query.reply()->readAll(); @@ -396,6 +408,7 @@ void ExtensionsBrowser::fetchExtensions() qCDebug(browserLog).noquote() << response; d->model->setExtensionsJson({}); } + d->m_spinner->hide(); }; Group group { diff --git a/src/plugins/extensionmanager/extensionsbrowser.h b/src/plugins/extensionmanager/extensionsbrowser.h index b49bcfaba12..4e0b87c5936 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.h +++ b/src/plugins/extensionmanager/extensionsbrowser.h @@ -28,6 +28,8 @@ public: int extraListViewWidth() const; // Space for scrollbar, etc. + void showEvent(QShowEvent *event) override; + signals: void itemSelected(const QModelIndex ¤t, const QModelIndex &previous);