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]