-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
debian/patches: features/imap_fast_trash.
- Loading branch information
Showing
3 changed files
with
100 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
http://marc.info/?l=mutt-dev&m=128045511126422 | ||
|
||
Make "move to trash folder" use IMAP COPY. | ||
|
||
by Paul Miller (jettero) | ||
|
||
diff --git a/imap/imap.c b/imap/imap.c | ||
index f08b4ea..47a8035 100644 | ||
--- a/imap/imap.c | ||
+++ b/imap/imap.c | ||
@@ -2028,3 +2028,54 @@ int imap_complete(char* dest, size_t dlen, char* path) { | ||
|
||
return -1; | ||
} | ||
+ | ||
+int imap_fast_trash() { | ||
+ | ||
+ if( Context->magic == M_IMAP && mx_is_imap(TrashPath) ) { | ||
+ IMAP_MBOX mx; | ||
+ IMAP_DATA *idata = (IMAP_DATA *) Context->data; | ||
+ char mbox[LONG_STRING]; | ||
+ char mmbox[LONG_STRING]; | ||
+ int rc; | ||
+ dprint(1, (debugfile, "[itf] trashcan seems to be on imap.\n")); | ||
+ | ||
+ if ( imap_parse_path(TrashPath, &mx) == 0 ) { | ||
+ if( mutt_account_match(&(idata->conn->account), &(mx.account)) ) { | ||
+ dprint(1, (debugfile, "[itf] trashcan seems to be on the same account.\n")); | ||
+ | ||
+ imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox)); | ||
+ if (!*mbox) | ||
+ strfcpy (mbox, "INBOX", sizeof (mbox)); | ||
+ imap_munge_mbox_name (mmbox, sizeof (mmbox), mbox); | ||
+ | ||
+ rc = imap_exec_msgset (idata, "UID COPY", mmbox, M_DELETED, 0, 0); | ||
+ if (!rc) { | ||
+ dprint (1, (debugfile, "imap_copy_messages: No messages del-tagged\n")); | ||
+ rc = -1; | ||
+ goto old_way; | ||
+ | ||
+ } else if (rc < 0) { | ||
+ dprint (1, (debugfile, "could not queue copy\n")); | ||
+ goto old_way; | ||
+ | ||
+ } else { | ||
+ mutt_message (_("Copying %d messages to %s..."), rc, mbox); | ||
+ return 0; | ||
+ } | ||
+ | ||
+ } else { | ||
+ dprint(1, (debugfile, "[itf] trashcan seems to be on a different account.\n")); | ||
+ } | ||
+ | ||
+ old_way: | ||
+ FREE (&mx.mbox); /* we probably only need to free this when the parse works */ | ||
+ | ||
+ } else { | ||
+ dprint(1, (debugfile, "[itf] failed to parse TrashPath.\n" )); | ||
+ } | ||
+ | ||
+ dprint(1, (debugfile, "[itf] giving up and trying old fasioned way.\n" )); | ||
+ } | ||
+ | ||
+ return 1; | ||
+} | ||
diff --git a/imap/imap.h b/imap/imap.h | ||
index 74d7e13..99cd454 100644 | ||
--- a/imap/imap.h | ||
+++ b/imap/imap.h | ||
@@ -72,4 +72,7 @@ void imap_keepalive (void); | ||
|
||
int imap_account_match (const ACCOUNT* a1, const ACCOUNT* a2); | ||
|
||
+/* trash */ | ||
+int imap_fast_trash(); | ||
+ | ||
#endif | ||
diff --git a/mx.c b/mx.c | ||
index 78aafcc..38c4e7f 100644 | ||
--- a/mx.c | ||
+++ b/mx.c | ||
@@ -828,6 +828,11 @@ static int trash_append (CONTEXT *ctx) | ||
&& stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev) | ||
return 0; /* we are in the trash folder: simple sync */ | ||
|
||
+ #ifdef USE_IMAP | ||
+ if( !imap_fast_trash() ) | ||
+ return 0; | ||
+ #endif | ||
+ | ||
if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL) | ||
{ | ||
for (i = 0 ; i < ctx->msgcount ; i++) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters