mirror of
https://github.com/chatmail/core.git
synced 2026-05-06 06:46:35 +03:00
fix(imap): ignore uid 0 when setting flags (#109)
fix(imap): ignore uid 0 when setting flags
This commit is contained in:
20
src/imap.rs
20
src/imap.rs
@@ -1245,7 +1245,7 @@ impl Imap {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if copied {
|
if copied {
|
||||||
if self.add_flag(uid, "\\Deleted") == 0 {
|
if self.add_flag(context, uid, "\\Deleted") == 0 {
|
||||||
warn!(context, 0, "Cannot mark message as \"Deleted\".",);
|
warn!(context, 0, "Cannot mark message as \"Deleted\".",);
|
||||||
}
|
}
|
||||||
self.config.write().unwrap().selected_folder_needs_expunge = true;
|
self.config.write().unwrap().selected_folder_needs_expunge = true;
|
||||||
@@ -1271,18 +1271,26 @@ impl Imap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_flag<S: AsRef<str>>(&self, server_uid: u32, flag: S) -> usize {
|
fn add_flag<S: AsRef<str>>(&self, context: &Context, server_uid: u32, flag: S) -> usize {
|
||||||
|
if server_uid == 0 {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if let Some(ref mut session) = self.session.lock().unwrap().0 {
|
if let Some(ref mut session) = self.session.lock().unwrap().0 {
|
||||||
let set = format!("{}", server_uid);
|
let set = format!("{}", server_uid);
|
||||||
let query = format!("+FLAGS ({})", flag.as_ref());
|
let query = format!("+FLAGS ({})", flag.as_ref());
|
||||||
match session.uid_store(&set, &query) {
|
match session.uid_store(&set, &query) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
eprintln!("imap store error: ({}, {}) {:?}", set, query, err);
|
warn!(
|
||||||
|
context,
|
||||||
|
0, "IMAP failed to store: ({}, {}) {:?}", set, query, err
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// All non-connection states are treated as success - the mail may
|
||||||
|
// already be deleted or moved away on the server.
|
||||||
if self.should_reconnect() {
|
if self.should_reconnect() {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
@@ -1311,7 +1319,7 @@ impl Imap {
|
|||||||
"Cannot select folder {} for setting SEEN flag.",
|
"Cannot select folder {} for setting SEEN flag.",
|
||||||
folder.as_ref(),
|
folder.as_ref(),
|
||||||
);
|
);
|
||||||
} else if self.add_flag(uid, "\\Seen") == 0 {
|
} else if self.add_flag(context, uid, "\\Seen") == 0 {
|
||||||
warn!(context, 0, "Cannot mark message as seen.",);
|
warn!(context, 0, "Cannot mark message as seen.",);
|
||||||
} else {
|
} else {
|
||||||
res = DC_SUCCESS
|
res = DC_SUCCESS
|
||||||
@@ -1408,7 +1416,7 @@ impl Imap {
|
|||||||
|
|
||||||
res = if flag_set {
|
res = if flag_set {
|
||||||
DC_ALREADY_DONE
|
DC_ALREADY_DONE
|
||||||
} else if self.add_flag(uid, "$MDNSent") != 0 {
|
} else if self.add_flag(context, uid, "$MDNSent") != 0 {
|
||||||
DC_SUCCESS
|
DC_SUCCESS
|
||||||
} else {
|
} else {
|
||||||
res
|
res
|
||||||
@@ -1511,7 +1519,7 @@ impl Imap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mark the message for deletion
|
// mark the message for deletion
|
||||||
if self.add_flag(*server_uid, "\\Deleted") == 0 {
|
if self.add_flag(context, *server_uid, "\\Deleted") == 0 {
|
||||||
warn!(context, 0, "Cannot mark message as \"Deleted\".");
|
warn!(context, 0, "Cannot mark message as \"Deleted\".");
|
||||||
} else {
|
} else {
|
||||||
self.config.write().unwrap().selected_folder_needs_expunge = true;
|
self.config.write().unwrap().selected_folder_needs_expunge = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user