Use GLib.idle_add instead of Gdk.threads_add_idle

This commit is contained in:
alfrix 2022-11-18 02:51:41 -03:00
parent cfa35ba8e4
commit 675f28b318
4 changed files with 27 additions and 50 deletions

View File

@ -8,7 +8,7 @@ import websocket
import logging import logging
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gdk from gi.repository import GLib
from ks_includes.KlippyGcodes import KlippyGcodes from ks_includes.KlippyGcodes import KlippyGcodes
api_key = "" api_key = ""
@ -126,24 +126,17 @@ class KlippyWebsocket(threading.Thread):
def on_message(self, ws, message): def on_message(self, ws, message):
response = json.loads(message) response = json.loads(message)
if "id" in response and response['id'] in self.callback_table: if "id" in response and response['id'] in self.callback_table:
Gdk.threads_add_idle( args = (response,
GLib.PRIORITY_HIGH_IDLE, self.callback_table[response['id']][1],
self.callback_table[response['id']][0], self.callback_table[response['id']][2],
response, *self.callback_table[response['id']][3])
self.callback_table[response['id']][1], GLib.idle_add(self.callback_table[response['id']][0], *args)
self.callback_table[response['id']][2],
*self.callback_table[response['id']][3]
)
self.callback_table.pop(response['id']) self.callback_table.pop(response['id'])
return return
if "method" in response and "on_message" in self._callback: if "method" in response and "on_message" in self._callback:
Gdk.threads_add_idle( args = response['method'], response['params'][0] if "params" in response else {}
GLib.PRIORITY_HIGH_IDLE, GLib.idle_add(self._callback['on_message'], *args)
self._callback['on_message'],
response['method'],
response['params'][0] if "params" in response else {}
)
return return
def send_method(self, method, params=None, callback=None, *args): def send_method(self, method, params=None, callback=None, *args):
@ -171,10 +164,7 @@ class KlippyWebsocket(threading.Thread):
self.connected = True self.connected = True
self.reconnect_count = 0 self.reconnect_count = 0
if "on_connect" in self._callback: if "on_connect" in self._callback:
Gdk.threads_add_idle( GLib.idle_add(self._callback['on_connect'])
GLib.PRIORITY_HIGH_IDLE,
self._callback['on_connect']
)
def on_close(self, ws): def on_close(self, ws):
if self.is_connected() is False: if self.is_connected() is False:
@ -192,11 +182,7 @@ class KlippyWebsocket(threading.Thread):
self.connected = False self.connected = False
if "on_close" in self._callback: if "on_close" in self._callback:
Gdk.threads_add_idle( GLib.idle_add(self._callback['on_close'], "Lost Connection to Moonraker")
GLib.PRIORITY_HIGH_IDLE,
self._callback['on_close'],
"Lost Connection to Moonraker",
)
self.retry() self.retry()
def reconnect(self): def reconnect(self):

View File

@ -95,7 +95,8 @@ class KlippyFiles:
if filename in self.filelist: if filename in self.filelist:
logging.info(f"File already exists: {filename}") logging.info(f"File already exists: {filename}")
self.request_metadata(filename) self.request_metadata(filename)
GLib.timeout_add_seconds(1, self.run_callbacks, mods=[filename]) args = None, None, [filename]
GLib.idle_add(self.run_callbacks, *args)
return return
self.filelist.append(filename) self.filelist.append(filename)
@ -185,7 +186,8 @@ class KlippyFiles:
if len(self.callbacks) <= 0: if len(self.callbacks) <= 0:
return False return False
for cb in self.callbacks: for cb in self.callbacks:
GLib.idle_add(cb, newfiles, deletedfiles, mods) args = newfiles, deletedfiles, mods
GLib.idle_add(cb, *args)
return False return False
def get_file_list(self): def get_file_list(self):

View File

@ -147,11 +147,7 @@ class Printer:
self.state = state self.state = state
if self.state_callbacks[state] is not None: if self.state_callbacks[state] is not None:
logging.debug(f"Adding callback for state: {state}") logging.debug(f"Adding callback for state: {state}")
Gdk.threads_add_idle( GLib.idle_add(self.state_cb, self.state_callbacks[state])
GLib.PRIORITY_HIGH_IDLE,
self.state_cb,
self.state_callbacks[state]
)
def configure_power_devices(self, data): def configure_power_devices(self, data):
self.power_devices = {} self.power_devices = {}

View File

@ -11,7 +11,7 @@ from queue import Queue
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gdk from gi.repository import GLib
class WifiManager: class WifiManager:
@ -103,10 +103,7 @@ class WifiManager:
def callback(self, cb_type, msg): def callback(self, cb_type, msg):
if cb_type in self._callbacks: if cb_type in self._callbacks:
for cb in self._callbacks[cb_type]: for cb in self._callbacks[cb_type]:
Gdk.threads_add_idle( GLib.idle_add(cb, msg)
GLib.PRIORITY_DEFAULT_IDLE,
cb,
msg)
def connect(self, ssid): def connect(self, ssid):
netid = None netid = None
@ -164,9 +161,8 @@ class WifiManager:
self.networks[ssid]['connected'] = ssid == con_ssid self.networks[ssid]['connected'] = ssid == con_ssid
if prev_ssid != self.connected_ssid: if prev_ssid != self.connected_ssid:
for cb in self._callbacks['connected']: for cb in self._callbacks['connected']:
Gdk.threads_add_idle( args = self.connected_ssid, prev_ssid
GLib.PRIORITY_DEFAULT_IDLE, GLib.idle_add(cb, *args)
cb, self.connected_ssid, prev_ssid)
return [con_ssid, con_bssid] return [con_ssid, con_bssid]
elif "ssid" in variables and "bssid" in variables: elif "ssid" in variables and "bssid" in variables:
self.connected = True self.connected = True
@ -175,9 +171,8 @@ class WifiManager:
self.networks[ssid]['connected'] = ssid == variables['ssid'] self.networks[ssid]['connected'] = ssid == variables['ssid']
if prev_ssid != self.connected_ssid: if prev_ssid != self.connected_ssid:
for cb in self._callbacks['connected']: for cb in self._callbacks['connected']:
Gdk.threads_add_idle( args = self.connected_ssid, prev_ssid
GLib.PRIORITY_DEFAULT_IDLE, GLib.idle_add(cb, *args)
cb, self.connected_ssid, prev_ssid)
return [variables['ssid'], variables['bssid']] return [variables['ssid'], variables['bssid']]
else: else:
logging.info("Resetting connected_ssid") logging.info("Resetting connected_ssid")
@ -187,9 +182,8 @@ class WifiManager:
self.networks[ssid]['connected'] = False self.networks[ssid]['connected'] = False
if prev_ssid != self.connected_ssid: if prev_ssid != self.connected_ssid:
for cb in self._callbacks['connected']: for cb in self._callbacks['connected']:
Gdk.threads_add_idle( args = self.connected_ssid, prev_ssid
GLib.PRIORITY_DEFAULT_IDLE, GLib.idle_add(cb, *args)
cb, self.connected_ssid, prev_ssid)
return None return None
def get_current_wifi_idle_add(self): def get_current_wifi_idle_add(self):
@ -289,9 +283,8 @@ class WifiManager:
new_networks.append(net) new_networks.append(net)
if new_networks or deleted_networks: if new_networks or deleted_networks:
for cb in self._callbacks['scan_results']: for cb in self._callbacks['scan_results']:
Gdk.threads_add_idle( args = new_networks, deleted_networks
GLib.PRIORITY_DEFAULT_IDLE, GLib.idle_add(cb, *args)
cb, new_networks, deleted_networks)
def wpa_cli(self, command, wait=True): def wpa_cli(self, command, wait=True):
if wait is False: if wait is False:
@ -326,7 +319,7 @@ class WpaSocket(Thread):
continue continue
if msg.startswith("<"): if msg.startswith("<"):
if "CTRL-EVENT-SCAN-RESULTS" in msg: if "CTRL-EVENT-SCAN-RESULTS" in msg:
Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self.wm.scan_results) GLib.idle_add(self.wm.scan_results)
elif "CTRL-EVENT-DISCONNECTED" in msg: elif "CTRL-EVENT-DISCONNECTED" in msg:
self.callback("connecting_status", msg) self.callback("connecting_status", msg)
match = re.match('<3>CTRL-EVENT-DISCONNECTED bssid=(\\S+) reason=3 locally_generated=1', msg) match = re.match('<3>CTRL-EVENT-DISCONNECTED bssid=(\\S+) reason=3 locally_generated=1', msg)
@ -338,7 +331,7 @@ class WpaSocket(Thread):
elif "Trying to associate" in msg or "CTRL-EVENT-REGDOM-CHANGE" in msg: elif "Trying to associate" in msg or "CTRL-EVENT-REGDOM-CHANGE" in msg:
self.callback("connecting_status", msg) self.callback("connecting_status", msg)
elif "CTRL-EVENT-CONNECTED" in msg: elif "CTRL-EVENT-CONNECTED" in msg:
Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self.wm.get_current_wifi_idle_add) GLib.idle_add(self.wm.get_current_wifi_idle_add)
self.callback("connecting_status", msg) self.callback("connecting_status", msg)
elif self.skip_commands > 0: elif self.skip_commands > 0:
self.skip_commands = self.skip_commands - 1 self.skip_commands = self.skip_commands - 1