Commit 38cbb2ba authored by Roman Alifanov's avatar Roman Alifanov

set and get moved to a separated thread

parent 8f5916de
from gi.repository import GLib
import threading
from .base import BaseSetting
from .widgets import WidgetFactory
from ..backends import backend_factory
......@@ -14,6 +17,7 @@ class Setting(BaseSetting):
self.key = setting_data.get('key')
super().__init__(setting_data, module)
self._async_fetch_value()
def create_row(self):
if self.root is True:
......@@ -37,15 +41,29 @@ class Setting(BaseSetting):
self.widget = WidgetFactory.create_widget(self)
return self.widget.create_row() if self.widget else None
def _get_backend_value(self, force=False):
if self._current_value is None or force is True:
def _async_fetch_value(self, force=False):
def fetch():
backend = self._get_backend()
value = self.default
if backend:
value = backend.get_value(self.key, self.gtype) or self.default
try:
value = backend.get_value(self.key, self.gtype) or self.default
except Exception as e:
self.logger.error(f"Error fetching value: {str(e)}")
GLib.idle_add(self._update_current_value, value)
if self._current_value is None or force:
threading.Thread(target=fetch, daemon=True).start()
def _update_current_value(self, value):
if self._current_value != value:
self._current_value = value
if self.widget:
self.widget.update_display()
def _get_backend_value(self, force=False):
if force:
self._async_fetch_value(force=True)
return self._current_value
def _get_backend_range(self):
......@@ -55,10 +73,15 @@ class Setting(BaseSetting):
def _set_backend_value(self, value):
self.logger.info(f"SET VALUE {value}")
backend = self._get_backend()
if backend:
backend.set_value(self.key, value, self.gtype)
self._current_value = value
def set_val():
backend = self._get_backend()
if backend:
try:
backend.set_value(self.key, value, self.gtype)
GLib.idle_add(self._update_current_value, value)
except Exception as e:
self.logger.error(f"Error setting value: {str(e)}")
threading.Thread(target=set_val, daemon=True).start()
def _get_backend(self):
if self.root is True:
......@@ -67,7 +90,6 @@ class Setting(BaseSetting):
backend.set_backend_params(self.params)
else:
backend = backend_factory.get_backend(self.backend, self.params)
if not backend:
self.logger.error(f"Бекенд {self.backend} не зарегистрирован.")
self.logger.error(f"Backend {self.backend} not registered.")
return backend
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment