QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgsprovidersublayertask.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsprovidersublayertask.cpp
3 ----------------------
4 begin : June 2021
5 copyright : (C) 2021 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
20#include "qgsfeedback.h"
21#include "qgsprovidermetadata.h"
22#include "qgsproviderregistry.h"
24#include "qgsreadwritelocker.h"
25
26#include "moc_qgsprovidersublayertask.cpp"
27
28QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri, bool includeSystemTables )
29 : QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt | QgsTask::Silent )
30 , mUri( uri )
31 , mIncludeSystemTables( includeSystemTables )
32{
33}
34
35QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri, const QString &providerKey, bool includeSystemTables )
36 : QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt | QgsTask::Silent )
37 , mUri( uri )
38 , mProviderKey( providerKey )
39 , mIncludeSystemTables( includeSystemTables )
40{
41}
42
43QList<QgsProviderSublayerDetails> QgsProviderSublayerTask::results() const
44{
45 const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read );
46 return mResults;
47}
48
50
52{
53 mFeedback = std::make_unique< QgsFeedback >();
54
56 if ( mIncludeSystemTables )
58
59 QList<QgsProviderSublayerDetails> res;
60 if ( mProviderKey.isEmpty() )
61 res = QgsProviderRegistry::instance()->querySublayers( mUri, flags, mFeedback.get() );
62 else
63 {
65 if ( provider )
66 res = provider->querySublayers( mUri, flags, mFeedback.get() );
67 }
68
69 const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write );
70 mResults = res;
71
72 return true;
73}
74
76{
77 if ( mFeedback )
78 mFeedback->cancel();
79
81}
@ IncludeSystemTables
Include system or internal tables (these are not included by default).
Definition qgis.h:1395
@ OpenLayersToResolveDescriptions
Attempt to open layers in order to resolve layer descriptions. May be slow and should never be done i...
Definition qgis.h:1396
@ CountFeatures
Count features in vector sublayers.
Definition qgis.h:1394
@ ResolveGeometryType
Attempt to resolve the geometry type for vector sublayers.
Definition qgis.h:1393
QFlags< SublayerQueryFlag > SublayerQueryFlags
Sublayer query flags.
Definition qgis.h:1399
Holds data provider key, description, and associated shared library file or function pointer informat...
virtual QList< QgsProviderSublayerDetails > querySublayers(const QString &uri, Qgis::SublayerQueryFlags flags=Qgis::SublayerQueryFlags(), QgsFeedback *feedback=nullptr) const
Queries the specified uri and returns a list of any valid sublayers found in the dataset which can be...
QList< QgsProviderSublayerDetails > querySublayers(const QString &uri, Qgis::SublayerQueryFlags flags=Qgis::SublayerQueryFlags(), QgsFeedback *feedback=nullptr) const
Queries the specified uri and returns a list of any valid sublayers found in the dataset which can be...
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.
QList< QgsProviderSublayerDetails > results() const
Returns the sublayer details as calculated by the task.
void cancel() override
Notifies the task that it should terminate.
QgsProviderSublayerTask(const QString &uri, bool includeSystemTables=false)
Constructor for QgsProviderSublayerTask, which retrieves sublayer details for the specified uri.
~QgsProviderSublayerTask() override
bool run() override
Performs the task's operation.
A convenience class that simplifies locking and unlocking QReadWriteLocks.
@ Write
Lock for write.
Flags flags() const
Returns the flags associated with the task.
virtual void cancel()
Notifies the task that it should terminate.
QgsTask(const QString &description=QString(), QgsTask::Flags flags=AllFlags)
Constructor for QgsTask.
@ CanCancel
Task can be canceled.
@ CancelWithoutPrompt
Task can be canceled without any users prompts, e.g. when closing a project or QGIS.
@ Silent
Don't show task updates (such as completion/failure messages) as operating-system level notifications...