Skip to content

Commit a98ae15

Browse files
committed
Adding check If the symbol's path is already relative
1 parent d78c69d commit a98ae15

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

Diff for: libqfieldsync/offline_converter.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ def _convert(self, project: QgsProject) -> None:
307307
project.removeMapLayer(layer)
308308

309309
# Change symbol path to embedded marker
310-
embed_layer_symbols_on_project(layer)
310+
embed_layer_symbols_on_project(layer, self._export_filename.parent)
311311

312312
self.remove_empty_groups_from_layer_tree_group(project.layerTreeRoot())
313313

Diff for: libqfieldsync/utils/file_utils.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
from qgis.core import (
3434
QgsCategorizedSymbolRenderer,
35+
QgsProject,
3536
QgsRasterMarkerSymbolLayer,
3637
QgsRuleBasedRenderer,
3738
QgsSingleSymbolRenderer,
@@ -229,7 +230,7 @@ def is_valid_filepath(path: str) -> bool:
229230
return True
230231

231232

232-
def update_symbols_to_embedded(symbol: QgsSymbol) -> None:
233+
def update_symbols_to_embedded(symbol: QgsSymbol, new_path: Path) -> None:
233234
"""
234235
Update SVG or Raster symbols layer to embed it in the QGIS project.
235236
Args:
@@ -247,6 +248,10 @@ def update_symbols_to_embedded(symbol: QgsSymbol) -> None:
247248

248249
source_path = Path(symbol_layer.path())
249250

251+
# If the symbol's path is already relative, we have nothing to do
252+
if source_path.is_relative_to(new_path):
253+
continue
254+
250255
# Check if symbol is already embedded
251256
if str(source_path)[:8].startswith("base64:"):
252257
continue
@@ -261,7 +266,9 @@ def update_symbols_to_embedded(symbol: QgsSymbol) -> None:
261266
symbol_layer.setPath(f"base64:{encoded_data}")
262267

263268

264-
def embed_layer_symbols_on_project(layer: QgsVectorLayer) -> None:
269+
def embed_layer_symbols_on_project(
270+
layer: QgsVectorLayer, new_path: Optional[Path] = None
271+
) -> None:
265272
"""
266273
Update the paths of symbols to embedded symbols in the QGIS project.
267274
@@ -280,10 +287,15 @@ def embed_layer_symbols_on_project(layer: QgsVectorLayer) -> None:
280287
if not renderer:
281288
return
282289

290+
if new_path is None:
291+
project = QgsProject.instance()
292+
project_home = project.homePath()
293+
new_path = Path(project_home)
294+
283295
if isinstance(renderer, QgsSingleSymbolRenderer):
284296
symbol = renderer.symbol()
285297
if symbol:
286-
update_symbols_to_embedded(symbol=symbol)
298+
update_symbols_to_embedded(symbol=symbol, new_path=new_path)
287299

288300
elif isinstance(renderer, QgsRuleBasedRenderer):
289301
for rule in renderer.rootRule().children():
@@ -293,7 +305,7 @@ def embed_layer_symbols_on_project(layer: QgsVectorLayer) -> None:
293305
continue
294306

295307
for symbol in symbols:
296-
update_symbols_to_embedded(symbol=symbol)
308+
update_symbols_to_embedded(symbol=symbol, new_path=new_path)
297309

298310
elif isinstance(renderer, QgsCategorizedSymbolRenderer):
299311
categories = renderer.categories()
@@ -302,7 +314,7 @@ def embed_layer_symbols_on_project(layer: QgsVectorLayer) -> None:
302314
# Get a fresh category. The renderer doesn't update in-place modifications.
303315
category = renderer.categories()[index]
304316
symbol = category.symbol().clone()
305-
update_symbols_to_embedded(symbol=symbol)
317+
update_symbols_to_embedded(symbol=symbol, new_path=new_path)
306318
renderer.updateCategorySymbol(index, symbol)
307319

308320
layer.setRenderer(renderer)

0 commit comments

Comments
 (0)