mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
remove unused dc_empty_server() and related code
'Delete emails from server' was an experimental ad-hoc function that was added before 'Automatically delete old messages' was introduced to allow at least some way to cleanup. 'Delete emails from server'-UI was already removed from android/ios in june (see https://github.com/deltachat/deltachat-android/pull/1406) and the function never exists on desktop at all.
This commit is contained in:
@@ -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);
|
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.
|
* 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
|
* @class dc_event_emitter_t
|
||||||
*
|
*
|
||||||
@@ -4506,14 +4491,6 @@ void dc_event_unref(dc_event_t* event);
|
|||||||
*/
|
*/
|
||||||
#define DC_EVENT_IMAP_MESSAGE_MOVED 105
|
#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
|
* Emitted when a new blob file was successfully written
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -355,7 +355,6 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc:
|
|||||||
| EventType::SmtpMessageSent(_)
|
| EventType::SmtpMessageSent(_)
|
||||||
| EventType::ImapMessageDeleted(_)
|
| EventType::ImapMessageDeleted(_)
|
||||||
| EventType::ImapMessageMoved(_)
|
| EventType::ImapMessageMoved(_)
|
||||||
| EventType::ImapFolderEmptied(_)
|
|
||||||
| EventType::NewBlobFile(_)
|
| EventType::NewBlobFile(_)
|
||||||
| EventType::DeletedBlobFile(_)
|
| EventType::DeletedBlobFile(_)
|
||||||
| EventType::Warning(_)
|
| 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::SmtpMessageSent(_)
|
||||||
| EventType::ImapMessageDeleted(_)
|
| EventType::ImapMessageDeleted(_)
|
||||||
| EventType::ImapMessageMoved(_)
|
| EventType::ImapMessageMoved(_)
|
||||||
| EventType::ImapFolderEmptied(_)
|
|
||||||
| EventType::NewBlobFile(_)
|
| EventType::NewBlobFile(_)
|
||||||
| EventType::DeletedBlobFile(_)
|
| EventType::DeletedBlobFile(_)
|
||||||
| EventType::Warning(_)
|
| 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::SmtpMessageSent(msg)
|
||||||
| EventType::ImapMessageDeleted(msg)
|
| EventType::ImapMessageDeleted(msg)
|
||||||
| EventType::ImapMessageMoved(msg)
|
| EventType::ImapMessageMoved(msg)
|
||||||
| EventType::ImapFolderEmptied(msg)
|
|
||||||
| EventType::NewBlobFile(msg)
|
| EventType::NewBlobFile(msg)
|
||||||
| EventType::DeletedBlobFile(msg)
|
| EventType::DeletedBlobFile(msg)
|
||||||
| EventType::Warning(msg)
|
| EventType::Warning(msg)
|
||||||
@@ -1423,17 +1420,6 @@ pub unsafe extern "C" fn dc_delete_msgs(
|
|||||||
block_on(message::delete_msgs(&ctx, &msg_ids))
|
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]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn dc_forward_msgs(
|
pub unsafe extern "C" fn dc_forward_msgs(
|
||||||
context: *mut dc_context_t,
|
context: *mut dc_context_t,
|
||||||
|
|||||||
@@ -405,7 +405,6 @@ pub async fn cmdline(context: Context, line: &str, chat_id: &mut ChatId) -> Resu
|
|||||||
event <event-id to test>\n\
|
event <event-id to test>\n\
|
||||||
fileinfo <file>\n\
|
fileinfo <file>\n\
|
||||||
estimatedeletion <seconds>\n\
|
estimatedeletion <seconds>\n\
|
||||||
emptyserver <flags> (1=MVBOX 2=INBOX)\n\
|
|
||||||
clear -- clear screen\n\
|
clear -- clear screen\n\
|
||||||
exit or quit\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
|
seconds, device_cnt, server_cnt
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
"emptyserver" => {
|
|
||||||
ensure!(!arg1.is_empty(), "Argument <flags> missing");
|
|
||||||
|
|
||||||
message::dc_empty_server(&context, arg1.parse()?).await;
|
|
||||||
}
|
|
||||||
"" => (),
|
"" => (),
|
||||||
_ => bail!("Unknown command: \"{}\" type ? for help.", arg0),
|
_ => bail!("Unknown command: \"{}\" type ? for help.", arg0),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,10 +119,6 @@ pub enum EventType {
|
|||||||
#[strum(props(id = "105"))]
|
#[strum(props(id = "105"))]
|
||||||
ImapMessageMoved(String),
|
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
|
/// Emitted when an new file in the $BLOBDIR was created
|
||||||
#[strum(props(id = "150"))]
|
#[strum(props(id = "150"))]
|
||||||
NewBlobFile(String),
|
NewBlobFile(String),
|
||||||
|
|||||||
@@ -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 RFC724MID_UID: &str = "(UID BODY.PEEK[HEADER.FIELDS (MESSAGE-ID)])";
|
||||||
const JUST_UID: &str = "(UID)";
|
const JUST_UID: &str = "(UID)";
|
||||||
const BODY_FLAGS: &str = "(FLAGS BODY.PEEK[])";
|
const BODY_FLAGS: &str = "(FLAGS BODY.PEEK[])";
|
||||||
const SELECT_ALL: &str = "1:*";
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Imap {
|
pub struct Imap {
|
||||||
@@ -1338,60 +1337,6 @@ impl Imap {
|
|||||||
info!(context, "FINISHED configuring IMAP-folders.");
|
info!(context, "FINISHED configuring IMAP-folders.");
|
||||||
Ok(())
|
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::<String>(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.
|
/// Try to get the folder meaning by the name of the folder only used if the server does not support XLIST.
|
||||||
|
|||||||
24
src/job.rs
24
src/job.rs
@@ -17,7 +17,6 @@ use async_smtp::smtp::response::Detail;
|
|||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::chat::{self, ChatId};
|
use crate::chat::{self, ChatId};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::*;
|
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::*;
|
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
|
// Jobs in the INBOX-thread, range from DC_IMAP_THREAD..DC_IMAP_THREAD+999
|
||||||
Housekeeping = 105, // low priority ...
|
Housekeeping = 105, // low priority ...
|
||||||
EmptyServer = 107,
|
|
||||||
MarkseenMsgOnImap = 130,
|
MarkseenMsgOnImap = 130,
|
||||||
|
|
||||||
// Moving message is prioritized lower than deletion so we don't
|
// Moving message is prioritized lower than deletion so we don't
|
||||||
@@ -128,7 +126,6 @@ impl From<Action> for Thread {
|
|||||||
Housekeeping => Thread::Imap,
|
Housekeeping => Thread::Imap,
|
||||||
DeleteMsgOnImap => Thread::Imap,
|
DeleteMsgOnImap => Thread::Imap,
|
||||||
ResyncFolders => Thread::Imap,
|
ResyncFolders => Thread::Imap,
|
||||||
EmptyServer => Thread::Imap,
|
|
||||||
MarkseenMsgOnImap => Thread::Imap,
|
MarkseenMsgOnImap => Thread::Imap,
|
||||||
MoveMsg => Thread::Imap,
|
MoveMsg => Thread::Imap,
|
||||||
|
|
||||||
@@ -660,25 +657,6 @@ impl Job {
|
|||||||
Status::Finished(Ok(()))
|
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 {
|
async fn markseen_msg_on_imap(&mut self, context: &Context, imap: &mut Imap) -> Status {
|
||||||
if let Err(err) = imap.connect_configured(context).await {
|
if let Err(err) = imap.connect_configured(context).await {
|
||||||
warn!(context, "could not connect: {:?}", err);
|
warn!(context, "could not connect: {:?}", err);
|
||||||
@@ -1025,7 +1003,6 @@ async fn perform_job_action(
|
|||||||
Action::MaybeSendLocationsEnded => {
|
Action::MaybeSendLocationsEnded => {
|
||||||
location::job_maybe_send_locations_ended(context, job).await
|
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::DeleteMsgOnImap => job.delete_msg_on_imap(context, connection.inbox()).await,
|
||||||
Action::ResyncFolders => job.resync_folders(context, connection.inbox()).await,
|
Action::ResyncFolders => job.resync_folders(context, connection.inbox()).await,
|
||||||
Action::MarkseenMsgOnImap => job.markseen_msg_on_imap(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 {
|
match action {
|
||||||
Action::Unknown => unreachable!(),
|
Action::Unknown => unreachable!(),
|
||||||
Action::Housekeeping
|
Action::Housekeeping
|
||||||
| Action::EmptyServer
|
|
||||||
| Action::DeleteMsgOnImap
|
| Action::DeleteMsgOnImap
|
||||||
| Action::ResyncFolders
|
| Action::ResyncFolders
|
||||||
| Action::MarkseenMsgOnImap
|
| Action::MarkseenMsgOnImap
|
||||||
|
|||||||
@@ -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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user