fix(imap): ignore uid 0 when setting flags (#109)

fix(imap): ignore uid 0 when setting flags
This commit is contained in:
Friedel Ziegelmayer
2019-05-30 23:21:23 +02:00
committed by GitHub

View File

@@ -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;