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)
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, '')

View File

@ -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():