backends/gsettings: add support for value lists

parent 2485c3e6
...@@ -13,7 +13,8 @@ class GSettingsBackend(Backend): ...@@ -13,7 +13,8 @@ class GSettingsBackend(Backend):
return Gio.Settings.new(schema_name) return Gio.Settings.new(schema_name)
def get_value(self, key, gtype): def _get_single_value(self, key):
"""Get value for a single key."""
schema_name, key_name = key.rsplit('.', 1) schema_name, key_name = key.rsplit('.', 1)
schema = self._get_schema(schema_name) schema = self._get_schema(schema_name)
...@@ -27,7 +28,32 @@ class GSettingsBackend(Backend): ...@@ -27,7 +28,32 @@ class GSettingsBackend(Backend):
self.logger.error(f"Error when getting the value {key}: {e}") self.logger.error(f"Error when getting the value {key}: {e}")
return None return None
def _set_single_value(self, key, value, gtype):
"""Set value for a single key."""
schema_name, key_name = key.rsplit('.', 1)
schema = self._get_schema(schema_name)
if not schema:
return False
try:
schema.set_value(key_name, GLib.Variant(gtype, value))
return True
except Exception as e:
self.logger.error(f"Error when setting the value {key}: {e}")
return False
def get_value(self, key, gtype):
# Support for list of keys
if isinstance(key, list):
return [self._get_single_value(k) for k in key]
return self._get_single_value(key)
def get_range(self, key, gtype): def get_range(self, key, gtype):
# For list of keys, get range from first key only
if isinstance(key, list):
key = key[0]
schema_name, key_name = key.rsplit('.', 1) schema_name, key_name = key.rsplit('.', 1)
schema = self._get_schema(schema_name) schema = self._get_schema(schema_name)
...@@ -41,14 +67,14 @@ class GSettingsBackend(Backend): ...@@ -41,14 +67,14 @@ class GSettingsBackend(Backend):
self.logger.error(f"Error when getting the range {key}: {e}") self.logger.error(f"Error when getting the range {key}: {e}")
return None return None
def set_value(self, schema_key, value, gtype): def set_value(self, key, value, gtype):
schema_name, key_name = schema_key.rsplit('.', 1) # Support for list of keys
schema = self._get_schema(schema_name) if isinstance(key, list):
gtypes = gtype if isinstance(gtype, list) else [gtype] * len(key)
values = value if isinstance(value, list) else [value] * len(key)
if not schema: for k, v, g in zip(key, values, gtypes):
self._set_single_value(k, v, g)
return return
try: self._set_single_value(key, value, gtype)
schema.set_value(key_name, GLib.Variant(gtype, value))
except Exception as e:
self.logger.error(f"Error when setting the value {schema_key}: {e}")
...@@ -43,7 +43,12 @@ class Setting(BaseSetting): ...@@ -43,7 +43,12 @@ class Setting(BaseSetting):
value = self.default value = self.default
if backend: if backend:
value = backend.get_value(self.key, self.gtype) or self.default backend_value = backend.get_value(self.key, self.gtype)
if isinstance(backend_value, list):
if all(v is not None for v in backend_value):
value = backend_value
elif backend_value is not None:
value = backend_value
self._current_value = value self._current_value = value
return self._current_value return self._current_value
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment