1
0
mirror of https://github.com/djcb/mu.git synced 2024-06-29 07:51:04 +02:00

* mu-flags: add MU_FLAG_LIST, clean-up code a bit

This commit is contained in:
djcb 2013-07-03 21:54:08 +03:00
parent 81eeff1c13
commit 81c3e11c48
2 changed files with 35 additions and 70 deletions

View File

@ -45,51 +45,38 @@ static const FlagInfo FLAG_INFO[] = {
{ MU_FLAG_SIGNED, 'z', "signed", MU_FLAG_TYPE_CONTENT }, { MU_FLAG_SIGNED, 'z', "signed", MU_FLAG_TYPE_CONTENT },
{ MU_FLAG_ENCRYPTED, 'x', "encrypted", MU_FLAG_TYPE_CONTENT }, { MU_FLAG_ENCRYPTED, 'x', "encrypted", MU_FLAG_TYPE_CONTENT },
{ MU_FLAG_HAS_ATTACH, 'a', "attach", MU_FLAG_TYPE_CONTENT }, { MU_FLAG_HAS_ATTACH, 'a', "attach", MU_FLAG_TYPE_CONTENT },
{ MU_FLAG_LIST, 'l', "list", MU_FLAG_TYPE_CONTENT },
{ MU_FLAG_UNREAD, 'u', "unread", MU_FLAG_TYPE_PSEUDO } { MU_FLAG_UNREAD, 'u', "unread", MU_FLAG_TYPE_PSEUDO }
}; };
/* does not use FLAG_INFO, optimized */
MuFlagType MuFlagType
mu_flag_type (MuFlags flag) mu_flag_type (MuFlags flag)
{ {
if (flag >= MU_FLAG_DRAFT && flag <= MU_FLAG_TRASHED) unsigned u;
return MU_FLAG_TYPE_MAILFILE;
if (flag == MU_FLAG_NEW)
return MU_FLAG_TYPE_MAILDIR;
if (flag == MU_FLAG_UNREAD)
return MU_FLAG_TYPE_PSEUDO;
if (flag >= MU_FLAG_SIGNED && flag <= MU_FLAG_HAS_ATTACH)
return MU_FLAG_TYPE_CONTENT;
for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
if (FLAG_INFO[u].flag == flag)
return FLAG_INFO[u].flag_type;
g_warning ("%s: invalid flag %u", __FUNCTION__, flag);
return MU_FLAG_TYPE_INVALID; return MU_FLAG_TYPE_INVALID;
} }
/* does not use FLAG_INFO, optimized */
char char
mu_flag_char (MuFlags flag) mu_flag_char (MuFlags flag)
{ {
switch (flag) { unsigned u;
case MU_FLAG_DRAFT: return 'D'; for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
case MU_FLAG_FLAGGED: return 'F'; if (FLAG_INFO[u].flag == flag)
case MU_FLAG_PASSED: return 'P'; return FLAG_INFO[u].kar;
case MU_FLAG_REPLIED: return 'R';
case MU_FLAG_SEEN: return 'S';
case MU_FLAG_TRASHED: return 'T';
case MU_FLAG_NEW: return 'N'; g_warning ("%s: invalid flag %u", __FUNCTION__, flag);
return 0;
case MU_FLAG_SIGNED: return 'z';
case MU_FLAG_ENCRYPTED: return 'x';
case MU_FLAG_HAS_ATTACH: return 'a';
case MU_FLAG_UNREAD: return 'u';
default:
return 0;
}
} }
@ -97,52 +84,28 @@ mu_flag_char (MuFlags flag)
static MuFlags static MuFlags
mu_flag_from_char (char kar) mu_flag_from_char (char kar)
{ {
switch (kar) { unsigned u;
case 'D': return MU_FLAG_DRAFT; for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
case 'F': return MU_FLAG_FLAGGED; if (FLAG_INFO[u].kar == kar)
case 'P': return MU_FLAG_PASSED; return FLAG_INFO[u].flag;
case 'R': return MU_FLAG_REPLIED;
case 'S': return MU_FLAG_SEEN;
case 'T': return MU_FLAG_TRASHED;
case 'N': return MU_FLAG_NEW; g_warning ("%s: invalid kar %c", __FUNCTION__, kar);
return MU_FLAG_INVALID;
case 'z': return MU_FLAG_SIGNED;
case 'x': return MU_FLAG_ENCRYPTED;
case 'a': return MU_FLAG_HAS_ATTACH;
case 'u': return MU_FLAG_UNREAD;
default:
return MU_FLAG_INVALID;
}
} }
/* does not use FLAG_INFO, optimized */
const char* const char*
mu_flag_name (MuFlags flag) mu_flag_name (MuFlags flag)
{ {
switch (flag) { unsigned u;
case MU_FLAG_DRAFT: return "draft";
case MU_FLAG_FLAGGED: return "flagged";
case MU_FLAG_PASSED: return "passed";
case MU_FLAG_REPLIED: return "replied";
case MU_FLAG_SEEN: return "seen";
case MU_FLAG_TRASHED: return "trashed";
case MU_FLAG_NEW: return "new"; for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
if (FLAG_INFO[u].flag == flag)
return FLAG_INFO[u].name;
case MU_FLAG_SIGNED: return "signed"; g_warning ("%s: invalid flags %u", __FUNCTION__, flag);
case MU_FLAG_ENCRYPTED: return "encrypted"; return NULL;
case MU_FLAG_HAS_ATTACH: return "attach";
case MU_FLAG_UNREAD: return "unread";
default:
return NULL;
}
} }
@ -162,13 +125,12 @@ mu_flags_to_str_s (MuFlags flags, MuFlagType types)
} }
MuFlags MuFlags
mu_flags_from_str (const char *str, MuFlagType types, mu_flags_from_str (const char *str, MuFlagType types,
gboolean ignore_invalid) gboolean ignore_invalid)
{ {
const char *cur; const char *cur;
MuFlags flag; MuFlags flag;
g_return_val_if_fail (str, MU_FLAG_INVALID); g_return_val_if_fail (str, MU_FLAG_INVALID);
@ -239,8 +201,8 @@ MuFlags
mu_flags_from_str_delta (const char *str, MuFlags oldflags, mu_flags_from_str_delta (const char *str, MuFlags oldflags,
MuFlagType types) MuFlagType types)
{ {
const char *cur; const char *cur;
MuFlags newflags; MuFlags newflags;
g_return_val_if_fail (str, MU_FLAG_INVALID); g_return_val_if_fail (str, MU_FLAG_INVALID);

View File

@ -51,7 +51,10 @@ enum _MuFlags {
/* pseudo-flag, only for queries, so we can search for /* pseudo-flag, only for queries, so we can search for
* flag:unread, which is equivalent to 'flag:new OR NOT * flag:unread, which is equivalent to 'flag:new OR NOT
* flag:seen' */ * flag:seen' */
MU_FLAG_UNREAD = 1 << 10 MU_FLAG_UNREAD = 1 << 10,
/* other content flags */
MU_FLAG_LIST = 1 << 11
}; };
typedef enum _MuFlags MuFlags; typedef enum _MuFlags MuFlags;