}
if (committing)
+ {
m->emails[j]->changed = false;
+ m->emails[j]->env->changed = false;
+ }
else if (m->emails[j]->changed)
m->changed = true;
if (e->env)
{
- flags |= (e->env->irt_changed ? CH_UPDATE_IRT : 0) |
- (e->env->refs_changed ? CH_UPDATE_REFS : 0);
+ flags |= ((e->env->changed & MUTT_ENV_CHANGED_IRT) ? CH_UPDATE_IRT : 0) |
+ ((e->env->changed & MUTT_ENV_CHANGED_REFS) ? CH_UPDATE_REFS : 0);
}
if (mutt_copy_hdr(in, out, e->offset, e->content->offset, flags, prefix) == -1)
MOVE_ELEM(date);
MOVE_ELEM(x_label);
MOVE_ELEM(x_original_to);
- if (!base->refs_changed)
+ if (!(base->changed & MUTT_ENV_CHANGED_REFS))
{
MOVE_STAILQ(references);
}
- if (!base->irt_changed)
+ if (!(base->changed & MUTT_ENV_CHANGED_IRT))
{
MOVE_STAILQ(in_reply_to);
}
#include <stdbool.h>
#include "mutt/mutt.h"
+#define MUTT_ENV_CHANGED_IRT (1<<0) /* In-Reply-To changed to link/break threads */
+#define MUTT_ENV_CHANGED_REFS (1<<1) /* References changed to break thread */
+
/**
* struct Envelope - The header of an email
*/
struct ListHead in_reply_to; /**< in-reply-to header content */
struct ListHead userhdrs; /**< user defined headers */
- bool irt_changed : 1; /**< In-Reply-To changed to link/break threads */
- bool refs_changed : 1; /**< References changed to break thread */
+ unsigned char changed; /* The MUTT_ENV_CHANGED_* flags specify which
+ * fields are modified */
};
bool mutt_env_cmp_strict(const struct Envelope *e1, const struct Envelope *e2);
FREE(&np);
}
- e->env->refs_changed = true;
e->changed = true;
+ e->env->changed |= MUTT_ENV_CHANGED_REFS;
}
}
}
{
mutt_list_free(&e->env->in_reply_to);
mutt_list_free(&e->env->references);
- e->env->irt_changed = true;
- e->env->refs_changed = true;
e->changed = true;
+ e->env->changed |= (MUTT_ENV_CHANGED_IRT | MUTT_ENV_CHANGED_REFS);
clean_references(e->thread, e->thread->child);
}
/* 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 ((e->env && (e->env->refs_changed || e->env->irt_changed)) ||
- e->attach_del || e->xlabel_changed)
+ if ((e->env && e->env->changed) || e->attach_del || e->xlabel_changed)
{
/* L10N: The plural is choosen by the last %d, i.e. the total number */
mutt_message(ngettext("Saving changed message... [%d/%d]",
"Saving changed messages... [%d/%d]", m->msg_count),
i + 1, m->msg_count);
mutt_save_message_ctx(e, true, false, false, m);
+ /* TODO: why the check for h->env? Is this possible? */
+ if (e->env)
+ e->env->changed = 0;
e->xlabel_changed = false;
}
}
char suffix[16];
int rc = 0;
- if (e->attach_del || e->xlabel_changed ||
- (e->env && (e->env->refs_changed || e->env->irt_changed)))
+ /* TODO: why the h->env check? */
+ if (e->attach_del || e->xlabel_changed || (e->env && e->env->changed))
{
/* when doing attachment deletion/rethreading, fall back to the MH case. */
if (mh_rewrite_message(m, msgno) != 0)
return -1;
+ /* TODO: why the env check? */
+ if (e->env)
+ e->env->changed = 0;
}
else
{
struct Email *e = m->emails[msgno];
- if (e->attach_del || e->xlabel_changed ||
- (e->env && (e->env->refs_changed || e->env->irt_changed)))
+ /* TODO: why the e->env check? */
+ if (e->attach_del || e->xlabel_changed || (e->env && e->env->changed))
{
if (mh_rewrite_message(m, msgno) != 0)
return -1;
+ /* TODO: why the env check? */
+ if (e->env)
+ e->env->changed = 0;
}
return 0;
mutt_list_insert_head(&child->env->in_reply_to, mutt_str_strdup(parent->env->message_id));
mutt_set_flag(m, child, MUTT_TAG, 0);
- child->env->irt_changed = true;
child->changed = true;
+ child->env->changed |= MUTT_ENV_CHANGED_IRT;
return true;
}