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>
@@ -191,6 +192,10 @@ bool QgsGeoPackageConnectionItem::handleDrop( const QMimeData *data, Qt::DropAct
191
192
QStringList importResults;
192
193
bool hasError = false ;
193
194
195
+ // Main task
196
+ std::unique_ptr< QgsGeoPackageImportTask > mainTask ( new QgsGeoPackageImportTask ( tr ( " GeoPackage import" ) ) );
197
+ QgsTaskList importTasks;
198
+
194
199
const auto lst = QgsMimeDataUtils::decodeUriList ( data );
195
200
for ( const QgsMimeDataUtils::Uri &dropUri : lst )
196
201
{
@@ -252,18 +257,19 @@ bool QgsGeoPackageConnectionItem::handleDrop( const QMimeData *data, Qt::DropAct
252
257
options.insert ( QStringLiteral ( " update" ), true );
253
258
options.insert ( QStringLiteral ( " overwrite" ), true );
254
259
options.insert ( QStringLiteral ( " layerName" ), dropUri.name );
255
-
256
- std::unique_ptr< QgsVectorLayerExporterTask > exportTask ( new QgsVectorLayerExporterTask ( vectorSrcLayer, uri, QStringLiteral ( " ogr" ), vectorSrcLayer->crs (), options, owner ) );
260
+ QgsVectorLayerExporterTask *exportTask = new QgsVectorLayerExporterTask ( vectorSrcLayer, uri, QStringLiteral ( " ogr" ), vectorSrcLayer->crs (), options, owner ) ;
261
+ mainTask->addSubTask ( exportTask, importTasks );
262
+ importTasks << exportTask;
257
263
// when export is successful:
258
- connect ( exportTask. get () , &QgsVectorLayerExporterTask::exportComplete, this , [ = ]()
264
+ connect ( exportTask, &QgsVectorLayerExporterTask::exportComplete, this , [ = ]()
259
265
{
260
266
// this is gross - TODO - find a way to get access to messageBar from data items
261
267
QMessageBox::information ( nullptr , tr ( " Import to GeoPackage database" ), tr ( " Import was successful." ) );
262
268
refreshConnections ();
263
269
} );
264
270
265
271
// when an error occurs:
266
- connect ( exportTask. get () , &QgsVectorLayerExporterTask::errorOccurred, this , [ = ]( int error, const QString & errorMessage )
272
+ connect ( exportTask, &QgsVectorLayerExporterTask::errorOccurred, this , [ = ]( int error, const QString & errorMessage )
267
273
{
268
274
if ( error != QgsVectorLayerExporter::ErrUserCanceled )
269
275
{
@@ -274,22 +280,22 @@ bool QgsGeoPackageConnectionItem::handleDrop( const QMimeData *data, Qt::DropAct
274
280
}
275
281
} );
276
282
277
- QgsApplication::taskManager ()->addTask ( exportTask.release () );
278
283
}
279
284
else // Import raster
280
285
{
281
-
282
- std::unique_ptr< QgsGeoPackageRasterWriterTask > exportTask ( new QgsGeoPackageRasterWriterTask ( dropUri, mPath ) );
286
+ QgsGeoPackageRasterWriterTask *exportTask = new QgsGeoPackageRasterWriterTask ( dropUri, mPath ) ;
287
+ mainTask->addSubTask ( exportTask, importTasks );
288
+ importTasks << exportTask;
283
289
// when export is successful:
284
- connect ( exportTask. get () , &QgsGeoPackageRasterWriterTask::writeComplete, this , [ = ]()
290
+ connect ( exportTask, &QgsGeoPackageRasterWriterTask::writeComplete, this , [ = ]()
285
291
{
286
292
// this is gross - TODO - find a way to get access to messageBar from data items
287
293
QMessageBox::information ( nullptr , tr ( " Import to GeoPackage database" ), tr ( " Import was successful." ) );
288
294
refreshConnections ();
289
295
} );
290
296
291
297
// when an error occurs:
292
- connect ( exportTask. get () , &QgsGeoPackageRasterWriterTask::errorOccurred, this , [ = ]( QgsGeoPackageRasterWriter::WriterError error, const QString & errorMessage )
298
+ connect ( exportTask, &QgsGeoPackageRasterWriterTask::errorOccurred, this , [ = ]( QgsGeoPackageRasterWriter::WriterError error, const QString & errorMessage )
293
299
{
294
300
if ( error != QgsGeoPackageRasterWriter::WriterError::ErrUserCanceled )
295
301
{
@@ -304,7 +310,6 @@ bool QgsGeoPackageConnectionItem::handleDrop( const QMimeData *data, Qt::DropAct
304
310
deleteGeoPackageRasterLayer ( QStringLiteral ( " GPKG:%1:%2" ).arg ( mPath , dropUri.name ), deleteErr );
305
311
} );
306
312
307
- QgsApplication::taskManager ()->addTask ( exportTask.release () );
308
313
}
309
314
} // do not overwrite
310
315
}
@@ -323,6 +328,10 @@ bool QgsGeoPackageConnectionItem::handleDrop( const QMimeData *data, Qt::DropAct
323
328
output->setMessage ( tr ( " Failed to import some layers!\n\n " ) + importResults.join ( QStringLiteral ( " \n " ) ), QgsMessageOutput::MessageText );
324
329
output->showMessage ();
325
330
}
331
+ else if ( ! importTasks.isEmpty () )
332
+ {
333
+ QgsApplication::taskManager ()->addTask ( mainTask.release () );
334
+ }
326
335
return true ;
327
336
}
328
337
0 commit comments