]> git.pld-linux.org Git - packages/mutt.git/commitdiff
- rel 3 auto/th/mutt-1_5_21-3
authorJan Rękorajski <baggins@pld-linux.org>
Wed, 9 Mar 2011 20:18:25 +0000 (20:18 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- use IMAP 'UID COPY' instead of fetch+upload to move messages to trash

Changed files:
    mutt-imap_fast_trash.patch -> 1.1
    mutt.spec -> 1.236

mutt-imap_fast_trash.patch [new file with mode: 0644]
mutt.spec

diff --git a/mutt-imap_fast_trash.patch b/mutt-imap_fast_trash.patch
new file mode 100644 (file)
index 0000000..b335bd9
--- /dev/null
@@ -0,0 +1,100 @@
+http://marc.info/?l=mutt-dev&m=128045511126422
+
+Make "move to trash folder" use IMAP COPY.
+
+by Paul Miller (jettero)
+
+--- a/imap/imap.c
++++ b/imap/imap.c
+@@ -893,6 +893,12 @@ static int imap_make_msg_set (IMAP_DATA*
+           if (hdrs[n]->deleted != HEADER_DATA(hdrs[n])->deleted)
+             match = invert ^ hdrs[n]->deleted;
+         break;
++        case M_EXPIRED: /* imap_fast_trash version of M_DELETED */
++        if (hdrs[n]->purged)
++          break;
++          if (hdrs[n]->deleted != HEADER_DATA(hdrs[n])->deleted)
++            match = invert ^ hdrs[n]->deleted;
++        break;
+         case M_FLAG:
+           if (hdrs[n]->flagged != HEADER_DATA(hdrs[n])->flagged)
+             match = invert ^ hdrs[n]->flagged;
+@@ -2028,3 +2034,54 @@ int imap_complete(char* dest, size_t dle
+   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_EXPIRED, 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;
++}
+--- 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
+--- a/mx.c
++++ b/mx.c
+@@ -802,6 +802,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++)
index 712dec56c45e7672d6b2a52d7ae2d5be9cf76fe5..7c01acd9663e7c6d66425badbe63fbd4de365497 100644 (file)
--- a/mutt.spec
+++ b/mutt.spec
@@ -22,7 +22,7 @@ Summary(tr.UTF-8):    Mutt elektronik posta programı
 Summary(uk.UTF-8):     Поштова клієнтська програма Mutt
 Name:          mutt
 Version:       1.5.21
-Release:       2
+Release:       3
 Epoch:         6
 License:       GPL v2+
 Group:         Applications/Mail
@@ -59,6 +59,7 @@ Patch20:      %{name}-Muttrc.head.patch
 Patch21:       %{name}-smime.rc.patch
 Patch22:       %{name}-ac.patch
 Patch23:       %{name}-sidebar.patch
+Patch24:       %{name}-imap_fast_trash.patch
 URL:           http://www.mutt.org/
 BuildRequires: autoconf
 BuildRequires: automake
@@ -166,6 +167,7 @@ Mutt - це невеликий, але потужний повноекранни
 %patch21 -p1
 %patch22 -p1
 %patch23 -p1
+%patch24 -p1
 
 # force regeneration (manual.sgml is modified by some patches)
 rm -f doc/{manual*.html,manual.txt}
This page took 0.072579 seconds and 4 git commands to generate.