minimal get_next_event api

This commit is contained in:
dignifiedquire
2020-03-22 01:07:06 +01:00
parent 11fa60d690
commit 9b4c195872
6 changed files with 254 additions and 143 deletions

View File

@@ -565,12 +565,14 @@ class IOThreads:
self._thread_quitflag = False
self._name2thread = {}
self._log_event = log_event
self._running = False
def is_started(self):
return len(self._name2thread) > 0
return self._running
def start(self, imap=True, smtp=True, mvbox=False, sentbox=False):
assert not self.is_started()
self._running = True
self._start_one_thread("deltachat", self.dc_thread_run)
def _start_one_thread(self, name, func):
@@ -583,11 +585,25 @@ class IOThreads:
if wait:
for name, thread in self._name2thread.items():
thread.join()
self._running = False
def dc_thread_run(self):
self._log_event("py-bindings-info", 0, "DC THREAD START")
lib.dc_context_run(self._dc_context, lib.py_dc_callback)
lib.dc_context_run(self._dc_context)
while self._running:
if lib.dc_has_next_event(self._dc_context):
event = lib.dc_get_next_event(self._dc_context)
if event != ffi.NULL:
deltachat.py_dc_callback(
self._dc_context,
lib.dc_event_get_id(event),
lib.dc_event_get_data1(event),
lib.dc_event_get_data2(event)
)
lib.dc_event_unref(event)
else:
time.sleep(0.05)
self._log_event("py-bindings-info", 0, "DC THREAD FINISHED")