switch (flag)
{
case MUTT_DELETED:
- if (emails[n]->deleted != HEADER_DATA(emails[n])->deleted)
+ if (emails[n]->deleted != IMAP_EDATA(emails[n])->deleted)
match = invert ^ emails[n]->deleted;
break;
case MUTT_FLAG:
- if (emails[n]->flagged != HEADER_DATA(emails[n])->flagged)
+ if (emails[n]->flagged != IMAP_EDATA(emails[n])->flagged)
match = invert ^ emails[n]->flagged;
break;
case MUTT_OLD:
- if (emails[n]->old != HEADER_DATA(emails[n])->old)
+ if (emails[n]->old != IMAP_EDATA(emails[n])->old)
match = invert ^ emails[n]->old;
break;
case MUTT_READ:
- if (emails[n]->read != HEADER_DATA(emails[n])->read)
+ if (emails[n]->read != IMAP_EDATA(emails[n])->read)
match = invert ^ emails[n]->read;
break;
case MUTT_REPLIED:
- if (emails[n]->replied != HEADER_DATA(emails[n])->replied)
+ if (emails[n]->replied != IMAP_EDATA(emails[n])->replied)
match = invert ^ emails[n]->replied;
break;
case MUTT_TAG:
count++;
if (setstart == 0)
{
- setstart = HEADER_DATA(emails[n])->uid;
+ setstart = IMAP_EDATA(emails[n])->uid;
if (!started)
{
- mutt_buffer_printf(buf, "%u", HEADER_DATA(emails[n])->uid);
+ mutt_buffer_printf(buf, "%u", IMAP_EDATA(emails[n])->uid);
started = true;
}
else
- mutt_buffer_printf(buf, ",%u", HEADER_DATA(emails[n])->uid);
+ mutt_buffer_printf(buf, ",%u", IMAP_EDATA(emails[n])->uid);
}
/* tie up if the last message also matches */
else if (n == mdata->ctx->mailbox->msg_count - 1)
- mutt_buffer_printf(buf, ":%u", HEADER_DATA(emails[n])->uid);
+ mutt_buffer_printf(buf, ":%u", IMAP_EDATA(emails[n])->uid);
}
/* End current set if message doesn't match or we've reached the end
* of the mailbox via inactive messages following the last match. */
else if (setstart && (emails[n]->active || n == mdata->ctx->mailbox->msg_count - 1))
{
- if (HEADER_DATA(emails[n - 1])->uid > setstart)
- mutt_buffer_printf(buf, ":%u", HEADER_DATA(emails[n - 1])->uid);
+ if (IMAP_EDATA(emails[n - 1])->uid > setstart)
+ mutt_buffer_printf(buf, ":%u", IMAP_EDATA(emails[n - 1])->uid);
setstart = 0;
}
}
if (e->index == INT_MAX)
{
- mutt_debug(2, "Expunging message UID %u.\n", HEADER_DATA(e)->uid);
+ mutt_debug(2, "Expunging message UID %u.\n", IMAP_EDATA(e)->uid);
e->active = false;
mdata->ctx->mailbox->size -= e->content->length;
imap_cache_del(mdata, e);
#ifdef USE_HCACHE
- imap_hcache_del(mdata, HEADER_DATA(e)->uid);
+ imap_hcache_del(mdata, IMAP_EDATA(e)->uid);
#endif
/* free cached body from disk, if necessary */
- cacheno = HEADER_DATA(e)->uid % IMAP_CACHE_LEN;
- if (mdata->cache[cacheno].uid == HEADER_DATA(e)->uid &&
+ cacheno = IMAP_EDATA(e)->uid % IMAP_CACHE_LEN;
+ if (mdata->cache[cacheno].uid == IMAP_EDATA(e)->uid &&
mdata->cache[cacheno].path)
{
unlink(mdata->cache[cacheno].path);
FREE(&mdata->cache[cacheno].path);
}
- mutt_hash_int_delete(mdata->uid_hash, HEADER_DATA(e)->uid, e);
+ mutt_hash_int_delete(mdata->uid_hash, IMAP_EDATA(e)->uid, e);
- imap_free_email_data((struct ImapEmailData **) &e->data);
+ imap_free_emaildata((void **) &e->data);
}
else
{
if (!compare_flags_for_copy(e))
{
- if (e->deleted == HEADER_DATA(e)->deleted)
+ if (e->deleted == IMAP_EDATA(e)->deleted)
e->changed = false;
return 0;
}
- snprintf(uid, sizeof(uid), "%u", HEADER_DATA(e)->uid);
+ snprintf(uid, sizeof(uid), "%u", IMAP_EDATA(e)->uid);
cmd->dptr = cmd->data;
mutt_buffer_addstr(cmd, "UID STORE ");
mutt_buffer_addstr(cmd, uid);
set_flag(mdata, MUTT_ACL_WRITE, e->old, "Old ", flags, sizeof(flags));
set_flag(mdata, MUTT_ACL_WRITE, e->flagged, "\\Flagged ", flags, sizeof(flags));
set_flag(mdata, MUTT_ACL_WRITE, e->replied, "\\Answered ", flags, sizeof(flags));
- set_flag(mdata, MUTT_ACL_DELETE, HEADER_DATA(e)->deleted, "\\Deleted ", flags,
+ set_flag(mdata, MUTT_ACL_DELETE, IMAP_EDATA(e)->deleted, "\\Deleted ", flags,
sizeof(flags));
if (mutt_bit_isset(mdata->ctx->mailbox->rights, MUTT_ACL_WRITE))
{
/* restore system flags */
- if (HEADER_DATA(e)->flags_system)
- mutt_str_strcat(flags, sizeof(flags), HEADER_DATA(e)->flags_system);
+ if (IMAP_EDATA(e)->flags_system)
+ mutt_str_strcat(flags, sizeof(flags), IMAP_EDATA(e)->flags_system);
/* set custom flags */
tags = driver_tags_get_with_hidden(&e->tags);
if (tags)
set_flag(mdata, MUTT_ACL_WRITE, 1, "Old ", flags, sizeof(flags));
set_flag(mdata, MUTT_ACL_WRITE, 1, "\\Flagged ", flags, sizeof(flags));
set_flag(mdata, MUTT_ACL_WRITE, 1, "\\Answered ", flags, sizeof(flags));
- set_flag(mdata, MUTT_ACL_DELETE, !HEADER_DATA(e)->deleted, "\\Deleted ",
+ set_flag(mdata, MUTT_ACL_DELETE, !IMAP_EDATA(e)->deleted, "\\Deleted ",
flags, sizeof(flags));
/* erase custom flags */
if (mutt_bit_isset(mdata->ctx->mailbox->rights, MUTT_ACL_WRITE) &&
- HEADER_DATA(e)->flags_remote)
- mutt_str_strcat(flags, sizeof(flags), HEADER_DATA(e)->flags_remote);
+ IMAP_EDATA(e)->flags_remote)
+ mutt_str_strcat(flags, sizeof(flags), IMAP_EDATA(e)->flags_remote);
mutt_str_remove_trailing_ws(flags);
}
/* server have now the updated flags */
- FREE(&HEADER_DATA(e)->flags_remote);
- HEADER_DATA(e)->flags_remote = driver_tags_get_with_hidden(&e->tags);
+ FREE(&IMAP_EDATA(e)->flags_remote);
+ IMAP_EDATA(e)->flags_remote = driver_tags_get_with_hidden(&e->tags);
e->active = true;
- if (e->deleted == HEADER_DATA(e)->deleted)
+ if (e->deleted == IMAP_EDATA(e)->deleted)
e->changed = false;
return 0;
{
imap_cache_del(mdata, e);
#ifdef USE_HCACHE
- imap_hcache_del(mdata, HEADER_DATA(e)->uid);
+ imap_hcache_del(mdata, IMAP_EDATA(e)->uid);
#endif
}
* there is no need to mutate the hcache after flag-only changes. */
for (int i = 0; i < ctx->mailbox->msg_count; i++)
{
- HEADER_DATA(ctx->mailbox->hdrs[i])->deleted = ctx->mailbox->hdrs[i]->deleted;
- HEADER_DATA(ctx->mailbox->hdrs[i])->flagged = ctx->mailbox->hdrs[i]->flagged;
- HEADER_DATA(ctx->mailbox->hdrs[i])->old = ctx->mailbox->hdrs[i]->old;
- HEADER_DATA(ctx->mailbox->hdrs[i])->read = ctx->mailbox->hdrs[i]->read;
- HEADER_DATA(ctx->mailbox->hdrs[i])->replied = ctx->mailbox->hdrs[i]->replied;
+ IMAP_EDATA(ctx->mailbox->hdrs[i])->deleted = ctx->mailbox->hdrs[i]->deleted;
+ IMAP_EDATA(ctx->mailbox->hdrs[i])->flagged = ctx->mailbox->hdrs[i]->flagged;
+ IMAP_EDATA(ctx->mailbox->hdrs[i])->old = ctx->mailbox->hdrs[i]->old;
+ IMAP_EDATA(ctx->mailbox->hdrs[i])->read = ctx->mailbox->hdrs[i]->read;
+ IMAP_EDATA(ctx->mailbox->hdrs[i])->replied = ctx->mailbox->hdrs[i]->replied;
ctx->mailbox->hdrs[i]->changed = false;
}
ctx->mailbox->changed = false;
mutt_bcache_close(&mdata->bcache);
}
- /* free IMAP part of headers */
- for (int i = 0; i < ctx->mailbox->msg_count; i++)
- {
- /* mailbox may not have fully loaded */
- if (ctx->mailbox->hdrs[i] && ctx->mailbox->hdrs[i]->data)
- imap_free_email_data((struct ImapEmailData **) &(ctx->mailbox->hdrs[i]->data));
- }
-
return 0;
}
if (!mutt_bit_isset(mdata->ctx->mailbox->rights, MUTT_ACL_WRITE))
return 0;
- snprintf(uid, sizeof(uid), "%u", HEADER_DATA(e)->uid);
+ snprintf(uid, sizeof(uid), "%u", IMAP_EDATA(e)->uid);
/* Remove old custom flags */
- if (HEADER_DATA(e)->flags_remote)
+ if (IMAP_EDATA(e)->flags_remote)
{
cmd = mutt_buffer_new();
if (!cmd)
mutt_buffer_addstr(cmd, "UID STORE ");
mutt_buffer_addstr(cmd, uid);
mutt_buffer_addstr(cmd, " -FLAGS.SILENT (");
- mutt_buffer_addstr(cmd, HEADER_DATA(e)->flags_remote);
+ mutt_buffer_addstr(cmd, IMAP_EDATA(e)->flags_remote);
mutt_buffer_addstr(cmd, ")");
/* Should we return here, or we are fine and we could
/* We are good sync them */
mutt_debug(1, "NEW TAGS: %d\n", buf);
driver_tags_replace(&e->tags, buf);
- FREE(&HEADER_DATA(e)->flags_remote);
- HEADER_DATA(e)->flags_remote = driver_tags_get_with_hidden(&e->tags);
+ FREE(&IMAP_EDATA(e)->flags_remote);
+ IMAP_EDATA(e)->flags_remote = driver_tags_get_with_hidden(&e->tags);
return 0;
}
char *ImapHeaders; ///< Config: (imap) Additional email headers to download when getting index
/**
- * new_header_data - Create a new ImapEmailData
+ * new_emaildata - Create a new ImapEmailData
* @retval ptr New ImapEmailData
*/
-static struct ImapEmailData *new_header_data(void)
+static struct ImapEmailData *new_emaildata(void)
{
return mutt_mem_calloc(1, sizeof(struct ImapEmailData));
}
mdata->bcache = msg_cache_open(mdata);
char id[64];
- snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, HEADER_DATA(e)->uid);
+ snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, IMAP_EDATA(e)->uid);
return mutt_bcache_get(mdata->bcache, id);
}
mdata->bcache = msg_cache_open(mdata);
char id[64];
- snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, HEADER_DATA(e)->uid);
+ snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, IMAP_EDATA(e)->uid);
return mutt_bcache_put(mdata->bcache, id);
}
mdata->bcache = msg_cache_open(mdata);
char id[64];
- snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, HEADER_DATA(e)->uid);
+ snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, IMAP_EDATA(e)->uid);
return mutt_bcache_commit(mdata->bcache, id);
}
mutt_progress_update(&progress, msgno, -1);
memset(&h, 0, sizeof(h));
- h.data = mutt_mem_calloc(1, sizeof(struct ImapEmailData));
+ h.data = new_emaildata();
do
{
rc = imap_cmd_step(mdata);
}
} while (mfhrc == -1);
- imap_free_email_data(&h.data);
+ imap_free_emaildata((void **) &h.data);
if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK)))
return -1;
if (ctx->mailbox->msg_count >= ctx->mailbox->hdrmax)
mx_alloc_memory(ctx->mailbox);
- struct ImapEmailData *edata = mutt_mem_calloc(1, sizeof(struct ImapEmailData));
+ struct ImapEmailData *edata = new_emaildata();
e->data = edata;
+ e->free_data = imap_free_emaildata;
e->index = ctx->mailbox->msg_count;
e->active = true;
rewind(fp);
memset(&h, 0, sizeof(h));
- h.data = new_header_data();
+ h.data = new_emaildata();
/* this DO loop does two things:
* 1. handles untagged messages, so we can try again on the same msg
idx++;
} while (mfhrc == -1);
- imap_free_email_data(&h.data);
+ imap_free_emaildata((void **) &h.data);
if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK)))
goto bail;
else
{
mutt_message(_("Copying message %d to %s..."), e->index + 1, mbox);
- mutt_buffer_printf(&cmd, "UID COPY %u %s", HEADER_DATA(e)->uid, mmbox);
+ mutt_buffer_printf(&cmd, "UID COPY %u %s", IMAP_EDATA(e)->uid, mmbox);
if (e->active && e->changed)
{
mdata->bcache = msg_cache_open(mdata);
char id[64];
- snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, HEADER_DATA(e)->uid);
+ snprintf(id, sizeof(id), "%u-%u", mdata->uid_validity, IMAP_EDATA(e)->uid);
return mutt_bcache_del(mdata->bcache, id);
}
}
/**
- * imap_free_email_data - free ImapHeader structure
+ * imap_free_emaildata - free ImapHeader structure
* @param data Header data to free
*/
-void imap_free_email_data(struct ImapEmailData **data)
+void imap_free_emaildata(void **data)
{
if (!data || !*data)
return;
+ struct ImapEmailData *edata = *data;
/* this should be safe even if the list wasn't used */
- FREE(&((*data)->flags_system));
- FREE(&((*data)->flags_remote));
+ FREE(&edata->flags_system);
+ FREE(&edata->flags_remote);
FREE(data);
}
msg->fp = msg_cache_get(mdata, e);
if (msg->fp)
{
- if (HEADER_DATA(e)->parsed)
+ if (IMAP_EDATA(e)->parsed)
return 0;
else
goto parsemsg;
/* we still do some caching even if imap_cachedir is unset */
/* see if we already have the message in our cache */
- cacheno = HEADER_DATA(e)->uid % IMAP_CACHE_LEN;
+ cacheno = IMAP_EDATA(e)->uid % IMAP_CACHE_LEN;
cache = &mdata->cache[cacheno];
if (cache->path)
{
/* don't treat cache errors as fatal, just fall back. */
- if (cache->uid == HEADER_DATA(e)->uid && (msg->fp = fopen(cache->path, "r")))
+ if (cache->uid == IMAP_EDATA(e)->uid && (msg->fp = fopen(cache->path, "r")))
return 0;
else
{
msg->fp = msg_cache_put(mdata, e);
if (!msg->fp)
{
- cache->uid = HEADER_DATA(e)->uid;
+ cache->uid = IMAP_EDATA(e)->uid;
mutt_mktemp(path, sizeof(path));
cache->path = mutt_str_strdup(path);
msg->fp = mutt_file_fopen(path, "w+");
* command handler */
e->active = false;
- snprintf(buf, sizeof(buf), "UID FETCH %u %s", HEADER_DATA(e)->uid,
+ snprintf(buf, sizeof(buf), "UID FETCH %u %s", IMAP_EDATA(e)->uid,
(mutt_bit_isset(mdata->capabilities, IMAP4REV1) ?
(ImapPeek ? "BODY.PEEK[]" : "BODY[]") :
"RFC822"));
pc = imap_next_word(pc);
if (mutt_str_atoui(pc, &uid) < 0)
goto bail;
- if (uid != HEADER_DATA(e)->uid)
+ if (uid != IMAP_EDATA(e)->uid)
{
mutt_error(_(
"The message index is incorrect. Try reopening the mailbox."));
mutt_clear_error();
rewind(msg->fp);
- HEADER_DATA(e)->parsed = true;
+ IMAP_EDATA(e)->parsed = true;
/* retry message parse if cached message is empty */
if (!retried && ((e->lines == 0) || (e->content->length == 0)))