mirror of
https://github.com/chatmail/core.git
synced 2026-04-26 09:56:35 +03:00
Merge pull request #232 from deltachat/fix_markseen
(jikstra, hpk) fix markseen logic to work like C
This commit is contained in:
@@ -7,9 +7,9 @@ import re
|
|||||||
import time
|
import time
|
||||||
from array import array
|
from array import array
|
||||||
try:
|
try:
|
||||||
from queue import Queue
|
from queue import Queue, Empty
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from Queue import Queue
|
from Queue import Queue, Empty
|
||||||
|
|
||||||
import deltachat
|
import deltachat
|
||||||
from . import const
|
from . import const
|
||||||
@@ -439,6 +439,17 @@ class EventLogger:
|
|||||||
raise ValueError("{}({!r},{!r})".format(*ev))
|
raise ValueError("{}({!r},{!r})".format(*ev))
|
||||||
return ev
|
return ev
|
||||||
|
|
||||||
|
def ensure_event_not_queued(self, event_name_regex):
|
||||||
|
__tracebackhide__ = True
|
||||||
|
rex = re.compile("(?:{}).*".format(event_name_regex))
|
||||||
|
while 1:
|
||||||
|
try:
|
||||||
|
ev = self._event_queue.get(False)
|
||||||
|
except Empty:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
assert not rex.match(ev[0]), "event found {}".format(ev)
|
||||||
|
|
||||||
def get_matching(self, event_name_regex, check_error=True):
|
def get_matching(self, event_name_regex, check_error=True):
|
||||||
self._log("-- waiting for event with regex: {} --".format(event_name_regex))
|
self._log("-- waiting for event with regex: {} --".format(event_name_regex))
|
||||||
rex = re.compile("(?:{}).*".format(event_name_regex))
|
rex = re.compile("(?:{}).*".format(event_name_regex))
|
||||||
|
|||||||
@@ -64,3 +64,14 @@ def test_sig():
|
|||||||
assert sig(const.DC_EVENT_SMTP_CONNECTED) == 2
|
assert sig(const.DC_EVENT_SMTP_CONNECTED) == 2
|
||||||
assert sig(const.DC_EVENT_IMAP_CONNECTED) == 2
|
assert sig(const.DC_EVENT_IMAP_CONNECTED) == 2
|
||||||
assert sig(const.DC_EVENT_SMTP_MESSAGE_SENT) == 2
|
assert sig(const.DC_EVENT_SMTP_MESSAGE_SENT) == 2
|
||||||
|
|
||||||
|
|
||||||
|
def test_markseen_invalid_message_ids(acfactory):
|
||||||
|
ac1 = acfactory.get_configured_offline_account()
|
||||||
|
contact1 = ac1.create_contact(email="some1@example.com", name="some1")
|
||||||
|
chat = ac1.create_chat_by_contact(contact1)
|
||||||
|
chat.send_text("one messae")
|
||||||
|
ac1._evlogger.get_matching("DC_EVENT_MSGS_CHANGED")
|
||||||
|
msg_ids = [9]
|
||||||
|
lib.dc_markseen_msgs(ac1._dc_context, msg_ids, len(msg_ids))
|
||||||
|
ac1._evlogger.ensure_event_not_queued("DC_EVENT_WARNING|DC_EVENT_ERROR")
|
||||||
|
|||||||
@@ -552,9 +552,13 @@ pub fn dc_markseen_msgs(context: &Context, msg_ids: *const u32, msg_cnt: usize)
|
|||||||
let mut res = Vec::with_capacity(msg_cnt);
|
let mut res = Vec::with_capacity(msg_cnt);
|
||||||
for i in 0..msg_cnt {
|
for i in 0..msg_cnt {
|
||||||
let id = unsafe { *msg_ids.offset(i as isize) };
|
let id = unsafe { *msg_ids.offset(i as isize) };
|
||||||
let (state, blocked) = stmt.query_row(params![id as i32], |row| {
|
let query_res = stmt.query_row(params![id as i32], |row| {
|
||||||
Ok((row.get::<_, i32>(0)?, row.get::<_, Option<i32>>(1)?.unwrap_or_default()))
|
Ok((row.get::<_, i32>(0)?, row.get::<_, Option<i32>>(1)?.unwrap_or_default()))
|
||||||
})?;
|
});
|
||||||
|
if let Err(rusqlite::Error::QueryReturnedNoRows) = query_res {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let (state, blocked) = query_res?;
|
||||||
res.push((id, state, blocked));
|
res.push((id, state, blocked));
|
||||||
}
|
}
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
|||||||
Reference in New Issue
Block a user