Add in key-value datastore. Closes #25 and #24

This commit is contained in:
June Tate-Gans 2023-10-29 09:43:30 -05:00
parent a1a953bc36
commit e326097f7b
2 changed files with 58 additions and 3 deletions

View File

@ -32,6 +32,7 @@ class AppletManager(dbus.service.Object, Subject):
# [name] -> (sender, proxy) # [name] -> (sender, proxy)
self._applets = {} self._applets = {}
self._datastore = {}
self._switcher = Switcher(self) self._switcher = Switcher(self)
self._lastApplet = self._switcher self._lastApplet = self._switcher
@ -88,10 +89,15 @@ class AppletManager(dbus.service.Object, Subject):
def _removeActiveApplet(self): def _removeActiveApplet(self):
senders = {proxy: name for (name, (_, proxy)) in self._applets.items()} senders = {proxy: name for (name, (_, proxy)) in self._applets.items()}
print('senders is %s' % (repr(senders))) print('senders is %s' % (repr(senders)))
try:
name = senders[self._activeApplet] name = senders[self._activeApplet]
del self._applets[name] del self._applets[name]
self.addChange(ChangeType.REMOVE, 'applet', 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._activeApplet = self._switcher
self._lastApplet = self._switcher self._lastApplet = self._switcher
self.activeApplet = 'Switcher' self.activeApplet = 'Switcher'
@ -196,3 +202,22 @@ class AppletManager(dbus.service.Object, Subject):
return False return False
GLib.idle_add(self._prefs.setSelectedProfile, profileName) 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, '')

View File

@ -2,6 +2,7 @@ import gi
import time import time
import enum import enum
import psutil import psutil
import json
from g13gui.applet.applet import Applet from g13gui.applet.applet import Applet
from g13gui.applet.applet import BUTTONS from g13gui.applet.applet import BUTTONS
@ -23,6 +24,7 @@ class ClockMode(enum.Enum):
class ClockApplet(Applet): class ClockApplet(Applet):
NAME = 'Clock' NAME = 'Clock'
DATASTORE_KEY = 'com.theonelab.g13gui.applets.clock'
def __init__(self): def __init__(self):
Applet.__init__(self, ClockApplet.NAME) Applet.__init__(self, ClockApplet.NAME)
@ -108,6 +110,34 @@ class ClockApplet(Applet):
elif key == 'L3': elif key == 'L3':
self._ramGraphToggle.toggle() self._ramGraphToggle.toggle()
self._ramGraph.visible = self._ramGraphToggle.isOn 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(): def main():