Skip to content

Commit

Permalink
Lazier metadata load
Browse files Browse the repository at this point in the history
This do not load the metadata unless the widget is visible.

It is an attempt to fix qgis#60335 (which I cannot reproduce after the
previous commit)
  • Loading branch information
elpaso committed Feb 7, 2025
1 parent 0d77262 commit bddc9f7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
27 changes: 17 additions & 10 deletions src/gui/qgslayermetadatasearchwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ QgsLayerMetadataSearchWidget::QgsLayerMetadataSearchWidget( QWidget *parent, Qt:
if ( progress == 100 )
{
mIsLoading = false;
mReloadRequired = false;
mProgressBar->hide();
updateLoadBtn();
}
Expand All @@ -90,15 +91,16 @@ QgsLayerMetadataSearchWidget::QgsLayerMetadataSearchWidget( QWidget *parent, Qt:
connect( mAbortPushButton, &QPushButton::clicked, mSourceModel, [=]( bool ) {
if ( !mIsLoading )
{
mIsLoading = true;
mProgressBar->show();
mSourceModel->reloadAsync();
mReloadRequired = true;
refresh();
}
else
{
mProgressBar->hide();
mSourceModel->cancel();
mIsLoading = false;
mReloadRequired = false;
}
updateLoadBtn();
} );
Expand Down Expand Up @@ -181,8 +183,9 @@ void QgsLayerMetadataSearchWidget::updateExtentFilter( int index )

void QgsLayerMetadataSearchWidget::refresh()
{
mIsLoading = true;
mSourceModel->reloadAsync();
// Lazy reload
mReloadRequired = true;
refreshInternal();
}

void QgsLayerMetadataSearchWidget::addButtonClicked()
Expand Down Expand Up @@ -258,15 +261,19 @@ void QgsLayerMetadataSearchWidget::showEvent( QShowEvent *event )
{
QgsAbstractDataSourceWidget::showEvent( event );
mSearchFilterLineEdit->setText( mProxyModel->filterString() );
// The first show event triggers the metadata loading
if ( !mIsInitialized )
{
refresh();
mIsInitialized = true;
}
refreshInternal();
}

void QgsLayerMetadataSearchWidget::showHelp()
{
QgsHelp::openHelp( QStringLiteral( "managing_data_source/opening_data.html#the-layer-metadata-search-panel" ) );
}

void QgsLayerMetadataSearchWidget::refreshInternal()
{
if ( mReloadRequired && isVisible() )
{
mIsLoading = true;
mSourceModel->reloadAsync();
}
}
4 changes: 3 additions & 1 deletion src/gui/qgslayermetadatasearchwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,11 @@ class GUI_EXPORT QgsLayerMetadataSearchWidget : public QgsAbstractDataSourceWidg
private:
QgsLayerMetadataResultsProxyModel *mProxyModel = nullptr;
bool mIsLoading = false;
bool mIsInitialized = false;
bool mReloadRequired = true;
QgsLayerMetadataResultsModel *mSourceModel = nullptr;

void refreshInternal();

// QWidget interface
protected:
void showEvent( QShowEvent *event ) override;
Expand Down

0 comments on commit bddc9f7

Please sign in to comment.