diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index ba982fe21..44c0f94d0 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -1492,17 +1492,6 @@ char* dc_get_mime_headers (dc_context_t* context, uint32_t ms */ void dc_delete_msgs (dc_context_t* context, const uint32_t* msg_ids, int msg_cnt); -/* - * Empty IMAP server folder: delete all messages. - * Deprecated, use dc_set_config() with the key "delete_server_after" instead. - * - * @memberof dc_context_t - * @param context The context object. - * @param flags What to delete, a combination of the @ref DC_EMPTY flags - * @return None. - */ -void dc_empty_server (dc_context_t* context, uint32_t flags); - /** * Forward messages to another chat. @@ -4281,10 +4270,6 @@ int64_t dc_lot_get_timestamp (const dc_lot_t* lot); */ -#define DC_EMPTY_MVBOX 0x01 // Deprecated, flag for dc_empty_server(): Clear all mvbox messages -#define DC_EMPTY_INBOX 0x02 // Deprecated, flag for dc_empty_server(): Clear all INBOX messages - - /** * @class dc_event_emitter_t * @@ -4506,14 +4491,6 @@ void dc_event_unref(dc_event_t* event); */ #define DC_EVENT_IMAP_MESSAGE_MOVED 105 -/** - * Emitted when an IMAP folder was emptied. - * - * @param data1 0 - * @param data2 (char*) Folder name. - */ -#define DC_EVENT_IMAP_FOLDER_EMPTIED 106 - /** * Emitted when a new blob file was successfully written * diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index 9d5d2a531..3f6d574ec 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -355,7 +355,6 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc: | EventType::SmtpMessageSent(_) | EventType::ImapMessageDeleted(_) | EventType::ImapMessageMoved(_) - | EventType::ImapFolderEmptied(_) | EventType::NewBlobFile(_) | EventType::DeletedBlobFile(_) | EventType::Warning(_) @@ -398,7 +397,6 @@ pub unsafe extern "C" fn dc_event_get_data2_int(event: *mut dc_event_t) -> libc: | EventType::SmtpMessageSent(_) | EventType::ImapMessageDeleted(_) | EventType::ImapMessageMoved(_) - | EventType::ImapFolderEmptied(_) | EventType::NewBlobFile(_) | EventType::DeletedBlobFile(_) | EventType::Warning(_) @@ -438,7 +436,6 @@ pub unsafe extern "C" fn dc_event_get_data2_str(event: *mut dc_event_t) -> *mut | EventType::SmtpMessageSent(msg) | EventType::ImapMessageDeleted(msg) | EventType::ImapMessageMoved(msg) - | EventType::ImapFolderEmptied(msg) | EventType::NewBlobFile(msg) | EventType::DeletedBlobFile(msg) | EventType::Warning(msg) @@ -1423,17 +1420,6 @@ pub unsafe extern "C" fn dc_delete_msgs( block_on(message::delete_msgs(&ctx, &msg_ids)) } -#[no_mangle] -pub unsafe extern "C" fn dc_empty_server(context: *mut dc_context_t, flags: u32) { - if context.is_null() || flags == 0 { - eprintln!("ignoring careless call to dc_empty_server()"); - return; - } - let ctx = &*context; - - block_on(message::dc_empty_server(&ctx, flags)) -} - #[no_mangle] pub unsafe extern "C" fn dc_forward_msgs( context: *mut dc_context_t, diff --git a/examples/repl/cmdline.rs b/examples/repl/cmdline.rs index 90cf2bf79..3c4457a94 100644 --- a/examples/repl/cmdline.rs +++ b/examples/repl/cmdline.rs @@ -405,7 +405,6 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu event \n\ fileinfo \n\ estimatedeletion \n\ - emptyserver (1=MVBOX 2=INBOX)\n\ clear -- clear screen\n\ exit or quit\n\ =============================================" @@ -1092,11 +1091,6 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu seconds, device_cnt, server_cnt ); } - "emptyserver" => { - ensure!(!arg1.is_empty(), "Argument missing"); - - message::dc_empty_server(&context, arg1.parse()?).await; - } "" => (), _ => bail!("Unknown command: \"{}\" type ? for help.", arg0), } diff --git a/src/events.rs b/src/events.rs index 45ed034b0..a0c5b07ce 100644 --- a/src/events.rs +++ b/src/events.rs @@ -119,10 +119,6 @@ pub enum EventType { #[strum(props(id = "105"))] ImapMessageMoved(String), - /// Emitted when an IMAP folder was emptied - #[strum(props(id = "106"))] - ImapFolderEmptied(String), - /// Emitted when an new file in the $BLOBDIR was created #[strum(props(id = "150"))] NewBlobFile(String), diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 33e5ed34c..92466b76e 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -68,7 +68,6 @@ const DELETE_CHECK_FLAGS: &str = "(UID BODY.PEEK[HEADER.FIELDS (MESSAGE-ID)])"; const RFC724MID_UID: &str = "(UID BODY.PEEK[HEADER.FIELDS (MESSAGE-ID)])"; const JUST_UID: &str = "(UID)"; const BODY_FLAGS: &str = "(FLAGS BODY.PEEK[])"; -const SELECT_ALL: &str = "1:*"; #[derive(Debug)] pub struct Imap { @@ -1338,60 +1337,6 @@ impl Imap { info!(context, "FINISHED configuring IMAP-folders."); Ok(()) } - - pub async fn empty_folder(&mut self, context: &Context, folder: &str) { - info!(context, "emptying folder {}", folder); - - // we want to report all error to the user - // (no retry should be attempted) - if folder.is_empty() { - error!(context, "cannot perform empty, folder not set"); - return; - } - if let Err(_err) = self.setup_handle(context).await { - // The error is reported as a network error by setup_handle() - return; - } - if let Err(err) = self.select_folder(context, Some(&folder)).await { - error!( - context, - "Could not select {} for expunging: {:?}", folder, err - ); - return; - } - - if !self - .add_flag_finalized_with_set(context, SELECT_ALL, "\\Deleted") - .await - { - error!(context, "Cannot mark messages for deletion {}", folder); - return; - } - - // we now trigger expunge to actually delete messages - self.config.selected_folder_needs_expunge = true; - match self.select_folder::(context, None).await { - Ok(()) => { - emit_event!(context, EventType::ImapFolderEmptied(folder.to_string())); - } - Err(err) => { - error!(context, "expunge failed {}: {:?}", folder, err); - } - } - if let Err(err) = context - .sql - .execute( - "UPDATE msgs SET server_folder='',server_uid=0 WHERE server_folder=?", - paramsv![folder], - ) - .await - { - warn!( - context, - "Failed to reset server_uid and server_folder for deleted messages: {}", err - ); - } - } } /// Try to get the folder meaning by the name of the folder only used if the server does not support XLIST. diff --git a/src/job.rs b/src/job.rs index b4421b768..0baac97b8 100644 --- a/src/job.rs +++ b/src/job.rs @@ -17,7 +17,6 @@ use async_smtp::smtp::response::Detail; use crate::blob::BlobObject; use crate::chat::{self, ChatId}; use crate::config::Config; -use crate::constants::*; use crate::contact::Contact; use crate::context::Context; use crate::dc_tools::*; @@ -93,7 +92,6 @@ pub enum Action { // Jobs in the INBOX-thread, range from DC_IMAP_THREAD..DC_IMAP_THREAD+999 Housekeeping = 105, // low priority ... - EmptyServer = 107, MarkseenMsgOnImap = 130, // Moving message is prioritized lower than deletion so we don't @@ -128,7 +126,6 @@ impl From for Thread { Housekeeping => Thread::Imap, DeleteMsgOnImap => Thread::Imap, ResyncFolders => Thread::Imap, - EmptyServer => Thread::Imap, MarkseenMsgOnImap => Thread::Imap, MoveMsg => Thread::Imap, @@ -660,25 +657,6 @@ impl Job { Status::Finished(Ok(())) } - async fn empty_server(&mut self, context: &Context, imap: &mut Imap) -> Status { - if let Err(err) = imap.connect_configured(context).await { - warn!(context, "could not connect: {:?}", err); - return Status::RetryLater; - } - - if self.foreign_id & DC_EMPTY_MVBOX > 0 { - if let Some(mvbox_folder) = &context.get_config(Config::ConfiguredMvboxFolder).await { - imap.empty_folder(context, &mvbox_folder).await; - } - } - if self.foreign_id & DC_EMPTY_INBOX > 0 { - if let Some(inbox_folder) = &context.get_config(Config::ConfiguredInboxFolder).await { - imap.empty_folder(context, &inbox_folder).await; - } - } - Status::Finished(Ok(())) - } - async fn markseen_msg_on_imap(&mut self, context: &Context, imap: &mut Imap) -> Status { if let Err(err) = imap.connect_configured(context).await { warn!(context, "could not connect: {:?}", err); @@ -1025,7 +1003,6 @@ async fn perform_job_action( Action::MaybeSendLocationsEnded => { location::job_maybe_send_locations_ended(context, job).await } - Action::EmptyServer => job.empty_server(context, connection.inbox()).await, Action::DeleteMsgOnImap => job.delete_msg_on_imap(context, connection.inbox()).await, Action::ResyncFolders => job.resync_folders(context, connection.inbox()).await, Action::MarkseenMsgOnImap => job.markseen_msg_on_imap(context, connection.inbox()).await, @@ -1092,7 +1069,6 @@ pub async fn add(context: &Context, job: Job) { match action { Action::Unknown => unreachable!(), Action::Housekeeping - | Action::EmptyServer | Action::DeleteMsgOnImap | Action::ResyncFolders | Action::MarkseenMsgOnImap diff --git a/src/message.rs b/src/message.rs index 8e0232cfb..1440cc61d 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1797,15 +1797,6 @@ pub async fn update_server_uid( } } -pub async fn dc_empty_server(context: &Context, flags: u32) { - job::kill_action(context, Action::EmptyServer).await; - job::add( - context, - job::Job::new(Action::EmptyServer, flags, Params::new(), 0), - ) - .await; -} - #[cfg(test)] mod tests { use super::*;