forked from qt-creator/qt-creator
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 <hjk@qt.io>
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#include <extensionsystem/pluginview.h>
|
#include <extensionsystem/pluginview.h>
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
|
|
||||||
|
#include <solutions/spinner/spinner.h>
|
||||||
#include <solutions/tasking/networkquery.h>
|
#include <solutions/tasking/networkquery.h>
|
||||||
#include <solutions/tasking/tasktree.h>
|
#include <solutions/tasking/tasktree.h>
|
||||||
#include <solutions/tasking/tasktreerunner.h>
|
#include <solutions/tasking/tasktreerunner.h>
|
||||||
@@ -249,6 +250,7 @@ public:
|
|||||||
class ExtensionsBrowserPrivate
|
class ExtensionsBrowserPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
bool dataFetched = false;
|
||||||
ExtensionsModel *model;
|
ExtensionsModel *model;
|
||||||
QLineEdit *searchBox;
|
QLineEdit *searchBox;
|
||||||
QListView *extensionsView;
|
QListView *extensionsView;
|
||||||
@@ -256,6 +258,7 @@ public:
|
|||||||
QSortFilterProxyModel *filterProxyModel;
|
QSortFilterProxyModel *filterProxyModel;
|
||||||
int columnsCount = 2;
|
int columnsCount = 2;
|
||||||
Tasking::TaskTreeRunner taskTreeRunner;
|
Tasking::TaskTreeRunner taskTreeRunner;
|
||||||
|
SpinnerSolution::Spinner *m_spinner;
|
||||||
};
|
};
|
||||||
|
|
||||||
ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
||||||
@@ -311,6 +314,8 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
|||||||
WelcomePageHelpers::setBackgroundColor(d->extensionsView->viewport(),
|
WelcomePageHelpers::setBackgroundColor(d->extensionsView->viewport(),
|
||||||
Theme::Token_Background_Default);
|
Theme::Token_Background_Default);
|
||||||
|
|
||||||
|
d->m_spinner = new SpinnerSolution::Spinner(SpinnerSolution::SpinnerSize::Large, this);
|
||||||
|
|
||||||
auto updateModel = [this] {
|
auto updateModel = [this] {
|
||||||
d->filterProxyModel->sort(0);
|
d->filterProxyModel->sort(0);
|
||||||
|
|
||||||
@@ -324,8 +329,6 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
|||||||
};
|
};
|
||||||
|
|
||||||
connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, updateModel);
|
connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, updateModel);
|
||||||
connect(PluginManager::instance(), &PluginManager::initializationDone,
|
|
||||||
this, &ExtensionsBrowser::fetchExtensions);
|
|
||||||
connect(d->searchBox, &QLineEdit::textChanged,
|
connect(d->searchBox, &QLineEdit::textChanged,
|
||||||
d->filterProxyModel, &QSortFilterProxyModel::setFilterWildcard);
|
d->filterProxyModel, &QSortFilterProxyModel::setFilterWildcard);
|
||||||
}
|
}
|
||||||
@@ -362,6 +365,15 @@ int ExtensionsBrowser::extraListViewWidth() const
|
|||||||
+ 1; // Needed
|
+ 1; // Needed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ExtensionsBrowser::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
if (!d->dataFetched) {
|
||||||
|
d->dataFetched = true;
|
||||||
|
fetchExtensions();
|
||||||
|
}
|
||||||
|
QWidget::showEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
void ExtensionsBrowser::fetchExtensions()
|
void ExtensionsBrowser::fetchExtensions()
|
||||||
{
|
{
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
@@ -372,7 +384,7 @@ void ExtensionsBrowser::fetchExtensions()
|
|||||||
|
|
||||||
using namespace Tasking;
|
using namespace Tasking;
|
||||||
|
|
||||||
const auto onQuerySetup = [](NetworkQuery &query) {
|
const auto onQuerySetup = [this](NetworkQuery &query) {
|
||||||
const QString host = "https://qc-extensions.qt.io";
|
const QString host = "https://qc-extensions.qt.io";
|
||||||
const QString url = "%1/api/v1/search?request=";
|
const QString url = "%1/api/v1/search?request=";
|
||||||
const QString requestTemplate
|
const QString requestTemplate
|
||||||
@@ -382,10 +394,10 @@ void ExtensionsBrowser::fetchExtensions()
|
|||||||
.arg(QSysInfo::productType())
|
.arg(QSysInfo::productType())
|
||||||
.arg(QSysInfo::productVersion())
|
.arg(QSysInfo::productVersion())
|
||||||
.arg(QSysInfo::currentCpuArchitecture());
|
.arg(QSysInfo::currentCpuArchitecture());
|
||||||
|
|
||||||
query.setRequest(QNetworkRequest(QUrl::fromUserInput(request)));
|
query.setRequest(QNetworkRequest(QUrl::fromUserInput(request)));
|
||||||
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
query.setNetworkAccessManager(NetworkAccessManager::instance());
|
||||||
qCDebug(browserLog).noquote() << "Sending request:" << request;
|
qCDebug(browserLog).noquote() << "Sending request:" << request;
|
||||||
|
d->m_spinner->show();
|
||||||
};
|
};
|
||||||
const auto onQueryDone = [this](const NetworkQuery &query, DoneWith result) {
|
const auto onQueryDone = [this](const NetworkQuery &query, DoneWith result) {
|
||||||
const QByteArray response = query.reply()->readAll();
|
const QByteArray response = query.reply()->readAll();
|
||||||
@@ -396,6 +408,7 @@ void ExtensionsBrowser::fetchExtensions()
|
|||||||
qCDebug(browserLog).noquote() << response;
|
qCDebug(browserLog).noquote() << response;
|
||||||
d->model->setExtensionsJson({});
|
d->model->setExtensionsJson({});
|
||||||
}
|
}
|
||||||
|
d->m_spinner->hide();
|
||||||
};
|
};
|
||||||
|
|
||||||
Group group {
|
Group group {
|
||||||
|
@@ -28,6 +28,8 @@ public:
|
|||||||
|
|
||||||
int extraListViewWidth() const; // Space for scrollbar, etc.
|
int extraListViewWidth() const; // Space for scrollbar, etc.
|
||||||
|
|
||||||
|
void showEvent(QShowEvent *event) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void itemSelected(const QModelIndex ¤t, const QModelIndex &previous);
|
void itemSelected(const QModelIndex ¤t, const QModelIndex &previous);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user