diff --git a/libqfieldsync/layer.py b/libqfieldsync/layer.py index cee4fe2..c00fa45 100644 --- a/libqfieldsync/layer.py +++ b/libqfieldsync/layer.py @@ -20,7 +20,6 @@ from qgis.PyQt.QtCore import QCoreApplication from qgis.PyQt.QtXml import QDomDocument -from .utils.bad_layer_handler import bad_layer_handler from .utils.file_utils import slugify from .utils.logger import logger @@ -871,7 +870,9 @@ def filename(self) -> str: @property def is_localized_path(self) -> bool: # on QFieldCloud localized layers will be invalid and therefore we get the layer source from `bad_layer_handler` - source = bad_layer_handler.invalid_layer_sources_by_id.get(self.layer.id()) + source = getattr(self.project, "__libqfieldsync_bad_layers_by_id", {}).get( + self.layer.id() + ) if source: return ( source.startswith("localized:") diff --git a/libqfieldsync/utils/bad_layer_handler.py b/libqfieldsync/utils/bad_layer_handler.py index ba9d037..2e1ec55 100644 --- a/libqfieldsync/utils/bad_layer_handler.py +++ b/libqfieldsync/utils/bad_layer_handler.py @@ -51,6 +51,11 @@ class set_bad_layer_handler: def __init__(self, project: QgsProject): self.project = project + setattr( + self.project, + "__libqfieldsync_bad_layers_by_id", + bad_layer_handler.invalid_layer_sources_by_id, + ) def __enter__(self): bad_layer_handler.clear() @@ -60,13 +65,18 @@ def __enter__(self): # self.project.setBadLayerHandler(bad_layer_handler) def __exit__(self, exc_type, exc_value, traceback): + setattr( + self.project, + "__libqfieldsync_bad_layers_by_id", + {**bad_layer_handler.invalid_layer_sources_by_id}, + ) + # NOTE we should set the bad layer handler only when we need it. # Unfortunately we cannot due to a crash when calling `QgsProject.read()` when we already used this context manager. # The code below is used as documentation for future generations of engineers willing to fix this. # global bad_layer_handler # self.project.setBadLayerHandler(None) - pass def __call__(self, func): def wrapper(*args, **kwargs):