@@ -83,6 +83,9 @@ class OfflineConverter(QObject):
8383 task_progress_updated = pyqtSignal (int , int )
8484 total_progress_updated = pyqtSignal (int , int , str )
8585
86+ # feedback used for basemap generation processing algorithm
87+ _feedback = QgsProcessingFeedback ()
88+
8689 def __init__ (
8790 self ,
8891 project : QgsProject ,
@@ -638,28 +641,32 @@ def _export_basemap_as_mbtiles(
638641 layer_tree_model ,
639642 )
640643
641- feedback = QgsProcessingFeedback ()
642644 context = QgsProcessingContext ()
643645 context .setProject (cloned_project )
644646
645647 # connect subtask feedback progress signal
646- feedback .progressChanged .connect (self ._on_tiles_gen_alg_progress_changed )
648+ self . _feedback .progressChanged .connect (self ._on_tiles_gen_alg_progress_changed )
647649
648- results , ok = alg .run (params , context , feedback )
650+ try :
651+ results , ok = alg .run (params , context , self ._feedback )
649652
650- if not ok :
651- self .warning .emit (
652- self .tr ("Failed to create mbtiles basemap" ), feedback .textLog ()
653- )
654- return False
653+ if not ok :
654+ self .warning .emit (
655+ self .tr ("Failed to create mbtiles basemap" ),
656+ self ._feedback .textLog (),
657+ )
658+ return False
659+
660+ new_layer = QgsRasterLayer (results ["OUTPUT_FILE" ], self .tr ("Basemap" ))
655661
656- new_layer = QgsRasterLayer (results ["OUTPUT_FILE" ], self .tr ("Basemap" ))
662+ self .project_configuration .project .addMapLayer (new_layer , False )
663+ layer_tree = QgsProject .instance ().layerTreeRoot ()
664+ layer_tree .insertLayer (len (layer_tree .children ()), new_layer )
657665
658- self .project_configuration .project .addMapLayer (new_layer , False )
659- layer_tree = QgsProject .instance ().layerTreeRoot ()
660- layer_tree .insertLayer (len (layer_tree .children ()), new_layer )
666+ return True
661667
662- return True
668+ finally :
669+ self ._feedback .progressChanged .disconnect ()
663670
664671 def _on_tiles_gen_alg_progress_changed (self , revision : float ) -> None :
665672 """
@@ -701,6 +708,13 @@ def on_original_project_write(doc):
701708 def _on_offline_editing_task_progress (self , progress ):
702709 self .task_progress_updated .emit (progress , self .__max_task_progress )
703710
711+ def cancel (self ) -> None :
712+ """
713+ Cancels the offline export of a QField project.
714+ Typically used when the QField export dialog is closed.
715+ """
716+ self ._feedback .cancel ()
717+
704718 def convertorProcessingProgress (self ):
705719 """
706720 Will create a new progress object for processing to get feedback from the basemap
0 commit comments