breezy-desktop/ui/src/configmanager.py

64 lines
2.1 KiB
Python

import sys
import threading
from gi.repository import GObject
from .xrdriveripc import XRDriverIPC
class ConfigManager(GObject.GObject):
__gproperties__ = {
'breezy-desktop-enabled': (bool, 'Breezy Desktop Enabled', 'Whether Breezy Desktop is enabled', False, GObject.ParamFlags.READWRITE),
}
_instance = None
@staticmethod
def get_instance():
if not ConfigManager._instance:
ConfigManager._instance = ConfigManager()
return ConfigManager._instance
@staticmethod
def destroy_instance():
if ConfigManager._instance:
ConfigManager._instance.stop()
ConfigManager._instance = None
def __init__(self):
GObject.GObject.__init__(self)
self.ipc = XRDriverIPC.get_instance()
self.breezy_desktop_enabled = None
self._running = True
self._refresh_config()
def stop(self):
self._running = False
def _refresh_config(self):
self.config = self.ipc.retrieve_config(False)
if self._is_breezy_desktop_enabled() != self.breezy_desktop_enabled:
self.set_property('breezy-desktop-enabled', self._is_breezy_desktop_enabled())
if self._running: threading.Timer(1.0, self._refresh_config).start()
def _is_breezy_desktop_enabled(self):
return self.config.get('disabled') == False and 'breezy_desktop' in self.config.get('external_mode', [])
def _set_breezy_desktop_enabled(self, value):
if value:
self.config['disabled'] = False
self.config['output_mode'] = 'external_only'
self.config['external_mode'] = ['breezy_desktop']
self.ipc.write_config(self.config)
else:
self.config['external_mode'] = []
self.ipc.write_config(self.config)
self.breezy_desktop_enabled = value
def do_set_property(self, prop, value):
if prop.name == 'breezy-desktop-enabled':
self._set_breezy_desktop_enabled(value)
def do_get_property(self, prop):
if prop.name == 'breezy-desktop-enabled':
return self.breezy_desktop_enabled