mirror of
https://github.com/chatmail/core.git
synced 2026-04-06 15:42:10 +03:00
refine low level event handling
slight refactor on printing
This commit is contained in:
@@ -77,5 +77,5 @@ def get_dc_event_name(integer, _DC_EVENTNAME_MAP={}):
|
||||
|
||||
|
||||
def register_global_plugin(plugin):
|
||||
gm = hookspect.Global._get_plugin_manager()
|
||||
gm = hookspec.Global._get_plugin_manager()
|
||||
gm.register(plugin)
|
||||
|
||||
@@ -47,8 +47,9 @@ class Account(object):
|
||||
# send all FFI events for this account to a plugin hook
|
||||
def _ll_event(ctx, evt_name, data1, data2):
|
||||
assert ctx == self._dc_context
|
||||
ffi_event = FFIEvent(name=evt_name, data1=data1, data2=data2)
|
||||
self._pm.hook.process_ffi_event(
|
||||
account=self, event_name=evt_name, data1=data1, data2=data2
|
||||
account=self, ffi_event=ffi_event
|
||||
)
|
||||
deltachat.set_context_callback(self._dc_context, _ll_event)
|
||||
|
||||
@@ -61,8 +62,9 @@ class Account(object):
|
||||
atexit.register(self.shutdown)
|
||||
|
||||
@hookspec.account_hookimpl
|
||||
def process_ffi_event(self, event_name, data1, data2):
|
||||
if event_name == "DC_EVENT_CONFIGURE_PROGRESS":
|
||||
def process_ffi_event(self, ffi_event):
|
||||
if ffi_event.name == "DC_EVENT_CONFIGURE_PROGRESS":
|
||||
data1 = ffi_event.data1
|
||||
if data1 == 0 or data1 == 1000:
|
||||
success = data1 == 1000
|
||||
self._pm.hook.configure_completed(success=success)
|
||||
@@ -639,6 +641,16 @@ def _destroy_dc_context(dc_context, dc_context_unref=lib.dc_context_unref):
|
||||
pass
|
||||
|
||||
|
||||
class FFIEvent:
|
||||
def __init__(self, name, data1, data2):
|
||||
self.name = name
|
||||
self.data1 = data1
|
||||
self.data2 = data2
|
||||
|
||||
def __str__(self):
|
||||
return "{name} data1={data1} data2={data2}".format(**self.__dict__)
|
||||
|
||||
|
||||
class ScannedQRCode:
|
||||
def __init__(self, dc_lot):
|
||||
self._dc_lot = dc_lot
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import threading
|
||||
import time
|
||||
from .hookspec import account_hookimpl, global_hookimpl
|
||||
from .hookspec import account_hookimpl
|
||||
|
||||
|
||||
class FFIEventLogger:
|
||||
@@ -20,15 +20,14 @@ class FFIEventLogger:
|
||||
self.init_time = time.time()
|
||||
|
||||
@account_hookimpl
|
||||
def process_ffi_event(self, event_name, data1, data2):
|
||||
self._log_event(event_name, data1, data2)
|
||||
def process_ffi_event(self, ffi_event):
|
||||
self._log_event(ffi_event)
|
||||
|
||||
def _log_event(self, evt_name, data1, data2):
|
||||
def _log_event(self, ffi_event):
|
||||
# don't show events that are anyway empty impls now
|
||||
if evt_name == "DC_EVENT_GET_STRING":
|
||||
if ffi_event.name == "DC_EVENT_GET_STRING":
|
||||
return
|
||||
evpart = "{}({!r},{!r})".format(evt_name, data1, data2)
|
||||
self.account.log_line(evpart)
|
||||
self.account.log_line(str(ffi_event))
|
||||
|
||||
@account_hookimpl
|
||||
def log_line(self, message):
|
||||
@@ -36,9 +35,10 @@ class FFIEventLogger:
|
||||
tname = getattr(t, "name", t)
|
||||
if tname == "MainThread":
|
||||
tname = "MAIN"
|
||||
elapsed = time.time() - self.init_time
|
||||
locname = tname
|
||||
if self.logid:
|
||||
locname += "-" + self.logid
|
||||
s = "{:2.2f} [{}] {}".format(elapsed, locname, message)
|
||||
with self._loglock:
|
||||
print("{:2.2f} [{}-{}] {}".format(
|
||||
time.time() - self.init_time,
|
||||
tname,
|
||||
self.logid,
|
||||
message))
|
||||
print(s)
|
||||
|
||||
@@ -24,21 +24,24 @@ class PerAccount:
|
||||
return pm
|
||||
|
||||
@account_hookspec
|
||||
def process_ffi_event(self, event_name, data1, data2):
|
||||
""" process a CFFI low level events for a given account. """
|
||||
def process_ffi_event(self, ffi_event):
|
||||
""" process a CFFI low level events for a given account.
|
||||
|
||||
ffi_event has "name", "data1", "data2" attributes according
|
||||
to https://c.delta.chat/group__DC__EVENT.html
|
||||
"""
|
||||
|
||||
@account_hookspec
|
||||
def log_line(self, message):
|
||||
""" log a message related to the account. """
|
||||
|
||||
@account_hookspec
|
||||
def after_shutdown(self):
|
||||
""" Called when the account has been shutdown. """
|
||||
|
||||
@account_hookspec
|
||||
def configure_completed(self, success):
|
||||
""" Called when a configure process completed. """
|
||||
|
||||
@account_hookspec
|
||||
def after_shutdown(self):
|
||||
""" Called after the account has been shutdown. """
|
||||
|
||||
|
||||
class Global:
|
||||
|
||||
@@ -14,11 +14,11 @@ class ImexTracker:
|
||||
self._imex_events = Queue()
|
||||
|
||||
@account_hookimpl
|
||||
def process_ffi_event(self, event_name, data1, data2):
|
||||
if event_name == "DC_EVENT_IMEX_PROGRESS":
|
||||
self._imex_events.put(data1)
|
||||
elif event_name == "DC_EVENT_IMEX_FILE_WRITTEN":
|
||||
self._imex_events.put(data1)
|
||||
def process_ffi_event(self, ffi_event):
|
||||
if ffi_event.name == "DC_EVENT_IMEX_PROGRESS":
|
||||
self._imex_events.put(ffi_event.data1)
|
||||
elif ffi_event.name == "DC_EVENT_IMEX_FILE_WRITTEN":
|
||||
self._imex_events.put(ffi_event.data1)
|
||||
|
||||
def wait_finish(self, progress_timeout=60):
|
||||
""" Return list of written files, raise ValueError if ExportFailed. """
|
||||
@@ -47,11 +47,11 @@ class ConfigureTracker:
|
||||
self._ffi_events = []
|
||||
|
||||
@account_hookimpl
|
||||
def process_ffi_event(self, event_name, data1, data2):
|
||||
self._ffi_events.append((event_name, data1, data2))
|
||||
if event_name == "DC_EVENT_SMTP_CONNECTED":
|
||||
def process_ffi_event(self, ffi_event):
|
||||
self._ffi_events.append(ffi_event)
|
||||
if ffi_event.name == "DC_EVENT_SMTP_CONNECTED":
|
||||
self._smtp_finished.set()
|
||||
elif event_name == "DC_EVENT_IMAP_CONNECTED":
|
||||
elif ffi_event.name == "DC_EVENT_IMAP_CONNECTED":
|
||||
self._imap_finished.set()
|
||||
|
||||
@account_hookimpl
|
||||
@@ -72,5 +72,5 @@ class ConfigureTracker:
|
||||
Raise Exception if Configure failed
|
||||
"""
|
||||
if not self._configure_events.get():
|
||||
content = "\n".join("{}: {} {}".format(*args) for args in self._ffi_events)
|
||||
content = "\n".join(map(str, self._ffi_events))
|
||||
raise ConfigureFailed(content)
|
||||
|
||||
Reference in New Issue
Block a user