Philipp Hörist pushed to branch master at gajim / gajim


Commits:
5a68662f by Philipp Hörist at 2025-10-25T21:05:54+02:00
new: Add PulseManager

- - - - -


4 changed files:

- gajim/common/app.py
- gajim/common/application.py
- gajim/common/task_manager.py
- gajim/gtk/chat_list.py


Changes:

=====================================
gajim/common/app.py
=====================================
@@ -54,6 +54,7 @@
     from gajim.common.storage.cache import CacheStorage
     from gajim.common.storage.draft import DraftStorage
     from gajim.common.storage.events.storage import EventStorage
+    from gajim.common.task_manager import PulseManager
     from gajim.common.task_manager import TaskManager
 
     from gajim.gtk.application import GajimApplication  # noqa: F401
@@ -106,6 +107,7 @@ def __init__(self):
 ftm = cast('FileTransferManager', None)
 
 task_manager = cast('TaskManager', None)
+pulse_manager = cast('PulseManager', None)
 
 gupnp_igd = None
 


=====================================
gajim/common/application.py
=====================================
@@ -47,6 +47,7 @@
 from gajim.common.storage.cache import CacheStorage
 from gajim.common.storage.draft import DraftStorage
 from gajim.common.storage.events.storage import EventStorage
+from gajim.common.task_manager import PulseManager
 from gajim.common.task_manager import TaskManager
 from gajim.common.util.text import from_one_line
 from gajim.common.util.text import get_random_string
@@ -92,6 +93,7 @@ def _init_core(self) -> bool:
 
         app.cert_store = CertificateStore()
         app.task_manager = TaskManager()
+        app.pulse_manager = PulseManager()
 
         app.ftm = FileTransferManager()
 


=====================================
gajim/common/task_manager.py
=====================================
@@ -4,9 +4,12 @@
 
 from __future__ import annotations
 
+from typing import Any
+
 import functools
 import logging
 import queue
+from collections.abc import Callable
 
 from gi.repository import GLib
 
@@ -96,3 +99,25 @@ def execute(self) -> None:
 
     def preconditions_met(self) -> bool:
         raise NotImplementedError
+
+
+class PulseManager:
+    def __init__(self) -> None:
+        self._callbacks: list[Callable[[], Any]] = []
+        self._timeout_id = GLib.timeout_add_seconds(60, self._execute_pulse)
+
+    def add_callback(self, callback: Callable[[], Any]) -> None:
+        self._callbacks.append(callback)
+
+    def remove_callback(self, callback: Callable[[], Any]) -> None:
+        self._callbacks.remove(callback)
+
+    def _execute_pulse(self) -> bool:
+        log.info('Execute pulse for %s callbacks', len(self._callbacks))
+        for callback in self._callbacks:
+            try:
+                callback()
+            except Exception:
+                log.exception('Unable to execute pulse')
+
+        return GLib.SOURCE_CONTINUE


=====================================
gajim/gtk/chat_list.py
=====================================
@@ -96,7 +96,7 @@ def __init__(self, workspace_id: str) -> None:
             ]
         )
 
-        self._timer_id = GLib.timeout_add_seconds(60, self._update_row_state)
+        app.pulse_manager.add_callback(self._update_row_state)
 
     def do_unroot(self) -> None:
         Gtk.ListBox.do_unroot(self)
@@ -106,7 +106,7 @@ def do_unroot(self) -> None:
         self.set_filter_func(None)
         self.set_header_func(None)
         self.set_sort_func(None)
-        GLib.source_remove(self._timer_id)
+        app.pulse_manager.remove_callback(self._update_row_state)
         app.check_finalize(self)
 
     @property



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/5a68662f2060f9e23eb15446677e7de82cd76335

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/5a68662f2060f9e23eb15446677e7de82cd76335
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to