28
28
#include " qgsmessageoutput.h"
29
29
#include " qgsvectorlayerexporter.h"
30
30
#include " qgsgeopackagerasterwritertask.h"
31
+ #include " qgstaskmanager.h"
31
32
32
33
#include < QAction>
33
34
#include < QMessageBox>
@@ -202,6 +203,10 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
202
203
QStringList importResults;
203
204
bool hasError = false ;
204
205
206
+ // Main task
207
+ std::unique_ptr< QgsConcurrentFileWriterImportTask > mainTask ( new QgsConcurrentFileWriterImportTask ( tr ( " GeoPackage import" ) ) );
208
+ QgsTaskList importTasks;
209
+
205
210
const auto lst = QgsMimeDataUtils::decodeUriList ( data );
206
211
for ( const QgsMimeDataUtils::Uri &dropUri : lst )
207
212
{
@@ -263,18 +268,19 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
263
268
options.insert ( QStringLiteral ( " update" ), true );
264
269
options.insert ( QStringLiteral ( " overwrite" ), true );
265
270
options.insert ( QStringLiteral ( " layerName" ), dropUri.name );
266
-
267
- std::unique_ptr< QgsVectorLayerExporterTask > exportTask ( new QgsVectorLayerExporterTask ( vectorSrcLayer, uri, QStringLiteral ( " ogr" ), vectorSrcLayer->crs (), options, owner ) );
271
+ QgsVectorLayerExporterTask *exportTask = new QgsVectorLayerExporterTask ( vectorSrcLayer, uri, QStringLiteral ( " ogr" ), vectorSrcLayer->crs (), options, owner ) ;
272
+ mainTask->addSubTask ( exportTask, importTasks );
273
+ importTasks << exportTask;
268
274
// when export is successful:
269
- connect ( exportTask. get () , &QgsVectorLayerExporterTask::exportComplete, this , [ = ]()
275
+ connect ( exportTask, &QgsVectorLayerExporterTask::exportComplete, this , [ = ]()
270
276
{
271
277
// this is gross - TODO - find a way to get access to messageBar from data items
272
278
QMessageBox::information ( nullptr , tr ( " Import to GeoPackage database" ), tr ( " Import was successful." ) );
273
279
refreshConnections ();
274
280
} );
275
281
276
282
// when an error occurs:
277
- connect ( exportTask. get () , &QgsVectorLayerExporterTask::errorOccurred, this , [ = ]( int error, const QString & errorMessage )
283
+ connect ( exportTask, &QgsVectorLayerExporterTask::errorOccurred, this , [ = ]( int error, const QString & errorMessage )
278
284
{
279
285
if ( error != QgsVectorLayerExporter::ErrUserCanceled )
280
286
{
@@ -285,22 +291,22 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
285
291
}
286
292
} );
287
293
288
- QgsApplication::taskManager ()->addTask ( exportTask.release () );
289
294
}
290
295
else // Import raster
291
296
{
292
-
293
- std::unique_ptr< QgsGeoPackageRasterWriterTask > exportTask ( new QgsGeoPackageRasterWriterTask ( dropUri, mPath ) );
297
+ QgsGeoPackageRasterWriterTask *exportTask = new QgsGeoPackageRasterWriterTask ( dropUri, mPath ) ;
298
+ mainTask->addSubTask ( exportTask, importTasks );
299
+ importTasks << exportTask;
294
300
// when export is successful:
295
- connect ( exportTask. get () , &QgsGeoPackageRasterWriterTask::writeComplete, this , [ = ]()
301
+ connect ( exportTask, &QgsGeoPackageRasterWriterTask::writeComplete, this , [ = ]()
296
302
{
297
303
// this is gross - TODO - find a way to get access to messageBar from data items
298
304
QMessageBox::information ( nullptr , tr ( " Import to GeoPackage database" ), tr ( " Import was successful." ) );
299
305
refreshConnections ();
300
306
} );
301
307
302
308
// when an error occurs:
303
- connect ( exportTask. get () , &QgsGeoPackageRasterWriterTask::errorOccurred, this , [ = ]( QgsGeoPackageRasterWriter::WriterError error, const QString & errorMessage )
309
+ connect ( exportTask, &QgsGeoPackageRasterWriterTask::errorOccurred, this , [ = ]( QgsGeoPackageRasterWriter::WriterError error, const QString & errorMessage )
304
310
{
305
311
if ( error != QgsGeoPackageRasterWriter::WriterError::ErrUserCanceled )
306
312
{
@@ -315,7 +321,6 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
315
321
deleteGeoPackageRasterLayer ( QStringLiteral ( " GPKG:%1:%2" ).arg ( mPath , dropUri.name ), deleteErr );
316
322
} );
317
323
318
- QgsApplication::taskManager ()->addTask ( exportTask.release () );
319
324
}
320
325
} // do not overwrite
321
326
}
@@ -334,6 +339,10 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
334
339
output->setMessage ( tr ( " Failed to import some layers!\n\n " ) + importResults.join ( QStringLiteral ( " \n " ) ), QgsMessageOutput::MessageText );
335
340
output->showMessage ();
336
341
}
342
+ if ( ! importTasks.isEmpty () )
343
+ {
344
+ QgsApplication::taskManager ()->addTask ( mainTask.release () );
345
+ }
337
346
return true ;
338
347
}
339
348
0 commit comments