Skip to content

Commit 4c20c6e

Browse files
committed
Add offline converter cancel logic
1 parent 053ffd4 commit 4c20c6e

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

libqfieldsync/offline_converter.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)