mirror of
https://github.com/chatmail/core.git
synced 2026-05-17 05:46:30 +03:00
Remove MarkseenMdnOnImap
MarkseenMdnOnImap stored server folder and UID which are never updated by update_server_uid. Now hidden entries are created for MDNs, so they should be handled as ordinary messages.
This commit is contained in:
@@ -219,7 +219,7 @@ pub fn dc_receive_imf(
|
|||||||
|
|
||||||
cleanup(context, &create_event_to_send, created_db_entries);
|
cleanup(context, &create_event_to_send, created_db_entries);
|
||||||
|
|
||||||
mime_parser.handle_reports(context, from_id, sent_timestamp, &server_folder, server_uid);
|
mime_parser.handle_reports(context, from_id, sent_timestamp);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
43
src/job.rs
43
src/job.rs
@@ -81,7 +81,6 @@ pub enum Action {
|
|||||||
Housekeeping = 105, // low priority ...
|
Housekeeping = 105, // low priority ...
|
||||||
EmptyServer = 107,
|
EmptyServer = 107,
|
||||||
DeleteMsgOnImap = 110,
|
DeleteMsgOnImap = 110,
|
||||||
MarkseenMdnOnImap = 120,
|
|
||||||
MarkseenMsgOnImap = 130,
|
MarkseenMsgOnImap = 130,
|
||||||
MoveMsg = 200,
|
MoveMsg = 200,
|
||||||
ConfigureImap = 900,
|
ConfigureImap = 900,
|
||||||
@@ -110,7 +109,6 @@ impl From<Action> for Thread {
|
|||||||
Housekeeping => Thread::Imap,
|
Housekeeping => Thread::Imap,
|
||||||
DeleteMsgOnImap => Thread::Imap,
|
DeleteMsgOnImap => Thread::Imap,
|
||||||
EmptyServer => Thread::Imap,
|
EmptyServer => Thread::Imap,
|
||||||
MarkseenMdnOnImap => Thread::Imap,
|
|
||||||
MarkseenMsgOnImap => Thread::Imap,
|
MarkseenMsgOnImap => Thread::Imap,
|
||||||
MoveMsg => Thread::Imap,
|
MoveMsg => Thread::Imap,
|
||||||
ConfigureImap => Thread::Imap,
|
ConfigureImap => Thread::Imap,
|
||||||
@@ -555,46 +553,6 @@ impl Job {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
|
||||||
fn MarkseenMdnOnImap(&mut self, context: &Context) -> Status {
|
|
||||||
let folder = self
|
|
||||||
.param
|
|
||||||
.get(Param::ServerFolder)
|
|
||||||
.unwrap_or_default()
|
|
||||||
.to_string();
|
|
||||||
let uid = self.param.get_int(Param::ServerUid).unwrap_or_default() as u32;
|
|
||||||
let imap_inbox = &context.inbox_thread.read().unwrap().imap;
|
|
||||||
if imap_inbox.set_seen(context, &folder, uid) == ImapActionResult::RetryLater {
|
|
||||||
return Status::RetryLater;
|
|
||||||
}
|
|
||||||
if self.param.get_bool(Param::AlsoMove).unwrap_or_default() {
|
|
||||||
if let Err(err) = imap_inbox.ensure_configured_folders(context, true) {
|
|
||||||
warn!(context, "configuring folders failed: {:?}", err);
|
|
||||||
return Status::RetryLater;
|
|
||||||
}
|
|
||||||
let dest_folder = context
|
|
||||||
.sql
|
|
||||||
.get_raw_config(context, "configured_mvbox_folder");
|
|
||||||
if let Some(dest_folder) = dest_folder {
|
|
||||||
if ImapActionResult::RetryLater
|
|
||||||
== imap_inbox.mv(context, &folder, uid, &dest_folder)
|
|
||||||
{
|
|
||||||
Status::RetryLater
|
|
||||||
} else {
|
|
||||||
// FIXME: server UID should be updated for all
|
|
||||||
// hidden MDN entries, but it does not happen
|
|
||||||
// because we don't know Message-ID here and can't
|
|
||||||
// find corresponding MsgId.
|
|
||||||
Status::Finished(Ok(()))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Status::Finished(Err(format_err!("MVBOX is not configured")))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Status::Finished(Ok(()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* delete all pending jobs with the given action */
|
/* delete all pending jobs with the given action */
|
||||||
@@ -1135,7 +1093,6 @@ fn perform_job_action(context: &Context, mut job: &mut Job, thread: Thread, trie
|
|||||||
Action::EmptyServer => job.EmptyServer(context),
|
Action::EmptyServer => job.EmptyServer(context),
|
||||||
Action::DeleteMsgOnImap => job.DeleteMsgOnImap(context),
|
Action::DeleteMsgOnImap => job.DeleteMsgOnImap(context),
|
||||||
Action::MarkseenMsgOnImap => job.MarkseenMsgOnImap(context),
|
Action::MarkseenMsgOnImap => job.MarkseenMsgOnImap(context),
|
||||||
Action::MarkseenMdnOnImap => job.MarkseenMdnOnImap(context),
|
|
||||||
Action::MoveMsg => job.MoveMsg(context),
|
Action::MoveMsg => job.MoveMsg(context),
|
||||||
Action::SendMdn => job.SendMdn(context),
|
Action::SendMdn => job.SendMdn(context),
|
||||||
Action::ConfigureImap => JobConfigureImap(context),
|
Action::ConfigureImap => JobConfigureImap(context),
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ use mailparse::{DispositionType, MailAddr, MailHeaderMap};
|
|||||||
use crate::aheader::Aheader;
|
use crate::aheader::Aheader;
|
||||||
use crate::bail;
|
use crate::bail;
|
||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::config::Config;
|
|
||||||
use crate::constants::Viewtype;
|
use crate::constants::Viewtype;
|
||||||
use crate::contact::*;
|
use crate::contact::*;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
@@ -17,7 +16,6 @@ use crate::e2ee;
|
|||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use crate::events::Event;
|
use crate::events::Event;
|
||||||
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
||||||
use crate::job::{job_add, Action};
|
|
||||||
use crate::location;
|
use crate::location;
|
||||||
use crate::message;
|
use crate::message;
|
||||||
use crate::param::*;
|
use crate::param::*;
|
||||||
@@ -805,19 +803,11 @@ impl MimeMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Handle reports (only MDNs for now)
|
/// Handle reports (only MDNs for now)
|
||||||
pub fn handle_reports(
|
pub fn handle_reports(&self, context: &Context, from_id: u32, sent_timestamp: i64) {
|
||||||
&self,
|
|
||||||
context: &Context,
|
|
||||||
from_id: u32,
|
|
||||||
sent_timestamp: i64,
|
|
||||||
server_folder: impl AsRef<str>,
|
|
||||||
server_uid: u32,
|
|
||||||
) {
|
|
||||||
if self.reports.is_empty() {
|
if self.reports.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut mdn_recognized = false;
|
|
||||||
for report in &self.reports {
|
for report in &self.reports {
|
||||||
for original_message_id in
|
for original_message_id in
|
||||||
std::iter::once(&report.original_message_id).chain(&report.additional_message_ids)
|
std::iter::once(&report.original_message_id).chain(&report.additional_message_ids)
|
||||||
@@ -826,20 +816,9 @@ impl MimeMessage {
|
|||||||
message::mdn_from_ext(context, from_id, original_message_id, sent_timestamp)
|
message::mdn_from_ext(context, from_id, original_message_id, sent_timestamp)
|
||||||
{
|
{
|
||||||
context.call_cb(Event::MsgRead { chat_id, msg_id });
|
context.call_cb(Event::MsgRead { chat_id, msg_id });
|
||||||
mdn_recognized = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.has_chat_version() || mdn_recognized {
|
|
||||||
let mut param = Params::new();
|
|
||||||
param.set(Param::ServerFolder, server_folder.as_ref());
|
|
||||||
param.set_int(Param::ServerUid, server_uid as i32);
|
|
||||||
if self.has_chat_version() && context.get_config_bool(Config::MvboxMove) {
|
|
||||||
param.set_int(Param::AlsoMove, 1);
|
|
||||||
}
|
|
||||||
job_add(context, Action::MarkseenMdnOnImap, 0, param, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user