mirror of
https://github.com/chatmail/core.git
synced 2026-04-02 05:22:14 +03:00
refine handling of accepted contacts in example
This commit is contained in:
@@ -11,10 +11,11 @@ class EchoPlugin:
|
||||
if message.text.strip() == "/quit":
|
||||
message.account.shutdown()
|
||||
else:
|
||||
ch = message.get_sender_chat()
|
||||
# unconditionally accept the chat
|
||||
message.accept_sender_contact()
|
||||
addr = message.get_sender_contact().addr
|
||||
text = message.text
|
||||
ch.send_text("echoing from {}:\n{}".format(addr, text))
|
||||
message.chat.send_text("echoing from {}:\n{}".format(addr, text))
|
||||
|
||||
@deltachat.hookspec.account_hookimpl
|
||||
def process_message_delivered(self, message):
|
||||
|
||||
@@ -22,7 +22,6 @@ def test_echo_quit_plugin(acfactory):
|
||||
|
||||
def run_bot():
|
||||
print("*"*20 + " starting bot")
|
||||
print("*"*20 + " bot_ac.dbpath", bot_ac.db_path)
|
||||
echo_and_quit.main([
|
||||
"echo",
|
||||
"--show-ffi",
|
||||
@@ -40,6 +39,7 @@ def test_echo_quit_plugin(acfactory):
|
||||
ch1.send_text("hello")
|
||||
reply = ac1._evtracker.wait_next_incoming_message()
|
||||
assert "hello" in reply.text
|
||||
assert reply.chat == ch1
|
||||
ch1.send_text("/quit")
|
||||
t.join()
|
||||
|
||||
|
||||
@@ -283,6 +283,9 @@ class Account(object):
|
||||
""" create or get an existing chat object for the
|
||||
the specified message.
|
||||
|
||||
If this message is in the deaddrop chat then
|
||||
the sender will become an accepted contact.
|
||||
|
||||
:param message: messsage id or message instance.
|
||||
:returns: a :class:`deltachat.chat.Chat` object.
|
||||
"""
|
||||
|
||||
@@ -128,3 +128,10 @@ class FFIEventTracker:
|
||||
""" wait for and return next incoming message. """
|
||||
ev = self.get_matching("DC_EVENT_INCOMING_MSG")
|
||||
return self.account.get_message_by_id(ev.data2)
|
||||
|
||||
def wait_next_messages_changed(self):
|
||||
""" wait for and return next message-changed message or None
|
||||
if the event contains no msgid"""
|
||||
ev = self.get_matching("DC_EVENT_MSGS_CHANGED")
|
||||
if ev.data2 > 0:
|
||||
return self.account.get_message_by_id(ev.data2)
|
||||
|
||||
@@ -50,6 +50,16 @@ class Message(object):
|
||||
lib.dc_msg_unref
|
||||
))
|
||||
|
||||
def accept_sender_contact(self):
|
||||
""" ensure that the sender is an accepted contact
|
||||
and that the message has a non-deaddrop chat object.
|
||||
"""
|
||||
self.account.create_chat_by_message(self)
|
||||
self._dc_msg = ffi.gc(
|
||||
lib.dc_get_msg(self._dc_context, self.id),
|
||||
lib.dc_msg_unref
|
||||
)
|
||||
|
||||
@props.with_doc
|
||||
def text(self):
|
||||
"""unicode text of this messages (might be empty if not a text message). """
|
||||
|
||||
@@ -276,7 +276,7 @@ class TestOfflineChat:
|
||||
|
||||
def test_delete_and_send_fails(self, ac1, chat1):
|
||||
chat1.delete()
|
||||
ac1._evtracker.get_matching("DC_EVENT_MSGS_CHANGED")
|
||||
ac1._evtracker.wait_next_messages_changed()
|
||||
with pytest.raises(ValueError):
|
||||
chat1.send_text("msg1")
|
||||
|
||||
@@ -625,8 +625,8 @@ class TestOnlineAccount:
|
||||
ev = ac1._evtracker.get_matching("DC_EVENT_DELETED_BLOB_FILE")
|
||||
|
||||
# Second client receives only second message, but not the first
|
||||
ev = ac1_clone._evtracker.get_matching("DC_EVENT_MSGS_CHANGED")
|
||||
assert ac1_clone.get_message_by_id(ev.data2).text == msg_out.text
|
||||
ev_msg = ac1_clone._evtracker.wait_next_messages_changed()
|
||||
assert ev_msg.text == msg_out.text
|
||||
|
||||
def test_send_file_twice_unicode_filename_mangling(self, tmpdir, acfactory, lp):
|
||||
ac1, ac2 = acfactory.get_two_online_accounts()
|
||||
@@ -1377,6 +1377,15 @@ class TestOnlineAccount:
|
||||
assert chat1b.get_profile_image() is None
|
||||
assert chat.get_profile_image() is None
|
||||
|
||||
def test_accept_sender_contact(self, acfactory, lp):
|
||||
ac1, ac2 = acfactory.get_two_online_accounts()
|
||||
ch = ac1.create_chat_by_contact(ac1.create_contact(ac2.get_config("addr")))
|
||||
ch.send_text("hello")
|
||||
msg = ac2._evtracker.wait_next_messages_changed()
|
||||
assert msg.chat.is_deaddrop()
|
||||
msg.accept_sender_contact()
|
||||
assert not msg.chat.is_deaddrop()
|
||||
|
||||
def test_send_receive_locations(self, acfactory, lp):
|
||||
now = datetime.utcnow()
|
||||
ac1, ac2 = acfactory.get_two_online_accounts()
|
||||
|
||||
Reference in New Issue
Block a user