]> granicus.if.org Git - neomutt/commitdiff
Get rid of IMAP-related special casing all over the thread editing
authorThomas Roessler <roessler@does-not-exist.org>
Mon, 25 Jul 2005 15:48:36 +0000 (15:48 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Mon, 25 Jul 2005 15:48:36 +0000 (15:48 +0000)
code.

copy.c
imap/imap.c
mh.c
mutt.h
muttlib.c
thread.c

diff --git a/copy.c b/copy.c
index 60ae50e9e92dfd7c461b404d91af9deae15e56cd..7dd415987cb1b8fa035322b103aeda923567068d 100644 (file)
--- a/copy.c
+++ b/copy.c
@@ -354,8 +354,9 @@ mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix)
 {
   char buffer[SHORT_STRING];
 
-  flags |= (h->irt_changed ? CH_UPDATE_IRT : 0)
-         | (h->refs_changed ? CH_UPDATE_REFS : 0);
+  if (h->env)
+    flags |= (h->env->irt_changed ? CH_UPDATE_IRT : 0)
+      | (h->env->refs_changed ? CH_UPDATE_REFS : 0);
   
   if (mutt_copy_hdr (in, out, h->offset, h->content->offset, flags, prefix) == -1)
     return (-1);
@@ -379,15 +380,10 @@ mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix)
   if (flags & CH_UPDATE)
   {
     if ((flags & CH_NOSTATUS) == 0)
-#ifdef USE_IMAP
-#define NEW_ENV new_env
-#else
-#define NEW_ENV env
-#endif
     {
-      if (h->irt_changed && h->NEW_ENV->in_reply_to)
+      if (h->env->irt_changed && h->env->in_reply_to)
       {
-       LIST *listp = h->NEW_ENV->in_reply_to;
+       LIST *listp = h->env->in_reply_to;
 
        if (fputs ("In-Reply-To: ", out) == EOF)
          return (-1);
@@ -400,9 +396,9 @@ mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix)
          return (-1);
       }
 
-      if (h->refs_changed && h->NEW_ENV->references)
+      if (h->env->refs_changed && h->env->references)
       {
-       LIST *listp = h->NEW_ENV->references, *refs = NULL, *t;
+       LIST *listp = h->env->references, *refs = NULL, *t;
 
        if (fputs ("References: ", out) == EOF)
          return (-1);
@@ -427,7 +423,6 @@ mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix)
        if (fputc ('\n', out) == EOF)
          return (-1);
       }
-#undef NEW_ENV
 
       if (h->old || h->read)
       {
index 7bcd8f0922a4eec39e6d3fdf5aa67a84a06dc15d..6be188681422df8173a7b6cc705b2afc9043d019 100644 (file)
@@ -1068,7 +1068,7 @@ int imap_sync_mailbox (CONTEXT* ctx, int expunge, int* index_hint)
       /* if the message has been rethreaded or attachments have been deleted
        * we delete the message and reupload it.
        * This works better if we're expunging, of course. */
-      if (ctx->hdrs[n]->refs_changed || ctx->hdrs[n]->irt_changed ||
+      if ((ctx->hdrs[n]->env && (ctx->hdrs[n]->env->refs_changed || ctx->hdrs[n]->env->irt_changed)) ||
          ctx->hdrs[n]->attach_del)
       {
        dprint (3, (debugfile, "imap_sync_mailbox: Attachments to be deleted, falling back to _mutt_save_message\n"));
diff --git a/mh.c b/mh.c
index 2c1c6343be5d5177924e15068127b0b7289930a1..745fed335e9e6841513f21b2eae957dcd51bec75 100644 (file)
--- a/mh.c
+++ b/mh.c
@@ -1382,7 +1382,8 @@ static int mh_sync_message (CONTEXT * ctx, int msgno)
 {
   HEADER *h = ctx->hdrs[msgno];
 
-  if (h->attach_del || h->refs_changed || h->irt_changed)
+  if (h->attach_del || 
+      (h->env && (h->env->refs_changed || h->env->irt_changed)))
     if (mh_rewrite_message (ctx, msgno) != 0)
       return -1;
 
@@ -1393,7 +1394,8 @@ static int maildir_sync_message (CONTEXT * ctx, int msgno)
 {
   HEADER *h = ctx->hdrs[msgno];
 
-  if (h->attach_del || h->refs_changed || h->irt_changed)
+  if (h->attach_del || 
+      (h->env && (h->env->refs_changed || h->env->irt_changed)))
   {
     /* when doing attachment deletion/rethreading, fall back to the MH case. */
     if (mh_rewrite_message (ctx, msgno) != 0)
diff --git a/mutt.h b/mutt.h
index 03ec618efa9895ab2cfa66351c2ca245c9a2065a..e8fe0989b4bfcb52897737f3fa5a276122a915b4 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -593,6 +593,9 @@ typedef struct envelope
   LIST *references;            /* message references (in reverse order) */
   LIST *in_reply_to;           /* in-reply-to header content */
   LIST *userhdrs;              /* user defined headers */
+
+  unsigned int irt_changed : 1; /* In-Reply-To changed to link/break threads */
+  unsigned int refs_changed : 1; /* References changed to break thread */
 } ENVELOPE;
 
 typedef struct parameter
@@ -709,8 +712,6 @@ typedef struct header
   unsigned int subject_changed : 1;    /* used for threading */
   unsigned int threaded : 1;           /* used for threading */
   unsigned int display_subject : 1;    /* used for threading */
-  unsigned int irt_changed : 1; /* In-Reply-To changed to link/break threads */
-  unsigned int refs_changed : 1; /* References changed to break thread */
   unsigned int recip_valid : 1;        /* is_recipient is valid */
   unsigned int active : 1;             /* message is not to be removed */
   unsigned int trash : 1;              /* message is marked as trashed on disk.
@@ -751,10 +752,6 @@ typedef struct header
   char *tree;                  /* character string to print thread tree */
   struct thread *thread;
 
-#ifdef USE_IMAP
-  ENVELOPE *new_env;   /* envelope information for rethreading */
-#endif
-
 #ifdef MIXMASTER
   LIST *chain;
 #endif
index 25c224cfa9b85d83632b030c900834296d23d611..3321ba9c57346324b8f7c08d9f8a348f4ced9683 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -693,8 +693,15 @@ void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra)
   MOVE_ELEM(supersedes);
   MOVE_ELEM(date);
   MOVE_ELEM(x_label);
-  MOVE_ELEM(references);
-  MOVE_ELEM(in_reply_to);
+  if (!base->refs_changed)
+  {
+    MOVE_ELEM(references);
+  }
+  if (!base->irt_changed)
+  {
+    MOVE_ELEM(in_reply_to);
+  }
+  
   /* real_subj is subordinate to subject */
   if (!base->subject)
   {
index 37ec515a84d77bf91eb2b7382890f4c37c53440f..814f895eadc8f251727d0f85a2ef40ef2a02e5ea 100644 (file)
--- a/thread.c
+++ b/thread.c
@@ -1377,16 +1377,7 @@ static void clean_references (THREAD *brk, THREAD *cur)
       /* clearing the References: header from obsolete Message-Id(s) */
       mutt_free_list (&ref->next);
 
-#ifdef USE_IMAP
-      if (h->new_env)
-       mutt_free_list (&h->new_env->references);
-      else
-       h->new_env = mutt_new_envelope ();
-
-      h->new_env->references = mutt_copy_list (h->env->references);
-#endif
-
-      h->refs_changed = h->changed = 1;
+      h->env->refs_changed = h->changed = 1;
     }
   }
 }
@@ -1395,17 +1386,7 @@ void mutt_break_thread (HEADER *hdr)
 {
   mutt_free_list (&hdr->env->in_reply_to);
   mutt_free_list (&hdr->env->references);
-  hdr->irt_changed = hdr->refs_changed = hdr->changed = 1;
-
-#ifdef USE_IMAP
-  if (hdr->new_env)
-  {
-    mutt_free_list (&hdr->new_env->in_reply_to);
-    mutt_free_list (&hdr->new_env->references);
-  }
-  else
-    hdr->new_env = mutt_new_envelope ();
-#endif
+  hdr->env->irt_changed = hdr->env->refs_changed = hdr->changed = 1;
 
   clean_references (hdr->thread, hdr->thread->child);
 }
@@ -1419,15 +1400,10 @@ static int link_threads (HEADER *parent, HEADER *child, CONTEXT *ctx)
 
   child->env->in_reply_to = mutt_new_list ();
   child->env->in_reply_to->data = safe_strdup (parent->env->message_id);
-
-#ifdef USE_IMAP
-  child->new_env->in_reply_to = mutt_new_list ();
-  child->new_env->in_reply_to->data = safe_strdup (parent->env->message_id);
-#endif
   
   mutt_set_flag (ctx, child, M_TAG, 0);
   
-  child->irt_changed = child->changed = 1;
+  child->env->irt_changed = child->changed = 1;
   return 1;
 }