mirror of
https://github.com/chatmail/core.git
synced 2026-05-20 07:16:31 +03:00
feat: receive_imf: Log reasoning for chat assignment
This commit is contained in:
@@ -636,8 +636,6 @@ pub(crate) async fn receive_imf_inner(
|
|||||||
|
|
||||||
let chat_assignment =
|
let chat_assignment =
|
||||||
decide_chat_assignment(context, &mime_parser, &parent_message, rfc724_mid, from_id).await?;
|
decide_chat_assignment(context, &mime_parser, &parent_message, rfc724_mid, from_id).await?;
|
||||||
info!(context, "Chat assignment is {chat_assignment:?}.");
|
|
||||||
|
|
||||||
let (to_ids, past_ids) = get_to_and_past_contact_ids(
|
let (to_ids, past_ids) = get_to_and_past_contact_ids(
|
||||||
context,
|
context,
|
||||||
&mime_parser,
|
&mime_parser,
|
||||||
@@ -1313,17 +1311,34 @@ async fn decide_chat_assignment(
|
|||||||
if from_id != ContactId::SELF && !has_self_addr {
|
if from_id != ContactId::SELF && !has_self_addr {
|
||||||
num_recipients += 1;
|
num_recipients += 1;
|
||||||
}
|
}
|
||||||
let can_be_11_chat = num_recipients <= 1
|
let mut can_be_11_chat_log = String::new();
|
||||||
&& (from_id != ContactId::SELF
|
let mut l = |cond: bool, s: String| {
|
||||||
|| !(mime_parser.recipients.is_empty() || has_self_addr)
|
can_be_11_chat_log += &s;
|
||||||
|| mime_parser.was_encrypted());
|
cond
|
||||||
|
};
|
||||||
|
let can_be_11_chat = l(
|
||||||
|
num_recipients <= 1,
|
||||||
|
format!("num_recipients={num_recipients}."),
|
||||||
|
) && (l(from_id != ContactId::SELF, format!(" from_id={from_id}."))
|
||||||
|
|| !(l(
|
||||||
|
mime_parser.recipients.is_empty(),
|
||||||
|
format!(" Raw recipients len={}.", mime_parser.recipients.len()),
|
||||||
|
) || l(has_self_addr, format!(" has_self_addr={has_self_addr}.")))
|
||||||
|
|| l(
|
||||||
|
mime_parser.was_encrypted(),
|
||||||
|
format!(" was_encrypted={}.", mime_parser.was_encrypted()),
|
||||||
|
));
|
||||||
|
|
||||||
|
let chat_assignment_log;
|
||||||
let chat_assignment = if should_trash {
|
let chat_assignment = if should_trash {
|
||||||
|
chat_assignment_log = "".to_string();
|
||||||
ChatAssignment::Trash
|
ChatAssignment::Trash
|
||||||
} else if mime_parser.get_mailinglist_header().is_some() {
|
} else if mime_parser.get_mailinglist_header().is_some() {
|
||||||
|
chat_assignment_log = "Mailing list header found.".to_string();
|
||||||
ChatAssignment::MailingListOrBroadcast
|
ChatAssignment::MailingListOrBroadcast
|
||||||
} else if let Some(grpid) = mime_parser.get_chat_group_id() {
|
} else if let Some(grpid) = mime_parser.get_chat_group_id() {
|
||||||
if mime_parser.was_encrypted() {
|
if mime_parser.was_encrypted() {
|
||||||
|
chat_assignment_log = "Encrypted group message.".to_string();
|
||||||
ChatAssignment::GroupChat {
|
ChatAssignment::GroupChat {
|
||||||
grpid: grpid.to_string(),
|
grpid: grpid.to_string(),
|
||||||
}
|
}
|
||||||
@@ -1332,11 +1347,13 @@ async fn decide_chat_assignment(
|
|||||||
lookup_chat_by_reply(context, mime_parser, parent).await?
|
lookup_chat_by_reply(context, mime_parser, parent).await?
|
||||||
{
|
{
|
||||||
// Try to assign to a chat based on In-Reply-To/References.
|
// Try to assign to a chat based on In-Reply-To/References.
|
||||||
|
chat_assignment_log = "Unencrypted group reply.".to_string();
|
||||||
ChatAssignment::ExistingChat {
|
ChatAssignment::ExistingChat {
|
||||||
chat_id,
|
chat_id,
|
||||||
chat_id_blocked,
|
chat_id_blocked,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
chat_assignment_log = "Unencrypted group reply.".to_string();
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1347,6 +1364,7 @@ async fn decide_chat_assignment(
|
|||||||
// even if it had only two members.
|
// even if it had only two members.
|
||||||
//
|
//
|
||||||
// Group ID is ignored, however.
|
// Group ID is ignored, however.
|
||||||
|
chat_assignment_log = "Unencrypted group message, no parent.".to_string();
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
}
|
}
|
||||||
} else if let Some(parent) = &parent_message {
|
} else if let Some(parent) = &parent_message {
|
||||||
@@ -1354,24 +1372,38 @@ async fn decide_chat_assignment(
|
|||||||
lookup_chat_by_reply(context, mime_parser, parent).await?
|
lookup_chat_by_reply(context, mime_parser, parent).await?
|
||||||
{
|
{
|
||||||
// Try to assign to a chat based on In-Reply-To/References.
|
// Try to assign to a chat based on In-Reply-To/References.
|
||||||
|
chat_assignment_log = "Reply w/o grpid.".to_string();
|
||||||
ChatAssignment::ExistingChat {
|
ChatAssignment::ExistingChat {
|
||||||
chat_id,
|
chat_id,
|
||||||
chat_id_blocked,
|
chat_id_blocked,
|
||||||
}
|
}
|
||||||
} else if mime_parser.get_header(HeaderDef::ChatGroupName).is_some() {
|
} else if mime_parser.get_header(HeaderDef::ChatGroupName).is_some() {
|
||||||
|
chat_assignment_log = "Reply with Chat-Group-Name.".to_string();
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
} else if can_be_11_chat {
|
} else if can_be_11_chat {
|
||||||
|
chat_assignment_log = format!("Non-group reply. {can_be_11_chat_log}");
|
||||||
ChatAssignment::OneOneChat
|
ChatAssignment::OneOneChat
|
||||||
} else {
|
} else {
|
||||||
|
chat_assignment_log = format!("Non-group reply. {can_be_11_chat_log}");
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
}
|
}
|
||||||
} else if mime_parser.get_header(HeaderDef::ChatGroupName).is_some() {
|
} else if mime_parser.get_header(HeaderDef::ChatGroupName).is_some() {
|
||||||
|
chat_assignment_log = "Message with Chat-Group-Name, no parent.".to_string();
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
} else if can_be_11_chat {
|
} else if can_be_11_chat {
|
||||||
|
chat_assignment_log = format!("Non-group message, no parent. {can_be_11_chat_log}");
|
||||||
ChatAssignment::OneOneChat
|
ChatAssignment::OneOneChat
|
||||||
} else {
|
} else {
|
||||||
|
chat_assignment_log = format!("Non-group message, no parent. {can_be_11_chat_log}");
|
||||||
ChatAssignment::AdHocGroup
|
ChatAssignment::AdHocGroup
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if !chat_assignment_log.is_empty() {
|
||||||
|
info!(
|
||||||
|
context,
|
||||||
|
"{chat_assignment_log} Chat assignment = {chat_assignment:?}."
|
||||||
|
);
|
||||||
|
}
|
||||||
Ok(chat_assignment)
|
Ok(chat_assignment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user