mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 21:06:31 +03:00
feat: Don't mark messages as seen on IMAP if bcc_self=0 or bot=1
bcc_self=0 means that the user disabled it or it's a chatmail setup with the only device and w/o backups. If a backup is made someday, old messages not marked as IMAP-seen aren't a problem and new ones are marked as IMAP-seen. For bots, particularly multi-device ones (which are a rare case), probably no sane logic can be built on the "seen" message status. Moreover, if the user has additionally a bot that reads incoming messages, it doesn't mean that the user doesn't want to read them too.
This commit is contained in:
@@ -11,6 +11,7 @@ def test_moved_markseen(acfactory, direct_imap, log):
|
|||||||
|
|
||||||
addr, password = acfactory.get_credentials()
|
addr, password = acfactory.get_credentials()
|
||||||
ac2 = acfactory.get_unconfigured_account()
|
ac2 = acfactory.get_unconfigured_account()
|
||||||
|
ac2.set_config("bcc_self", "1")
|
||||||
ac2.add_or_update_transport({"addr": addr, "password": password})
|
ac2.add_or_update_transport({"addr": addr, "password": password})
|
||||||
ac2.bring_online()
|
ac2.bring_online()
|
||||||
|
|
||||||
@@ -60,8 +61,8 @@ def test_markseen_message_and_mdn(acfactory, direct_imap):
|
|||||||
for ac in ac1, ac2:
|
for ac in ac1, ac2:
|
||||||
ac.set_config("delete_server_after", "0")
|
ac.set_config("delete_server_after", "0")
|
||||||
|
|
||||||
# Do not send BCC to self, we only want to test MDN on ac1.
|
# For ac1, we only want to test MDN.
|
||||||
ac1.set_config("bcc_self", "0")
|
ac2.set_config("bcc_self", "1")
|
||||||
|
|
||||||
acfactory.get_accepted_chat(ac1, ac2).send_text("hi")
|
acfactory.get_accepted_chat(ac1, ac2).send_text("hi")
|
||||||
msg = ac2.wait_for_incoming_msg()
|
msg = ac2.wait_for_incoming_msg()
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ def test_one_account_send_bcc_setting(acfactory, log, direct_imap):
|
|||||||
|
|
||||||
# now make sure we are sending message to ourselves too
|
# now make sure we are sending message to ourselves too
|
||||||
assert self_addr in ev.msg
|
assert self_addr in ev.msg
|
||||||
assert self_addr in ev.msg
|
|
||||||
|
|
||||||
# BCC-self messages are marked as seen by the sender device.
|
# BCC-self messages are marked as seen by the sender device.
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@@ -160,6 +160,7 @@ def test_html_message(acfactory, lp):
|
|||||||
|
|
||||||
def test_webxdc_message(acfactory, data, lp):
|
def test_webxdc_message(acfactory, data, lp):
|
||||||
ac1, ac2 = acfactory.get_online_accounts(2)
|
ac1, ac2 = acfactory.get_online_accounts(2)
|
||||||
|
ac2.set_config("bcc_self", "1")
|
||||||
chat = acfactory.get_accepted_chat(ac1, ac2)
|
chat = acfactory.get_accepted_chat(ac1, ac2)
|
||||||
|
|
||||||
lp.sec("ac1: prepare and send text message to ac2")
|
lp.sec("ac1: prepare and send text message to ac2")
|
||||||
@@ -362,6 +363,8 @@ def test_send_and_receive_message_markseen(acfactory, lp):
|
|||||||
# make DC's life harder wrt to encodings
|
# make DC's life harder wrt to encodings
|
||||||
ac1.set_config("displayname", "ä name")
|
ac1.set_config("displayname", "ä name")
|
||||||
|
|
||||||
|
ac2.set_config("bcc_self", "1")
|
||||||
|
|
||||||
# clear any fresh device messages
|
# clear any fresh device messages
|
||||||
ac1.get_device_chat().mark_noticed()
|
ac1.get_device_chat().mark_noticed()
|
||||||
ac2.get_device_chat().mark_noticed()
|
ac2.get_device_chat().mark_noticed()
|
||||||
@@ -502,9 +505,8 @@ def test_mdn_asymmetric(acfactory, lp):
|
|||||||
chat = ac1.create_chat(ac2)
|
chat = ac1.create_chat(ac2)
|
||||||
ac2.create_chat(ac1)
|
ac2.create_chat(ac1)
|
||||||
|
|
||||||
# make sure mdns are enabled (usually enabled by default already)
|
ac1.set_config("bcc_self", "1")
|
||||||
ac1.set_config("mdns_enabled", "1")
|
ac2.set_config("bcc_self", "1")
|
||||||
ac2.set_config("mdns_enabled", "1")
|
|
||||||
|
|
||||||
lp.sec("sending text message from ac1 to ac2")
|
lp.sec("sending text message from ac1 to ac2")
|
||||||
msg_out = chat.send_text("message1")
|
msg_out = chat.send_text("message1")
|
||||||
|
|||||||
@@ -2073,6 +2073,11 @@ async fn mark_seen_by_uid(
|
|||||||
/// Schedule marking the message as Seen on IMAP by adding all known IMAP messages corresponding to
|
/// Schedule marking the message as Seen on IMAP by adding all known IMAP messages corresponding to
|
||||||
/// the given Message-ID to `imap_markseen` table.
|
/// the given Message-ID to `imap_markseen` table.
|
||||||
pub(crate) async fn markseen_on_imap_table(context: &Context, message_id: &str) -> Result<()> {
|
pub(crate) async fn markseen_on_imap_table(context: &Context, message_id: &str) -> Result<()> {
|
||||||
|
if !context.get_config_bool(Config::BccSelf).await?
|
||||||
|
|| context.get_config_bool(Config::Bot).await?
|
||||||
|
{
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.execute(
|
.execute(
|
||||||
|
|||||||
Reference in New Issue
Block a user