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
18 #include "qgsprovidersublayertask.h"
19 #include "qgsfeedback.h"
20 #include "qgsproviderregistry.h"
21 #include "qgsprovidersublayerdetails.h"
22 #include "qgsreadwritelocker.h"
23
QgsProviderSublayerTask(const QString & uri,bool includeSystemTables)24 QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri, bool includeSystemTables )
25 : QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt )
26 , mUri( uri )
27 , mIncludeSystemTables( includeSystemTables )
28 {
29 }
30
results() const31 QList<QgsProviderSublayerDetails> QgsProviderSublayerTask::results() const
32 {
33 const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read );
34 return mResults;
35 }
36
37 QgsProviderSublayerTask::~QgsProviderSublayerTask() = default;
38
run()39 bool QgsProviderSublayerTask::run()
40 {
41 mFeedback = std::make_unique< QgsFeedback >();
42
43 Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlag::ResolveGeometryType | Qgis::SublayerQueryFlag::CountFeatures;
44 if ( mIncludeSystemTables )
45 flags |= Qgis::SublayerQueryFlag::IncludeSystemTables;
46
47 const QList<QgsProviderSublayerDetails> res = QgsProviderRegistry::instance()->querySublayers( mUri, flags, mFeedback.get() );
48
49 const QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write );
50 mResults = res;
51
52 return true;
53 }
54
cancel()55 void QgsProviderSublayerTask::cancel()
56 {
57 if ( mFeedback )
58 mFeedback->cancel();
59
60 QgsTask::cancel();
61 }
62