Skip to content

Commit

Permalink
Fix system tables disappear from dialog after task runs
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Aug 26, 2021
1 parent 37dc64f commit 136faab
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 5 deletions.
Expand Up @@ -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``.
Expand Down
2 changes: 1 addition & 1 deletion src/app/qgsprovidersublayersdialog.cpp
Expand Up @@ -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();
Expand Down
9 changes: 7 additions & 2 deletions src/core/providers/qgsprovidersublayertask.cpp
Expand Up @@ -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 )
{
}

Expand All @@ -39,7 +40,11 @@ bool QgsProviderSublayerTask::run()
{
mFeedback = std::make_unique< QgsFeedback >();

const QList<QgsProviderSublayerDetails> 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<QgsProviderSublayerDetails> res = QgsProviderRegistry::instance()->querySublayers( mUri, flags, mFeedback.get() );

const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write );
mResults = res;
Expand Down
4 changes: 3 additions & 1 deletion src/core/providers/qgsprovidersublayertask.h
Expand Up @@ -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;

Expand All @@ -72,6 +72,8 @@ class CORE_EXPORT QgsProviderSublayerTask : public QgsTask

QString mUri;

bool mIncludeSystemTables = false;

std::unique_ptr< QgsFeedback > mFeedback;

QList<QgsProviderSublayerDetails> mResults;
Expand Down

0 comments on commit 136faab

Please sign in to comment.