diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 85d4d177f..74734dde2 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -82,7 +82,7 @@ pub unsafe fn dc_receive_imf( let mut chat_id = 0; let mut hidden = 0; - let mut add_delete_job: libc::c_int = 0; + let mut needs_delete_job = false; let mut insert_msg_id = 0; let mut sent_timestamp = 0; @@ -219,7 +219,7 @@ pub unsafe fn dc_receive_imf( &mut chat_id, &mut to_id, flags, - &mut add_delete_job, + &mut needs_delete_job, to_self, &mut insert_msg_id, &mut created_db_entries, @@ -250,7 +250,7 @@ pub unsafe fn dc_receive_imf( from_id, sent_timestamp, &mut rr_event_to_send, - server_folder, + &server_folder, server_uid, ); } @@ -266,7 +266,8 @@ pub unsafe fn dc_receive_imf( ); } - if 0 != add_delete_job && !created_db_entries.is_empty() { + // if we delete we don't need to try moving messages + if needs_delete_job && !created_db_entries.is_empty() { job_add( context, Action::DeleteMsgOnImap, @@ -274,6 +275,8 @@ pub unsafe fn dc_receive_imf( Params::new(), 0, ); + } else { + context.do_heuristics_moves(server_folder.as_ref(), insert_msg_id); } info!( @@ -306,7 +309,7 @@ unsafe fn add_parts( chat_id: &mut u32, to_id: &mut u32, flags: u32, - add_delete_job: &mut libc::c_int, + needs_delete_job: &mut bool, to_self: i32, insert_msg_id: &mut u32, created_db_entries: &mut Vec<(usize, usize)>, @@ -401,7 +404,7 @@ unsafe fn add_parts( let handshake = handle_securejoin_handshake(context, mime_parser, *from_id); if 0 != handshake & DC_HANDSHAKE_STOP_NORMAL_PROCESSING { *hidden = 1; - *add_delete_job = handshake & DC_HANDSHAKE_ADD_DELETE_JOB; + *needs_delete_job = 0 != handshake & DC_HANDSHAKE_ADD_DELETE_JOB; state = MessageState::InSeen; } } @@ -718,7 +721,6 @@ unsafe fn add_parts( } } - context.do_heuristics_moves(server_folder.as_ref(), *insert_msg_id); cleanup(mime_in_reply_to, mime_references); Ok(()) diff --git a/src/imap.rs b/src/imap.rs index f449ad1c1..9c1c4cc59 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -682,7 +682,7 @@ impl Imap { } } } else { - return 0; + unreachable!(); } } @@ -1536,8 +1536,6 @@ fn precheck_imf(context: &Context, rfc724_mid: &str, server_folder: &str, server if let Ok((old_server_folder, old_server_uid, msg_id)) = message::rfc724_mid_exists(context, &rfc724_mid) { - // note: first mark as seen so that the potential heuristic move below - // does not have a chance to invalidate the uid that we know if old_server_folder.is_empty() && old_server_uid == 0 { info!(context, "[move] detected bbc-self {}", rfc724_mid,); job_add( @@ -1551,6 +1549,7 @@ fn precheck_imf(context: &Context, rfc724_mid: &str, server_folder: &str, server info!(context, "[move] detected moved message {}", rfc724_mid,); update_msg_move_state(context, &rfc724_mid, MoveState::Stay); } + if old_server_folder != server_folder || old_server_uid != server_uid { update_server_uid(context, &rfc724_mid, server_folder, server_uid); }