From c447172399c881f42c6b8a1918819a6b9fc8bc27 Mon Sep 17 00:00:00 2001 From: Mathieu Pellerin Date: Sun, 21 Jul 2024 17:43:57 +0700 Subject: [PATCH 1/2] Add a project settting to keep track of map themes' default active layer --- libqfieldsync/project.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libqfieldsync/project.py b/libqfieldsync/project.py index 7494101..e952295 100644 --- a/libqfieldsync/project.py +++ b/libqfieldsync/project.py @@ -22,6 +22,7 @@ def __init__(self): GEOFENCING_LAYER = "/geofencingLayer" GEOFENCING_BEHAVIOR = "/geofencingBehavior" GEOFENCING_SHOULD_PREVENT_DIGITIZING = "/geofencingShouldPreventDigitizing" + MAP_THEMES_ACTIVE_LAYER = "/mapThemesActiveLayers" class BaseMapType(object): def __init__(self): @@ -158,6 +159,29 @@ def geofencing_should_prevent_digitizing(self, value): "qfieldsync", ProjectProperties.GEOFENCING_SHOULD_PREVENT_DIGITIZING, value ) + @property + def map_themes_active_layer(self): + entries, _ = self.project.readListEntry( + "qfieldsync", ProjectProperties.MAP_THEMES_ACTIVE_LAYER + ) + + map_themes_active_layer = {} + for entry in entries: + details = entry.split("}|~~|{") + if len(details) == 2: + map_themes_active_layer[details[0]] = details[1] + + return map_themes_active_layer + + @map_themes_active_layer.setter + def map_themes_active_layer(self, value): + entries = [] + for key in value: + entries.append(f"{key}}}|~~|{{{value[key]}") + self.project.writeEntry( + "qfieldsync", ProjectProperties.MAP_THEMES_ACTIVE_LAYER, entries + ) + @property def geofencing_is_active(self): geofencing_is_active, _ = self.project.readBoolEntry( From 2e847e4a784903eba7f5614dda1c0831089d5d4b Mon Sep 17 00:00:00 2001 From: Mathieu Pellerin Date: Tue, 23 Jul 2024 10:09:37 +0700 Subject: [PATCH 2/2] Apply suggestion --- libqfieldsync/project.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libqfieldsync/project.py b/libqfieldsync/project.py index e952295..a91b567 100644 --- a/libqfieldsync/project.py +++ b/libqfieldsync/project.py @@ -1,3 +1,6 @@ +import json + + class ProjectProperties(object): def __init__(self): raise RuntimeError("This object holds only project property static variables") @@ -161,25 +164,23 @@ def geofencing_should_prevent_digitizing(self, value): @property def map_themes_active_layer(self): - entries, _ = self.project.readListEntry( + entries_json, _ = self.project.readEntry( "qfieldsync", ProjectProperties.MAP_THEMES_ACTIVE_LAYER ) - map_themes_active_layer = {} - for entry in entries: - details = entry.split("}|~~|{") - if len(details) == 2: - map_themes_active_layer[details[0]] = details[1] + try: + entries = json.loads(entries_json) + except Exception: + entries = {} - return map_themes_active_layer + return entries @map_themes_active_layer.setter def map_themes_active_layer(self, value): - entries = [] - for key in value: - entries.append(f"{key}}}|~~|{{{value[key]}") self.project.writeEntry( - "qfieldsync", ProjectProperties.MAP_THEMES_ACTIVE_LAYER, entries + "qfieldsync", + ProjectProperties.MAP_THEMES_ACTIVE_LAYER, + json.dumps(value), ) @property