diff --git a/g13gui/applet/manager.py b/g13gui/applet/manager.py index 21d825c..598d69a 100644 --- a/g13gui/applet/manager.py +++ b/g13gui/applet/manager.py @@ -32,6 +32,7 @@ class AppletManager(dbus.service.Object, Subject): # [name] -> (sender, proxy) self._applets = {} + self._datastore = {} self._switcher = Switcher(self) self._lastApplet = self._switcher @@ -88,10 +89,15 @@ class AppletManager(dbus.service.Object, Subject): def _removeActiveApplet(self): senders = {proxy: name for (name, (_, proxy)) in self._applets.items()} print('senders is %s' % (repr(senders))) - name = senders[self._activeApplet] - del self._applets[name] - self.addChange(ChangeType.REMOVE, 'applet', name) + try: + name = senders[self._activeApplet] + del self._applets[name] + self.addChange(ChangeType.REMOVE, 'applet', name) + except KeyError as err: + print('Desync occurred: senders does not contain %s!', + (self._activeApplet)) + self._activeApplet = self._switcher self._lastApplet = self._switcher self.activeApplet = 'Switcher' @@ -196,3 +202,22 @@ class AppletManager(dbus.service.Object, Subject): return False GLib.idle_add(self._prefs.setSelectedProfile, profileName) + + @dbus.service.method(dbus_interface=INTERFACE_NAME, + in_signature='ss', + sender_keyword='sender') + def SetKey(self, keyName, data, sender): + if sender not in [s[0] for s in self._applets.values()]: + print('Sender %s is not in the registered list of applets.' % (sender)) + return + self._datastore[keyName] = data + + @dbus.service.method(dbus_interface=INTERFACE_NAME, + in_signature='s', out_signature='s', + sender_keyword='sender') + def GetKey(self, keyName, sender): + if sender not in [s[0] for s in self._applets.values()]: + print('Sender %s is not in the registered list of applets.' % (sender)) + return '' + return self._datastore.get(keyName, '') + diff --git a/g13gui/applets/clock.py b/g13gui/applets/clock.py index 34b47f9..388097c 100644 --- a/g13gui/applets/clock.py +++ b/g13gui/applets/clock.py @@ -2,6 +2,7 @@ import gi import time import enum import psutil +import json from g13gui.applet.applet import Applet from g13gui.applet.applet import BUTTONS @@ -23,6 +24,7 @@ class ClockMode(enum.Enum): class ClockApplet(Applet): NAME = 'Clock' + DATASTORE_KEY = 'com.theonelab.g13gui.applets.clock' def __init__(self): Applet.__init__(self, ClockApplet.NAME) @@ -108,6 +110,34 @@ class ClockApplet(Applet): elif key == 'L3': self._ramGraphToggle.toggle() self._ramGraph.visible = self._ramGraphToggle.isOn + GLib.idle_add(self._storeSettings) + + def onRegistered(self): + GLib.idle_add(self._loadSettings) + + def _storeSettings(self): + settings = json.dumps([ + self._clockMode.value, + self._loadGraph.visible, + self._ramGraph.visible + ]) + print(f'Storing settings [{settings}]') + self.manager.SetKey(ClockApplet.DATASTORE_KEY, settings) + + def _loadSettings(self): + settings = self.manager.GetKey(ClockApplet.DATASTORE_KEY) + print(f'Loaded settings are [{settings}]') + if settings: + (clockMode, + loadGraphVisible, + ramGraphVisible) = json.loads(settings) + self._clockMode = ClockMode(clockMode) + self._loadGraph.visible = loadGraphVisible + self._loadGraphToggle.isOn = loadGraphVisible + self._ramGraph.visible = ramGraphVisible + self._ramGraphToggle.isOn = ramGraphVisible + self._onModeSwitch() + self._update() def main():