From 136faab91fe1f21c7efe2208876330ff2c64db0d Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 25 Aug 2021 12:13:29 +1000 Subject: [PATCH] Fix system tables disappear from dialog after task runs --- .../providers/qgsprovidersublayertask.sip.in | 2 +- src/app/qgsprovidersublayersdialog.cpp | 2 +- src/core/providers/qgsprovidersublayertask.cpp | 9 +++++++-- src/core/providers/qgsprovidersublayertask.h | 4 +++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/python/core/auto_generated/providers/qgsprovidersublayertask.sip.in b/python/core/auto_generated/providers/qgsprovidersublayertask.sip.in index cfaafb4db6f..79911b096f6 100644 --- a/python/core/auto_generated/providers/qgsprovidersublayertask.sip.in +++ b/python/core/auto_generated/providers/qgsprovidersublayertask.sip.in @@ -35,7 +35,7 @@ possible, regardless of how expensive this may be. %End public: - QgsProviderSublayerTask( const QString &uri ); + QgsProviderSublayerTask( const QString &uri, bool includeSystemTables ); %Docstring Constructor for QgsProviderSublayerTask, which retrieves sublayer details for the specified ``uri``. diff --git a/src/app/qgsprovidersublayersdialog.cpp b/src/app/qgsprovidersublayersdialog.cpp index 8b724a08127..b1b48ff8308 100644 --- a/src/app/qgsprovidersublayersdialog.cpp +++ b/src/app/qgsprovidersublayersdialog.cpp @@ -163,7 +163,7 @@ QgsProviderSublayersDialog::QgsProviderSublayersDialog( const QString &uri, cons if ( QgsProviderUtils::sublayerDetailsAreIncomplete( initialDetails ) ) { // initial details are incomplete, so fire up a task in the background to fully populate the model... - mTask = new QgsProviderSublayerTask( uri ); + mTask = new QgsProviderSublayerTask( uri, true ); connect( mTask.data(), &QgsProviderSublayerTask::taskCompleted, this, [ = ] { QList< QgsProviderSublayerDetails > res = mTask->results(); diff --git a/src/core/providers/qgsprovidersublayertask.cpp b/src/core/providers/qgsprovidersublayertask.cpp index 12107f7947c..a0e2b4e483a 100644 --- a/src/core/providers/qgsprovidersublayertask.cpp +++ b/src/core/providers/qgsprovidersublayertask.cpp @@ -21,9 +21,10 @@ #include "qgsprovidersublayerdetails.h" #include "qgsreadwritelocker.h" -QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri ) +QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri, bool includeSystemTables ) : QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt ) , mUri( uri ) + , mIncludeSystemTables( includeSystemTables ) { } @@ -39,7 +40,11 @@ bool QgsProviderSublayerTask::run() { mFeedback = std::make_unique< QgsFeedback >(); - const QList res = QgsProviderRegistry::instance()->querySublayers( mUri, Qgis::SublayerQueryFlag::ResolveGeometryType | Qgis::SublayerQueryFlag::CountFeatures, mFeedback.get() ); + Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlag::ResolveGeometryType | Qgis::SublayerQueryFlag::CountFeatures; + if ( mIncludeSystemTables ) + flags |= Qgis::SublayerQueryFlag::IncludeSystemTables; + + const QList res = QgsProviderRegistry::instance()->querySublayers( mUri, flags, mFeedback.get() ); const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write ); mResults = res; diff --git a/src/core/providers/qgsprovidersublayertask.h b/src/core/providers/qgsprovidersublayertask.h index 4fa3082eb69..de8169a3316 100644 --- a/src/core/providers/qgsprovidersublayertask.h +++ b/src/core/providers/qgsprovidersublayertask.h @@ -53,7 +53,7 @@ class CORE_EXPORT QgsProviderSublayerTask : public QgsTask * Constructor for QgsProviderSublayerTask, which retrieves sublayer details for the * specified \a uri. */ - QgsProviderSublayerTask( const QString &uri ); + QgsProviderSublayerTask( const QString &uri, bool includeSystemTables ); ~QgsProviderSublayerTask() override; @@ -72,6 +72,8 @@ class CORE_EXPORT QgsProviderSublayerTask : public QgsTask QString mUri; + bool mIncludeSystemTables = false; + std::unique_ptr< QgsFeedback > mFeedback; QList mResults;