Skip to content

Commit aac6591

Browse files
wip
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
1 parent 2c13fdd commit aac6591

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

core/services/wifi/settings.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from typing import Any, Dict
23

34
import pykson # type: ignore
@@ -28,12 +29,14 @@ def migrate(self, data: Dict[str, Any]) -> None:
2829

2930
class SettingsV2(SettingsV1):
3031
VERSION = 2
31-
# Stores user-selected mode per interface: {"wlan0": "normal", "wlan1": "hotspot"}
32-
interface_modes = pykson.ObjectField(dict, default_value={})
32+
# Stores user-selected mode per interface as JSON: '{"wlan0": "normal", "wlan1": "hotspot"}'
33+
interface_modes_json = pykson.StringField()
3334

3435
def __init__(self, *args: str, **kwargs: int) -> None:
3536
super().__init__(*args, **kwargs)
3637
self.VERSION = SettingsV2.VERSION
38+
if not self.interface_modes_json:
39+
self.interface_modes_json = "{}"
3740

3841
def migrate(self, data: Dict[str, Any]) -> None:
3942
if data["VERSION"] == SettingsV2.VERSION:
@@ -42,8 +45,19 @@ def migrate(self, data: Dict[str, Any]) -> None:
4245
if data["VERSION"] < SettingsV2.VERSION:
4346
super().migrate(data)
4447

45-
# Migration from version 1 to 2: add interface_modes
46-
if "interface_modes" not in data:
47-
data["interface_modes"] = {}
48+
# Migration from version 1 to 2: add interface_modes_json
49+
if "interface_modes_json" not in data:
50+
data["interface_modes_json"] = "{}"
4851

4952
data["VERSION"] = SettingsV2.VERSION
53+
54+
def get_interface_modes(self) -> Dict[str, str]:
55+
"""Get interface modes as a dictionary."""
56+
try:
57+
return json.loads(self.interface_modes_json or "{}")
58+
except json.JSONDecodeError:
59+
return {}
60+
61+
def set_interface_modes(self, modes: Dict[str, str]) -> None:
62+
"""Set interface modes from a dictionary."""
63+
self.interface_modes_json = json.dumps(modes)

core/services/wifi/wifi_handlers/networkmanager/networkmanager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ def __init__(self) -> None:
106106

107107
def _save_interface_mode(self, interface: str, mode: WifiInterfaceMode) -> None:
108108
"""Persist the interface mode to settings."""
109-
interface_modes = getattr(self._settings_manager.settings, "interface_modes", {}) or {}
109+
interface_modes = self._settings_manager.settings.get_interface_modes()
110110
interface_modes[interface] = mode.value
111-
self._settings_manager.settings.interface_modes = interface_modes
111+
self._settings_manager.settings.set_interface_modes(interface_modes)
112112
self._settings_manager.save()
113113
logger.info(f"Saved {interface} mode: {mode.value}")
114114

115115
def _get_stored_interface_mode(self, interface: str) -> Optional[WifiInterfaceMode]:
116116
"""Get the stored mode for an interface from settings, or None if not set."""
117-
interface_modes = getattr(self._settings_manager.settings, "interface_modes", {}) or {}
117+
interface_modes = self._settings_manager.settings.get_interface_modes()
118118
mode_str = interface_modes.get(interface)
119119
if mode_str:
120120
try:

0 commit comments

Comments
 (0)