mirror of
https://github.com/chatmail/core.git
synced 2026-05-06 06:46:35 +03:00
move towards pluggy
This commit is contained in:
@@ -6,10 +6,9 @@ import threading
|
|||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
from array import array
|
from array import array
|
||||||
try:
|
from queue import Queue, Empty
|
||||||
from queue import Queue, Empty
|
|
||||||
except ImportError:
|
from pluggy import PluginManager
|
||||||
from Queue import Queue, Empty
|
|
||||||
|
|
||||||
import deltachat
|
import deltachat
|
||||||
from . import const
|
from . import const
|
||||||
@@ -19,6 +18,7 @@ from .chat import Chat
|
|||||||
from .message import Message
|
from .message import Message
|
||||||
from .contact import Contact
|
from .contact import Contact
|
||||||
from .eventlogger import EventLogger
|
from .eventlogger import EventLogger
|
||||||
|
from .hookspec import get_plugin_manager, hookimpl
|
||||||
|
|
||||||
|
|
||||||
class Account(object):
|
class Account(object):
|
||||||
@@ -42,8 +42,20 @@ class Account(object):
|
|||||||
)
|
)
|
||||||
self._evlogger = EventLogger(self._dc_context, logid, debug)
|
self._evlogger = EventLogger(self._dc_context, logid, debug)
|
||||||
self._threads = IOThreads(self._dc_context, self._evlogger._log_event)
|
self._threads = IOThreads(self._dc_context, self._evlogger._log_event)
|
||||||
deltachat.set_context_callback(self._dc_context, self._process_ll_event)
|
|
||||||
|
|
||||||
|
# register event call back and initialize plugin system
|
||||||
|
def _ll_event(ctx, evt_name, data1, data2):
|
||||||
|
assert ctx == self._dc_context
|
||||||
|
self.pluggy.hook.process_low_level_event(
|
||||||
|
account=self, event_name=evt_name, data1=data1, data2=data2
|
||||||
|
)
|
||||||
|
|
||||||
|
self.pluggy = get_plugin_manager()
|
||||||
|
self.pluggy.register(self._evlogger)
|
||||||
|
self.pluggy.register(self)
|
||||||
|
deltachat.set_context_callback(self._dc_context, _ll_event)
|
||||||
|
|
||||||
|
# open database
|
||||||
if hasattr(db_path, "encode"):
|
if hasattr(db_path, "encode"):
|
||||||
db_path = db_path.encode("utf8")
|
db_path = db_path.encode("utf8")
|
||||||
if not lib.dc_open(self._dc_context, db_path, ffi.NULL):
|
if not lib.dc_open(self._dc_context, db_path, ffi.NULL):
|
||||||
@@ -55,6 +67,14 @@ class Account(object):
|
|||||||
# def __del__(self):
|
# def __del__(self):
|
||||||
# self.shutdown()
|
# self.shutdown()
|
||||||
|
|
||||||
|
@hookimpl
|
||||||
|
def process_low_level_event(self, account, event_name, data1, data2):
|
||||||
|
# there could be multiple accounts instantiated
|
||||||
|
if account != self:
|
||||||
|
method = getattr(self, "on_" + event_name.lower(), None)
|
||||||
|
if method is not None:
|
||||||
|
method(data1, data2)
|
||||||
|
|
||||||
def _check_config_key(self, name):
|
def _check_config_key(self, name):
|
||||||
if name not in self._configkeys:
|
if name not in self._configkeys:
|
||||||
raise KeyError("{!r} not a valid config key, existing keys: {!r}".format(
|
raise KeyError("{!r} not a valid config key, existing keys: {!r}".format(
|
||||||
@@ -520,14 +540,6 @@ class Account(object):
|
|||||||
del self._dc_context
|
del self._dc_context
|
||||||
atexit.unregister(self.shutdown)
|
atexit.unregister(self.shutdown)
|
||||||
|
|
||||||
def _process_ll_event(self, ctx, evt_name, data1, data2):
|
|
||||||
assert ctx == self._dc_context
|
|
||||||
self._evlogger(evt_name, data1, data2)
|
|
||||||
method = getattr(self, "on_" + evt_name.lower(), None)
|
|
||||||
if method is not None:
|
|
||||||
method(data1, data2)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def on_dc_event_imex_progress(self, data1, data2):
|
def on_dc_event_imex_progress(self, data1, data2):
|
||||||
if data1 == 1000:
|
if data1 == 1000:
|
||||||
self._imex_events.put(True)
|
self._imex_events.put(True)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import threading
|
|||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
from queue import Queue, Empty
|
from queue import Queue, Empty
|
||||||
|
from .hookspec import hookimpl
|
||||||
|
|
||||||
|
|
||||||
class EventLogger:
|
class EventLogger:
|
||||||
@@ -17,9 +18,10 @@ class EventLogger:
|
|||||||
self._timeout = None
|
self._timeout = None
|
||||||
self.init_time = time.time()
|
self.init_time = time.time()
|
||||||
|
|
||||||
def __call__(self, evt_name, data1, data2):
|
@hookimpl
|
||||||
self._log_event(evt_name, data1, data2)
|
def process_low_level_event(self, event_name, data1, data2):
|
||||||
self._event_queue.put((evt_name, data1, data2))
|
self._log_event(event_name, data1, data2)
|
||||||
|
self._event_queue.put((event_name, data1, data2))
|
||||||
|
|
||||||
def set_timeout(self, timeout):
|
def set_timeout(self, timeout):
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
|
|||||||
Reference in New Issue
Block a user