|
@@ -247,11 +247,12 @@ static void imap_invoke_bad_callback( imap_store_t *ctx );
|
|
|
/* grep for MAILBOX_DRIVER_FLAG */
|
|
|
/* The order is according to alphabetical maildir flag sort */
|
|
|
static const char *Flags[] = {
|
|
|
- "Draft",
|
|
|
- "Flagged",
|
|
|
- "Answered",
|
|
|
- "Seen",
|
|
|
- "Deleted",
|
|
|
+ "\\Draft", /* 'D' */
|
|
|
+ "\\Flagged", /* 'F' */
|
|
|
+ "$Forwarded", /* 'P' */
|
|
|
+ "\\Answered", /* 'R' */
|
|
|
+ "\\Seen", /* 'S' */
|
|
|
+ "\\Deleted", /* 'T' */
|
|
|
};
|
|
|
|
|
|
static imap_cmd_t *
|
|
@@ -989,17 +990,19 @@ parse_fetch_rsp( imap_store_t *ctx, list_t *list, char *s ATTR_UNUSED )
|
|
|
if (is_list( tmp )) {
|
|
|
for (flags = tmp->child; flags; flags = flags->next) {
|
|
|
if (is_atom( flags )) {
|
|
|
- if (flags->val[0] == '\\') { /* ignore user-defined flags for now */
|
|
|
- if (!strcmp( "Recent", flags->val + 1)) {
|
|
|
+ if (flags->val[0] == '\\' || flags->val[0] == '$') {
|
|
|
+ if (!strcmp( "\\Recent", flags->val)) {
|
|
|
status |= M_RECENT;
|
|
|
goto flagok;
|
|
|
}
|
|
|
for (i = 0; i < as(Flags); i++)
|
|
|
- if (!strcmp( Flags[i], flags->val + 1 )) {
|
|
|
+ if (!strcmp( Flags[i], flags->val)) {
|
|
|
mask |= 1 << i;
|
|
|
goto flagok;
|
|
|
}
|
|
|
- if (flags->val[1] == 'X' && flags->val[2] == '-')
|
|
|
+ if (flags->val[0] == '$')
|
|
|
+ goto flagok; /* ignore unknown user-defined flags (keywords) */
|
|
|
+ if (flags->val[0] == '\\' && flags->val[1] == 'X' && flags->val[2] == '-')
|
|
|
goto flagok; /* ignore system flag extensions */
|
|
|
error( "IMAP warning: unknown system flag %s\n", flags->val );
|
|
|
}
|
|
@@ -2664,7 +2667,6 @@ imap_make_flags( int flags, char *buf )
|
|
|
for (i = d = 0; i < as(Flags); i++)
|
|
|
if (flags & (1 << i)) {
|
|
|
buf[d++] = ' ';
|
|
|
- buf[d++] = '\\';
|
|
|
for (s = Flags[i]; *s; s++)
|
|
|
buf[d++] = *s;
|
|
|
}
|