1943{
1945 char buf[1024] = { 0 };
1946 char *pc = NULL;
1947 unsigned int bytes;
1948 unsigned int uid;
1949 bool retried = false;
1950 bool read;
1951 int rc;
1952
1953
1954
1955 bool fetched = false;
1956
1958
1960 return false;
1961
1963 if (!e)
1964 return false;
1965
1968 {
1970 return true;
1971 goto parsemsg;
1972 }
1973
1974
1975
1976 bool output_progress = !isendwin() && m->
verbose;
1977 if (output_progress)
1979
1982 {
1988
1990 return false;
1991 }
1992
1993
1994
1995
1997
1999 snprintf(buf,
sizeof(buf),
"UID FETCH %u %s",
imap_edata_get(e)->uid,
2001 (c_imap_peek ? "BODY.PEEK[]" : "BODY[]") :
2002 "RFC822"));
2003
2005 do
2006 {
2009 break;
2010
2014
2016 {
2017 while (*pc)
2018 {
2020 if (pc[0] == '(')
2021 pc++;
2023 {
2026 goto bail;
2028 {
2029 mutt_error(
_(
"The message index is incorrect. Try reopening the mailbox."));
2030 }
2031 }
2033 {
2036 {
2038 goto bail;
2039 }
2040
2041
2042
2043
2045
2046 if (res < 0)
2047 {
2048 goto bail;
2049 }
2050
2053 goto bail;
2055
2056 fetched = true;
2057 }
2058
2059
2060
2061
2063 {
2065 if (!pc)
2066 goto bail;
2067 }
2068 }
2069 }
2071
2072
2074
2076 if (ferror(msg->
fp))
2077 goto bail;
2078
2080 goto bail;
2081
2083 goto bail;
2084
2086
2087parsemsg:
2088
2089
2091
2092
2093
2094
2095
2099
2100
2101
2102 if (read != e->
read)
2103 {
2106 }
2107
2109 fgets(buf,
sizeof(buf), msg->
fp);
2110 while (!feof(msg->
fp))
2111 {
2113 fgets(buf,
sizeof(buf), msg->
fp);
2114 }
2115
2117
2121
2122
2124 {
2126 retried = true;
2127 goto parsemsg;
2128 }
2129
2130 return true;
2131
2132bail:
2136 return false;
2137}
const char * mutt_str_atoui(const char *str, unsigned int *dst)
Convert ASCII string to an unsigned integer.
static const char * mutt_buffer_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
void mutt_env_merge(struct Envelope *base, struct Envelope **extra)
Merge the headers of two Envelopes.
FILE * mutt_file_fopen(const char *path, const char *mode)
Call fopen() safely.
int mutt_file_fclose(FILE **fp)
Close a FILE handle (and NULL the pointer)
#define mutt_message(...)
struct ImapAccountData * imap_adata_get(struct Mailbox *m)
Get the Account data for this mailbox.
int imap_cmd_start(struct ImapAccountData *adata, const char *cmdstr)
Given an IMAP command, send it to the server.
int imap_cmd_step(struct ImapAccountData *adata)
Reads server responses from an IMAP command.
bool imap_code(const char *s)
Was the command successful.
struct ImapEmailData * imap_edata_get(struct Email *e)
Get the private data for this Email.
static FILE * msg_cache_put(struct Mailbox *m, struct Email *e)
Put an email into the message cache.
char * imap_set_flags(struct Mailbox *m, struct Email *e, char *s, bool *server_changes)
Fill the message header according to the server flags.
static FILE * msg_cache_get(struct Mailbox *m, struct Email *e)
Get the message cache entry for an email.
int imap_cache_del(struct Mailbox *m, struct Email *e)
Delete an email from the body cache.
static int msg_cache_commit(struct Mailbox *m, struct Email *e)
Add to the message cache.
int imap_get_literal_count(const char *buf, unsigned int *bytes)
Write number of bytes in an IMAP literal into bytes.
#define IMAP_RES_OK
<tag> OK ...
#define IMAP_CAP_IMAP4REV1
Server supports IMAP4rev1.
void imap_error(const char *where, const char *msg)
Show an error and abort.
#define IMAP_RES_CONTINUE
* ...
char * imap_next_word(char *s)
Find where the next IMAP word begins.
int imap_read_literal(FILE *fp, struct ImapAccountData *adata, unsigned long bytes, struct Progress *progress)
Read bytes bytes from server into file.
size_t mutt_istr_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix, ignoring case.
void mutt_clear_error(void)
Clear the message line (bottom line of screen)
struct Envelope * mutt_rfc822_read_header(FILE *fp, struct Email *e, bool user_hdrs, bool weed)
Parses an RFC822 header.
void mutt_buffer_pool_release(struct Buffer **pbuf)
Free a Buffer from the pool.
struct Buffer * mutt_buffer_pool_get(void)
Get a Buffer from the pool.
#define mutt_set_flag(m, e, flag, bf)
void * adata
Private data (for Mailbox backends)
LOFF_T offset
offset where the actual data begins
LOFF_T length
length (in bytes) of attachment
String manipulation buffer.
The envelope/body of an email.
struct Envelope * env
Envelope information.
int lines
How many lines in the body of this message?
struct Body * body
List of MIME parts.
bool active
Message is not to be removed.
bool changed
Email has been edited.
int msgno
Number displayed to the user.
IMAP-specific Account data -.
ImapCapFlags capabilities
Capability flags.
struct Email ** emails
Array of Emails.
bool verbose
Display status messages?
FILE * fp
pointer to the message data
Container for Accounts, Notifications.
struct ConfigSubset * sub
Inherited config items.
#define mutt_buffer_mktemp(buf)