summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordjcb <djcb@djcbsoftware.nl>2013-07-03 21:54:08 +0300
committerdjcb <djcb@djcbsoftware.nl>2013-07-03 21:54:08 +0300
commit81c3e11c48b0674686c69ed4c04895809131af2a (patch)
treea2e3cdc744fc592312f4ae83a8c5125049541a96
parent81eeff1c1347c261c5f0a83623b59d6f4f116710 (diff)
* mu-flags: add MU_FLAG_LIST, clean-up code a bit
-rw-r--r--lib/mu-flags.c100
-rw-r--r--lib/mu-flags.h5
2 files changed, 35 insertions, 70 deletions
diff --git a/lib/mu-flags.c b/lib/mu-flags.c
index bd9ee66..f550936 100644
--- a/lib/mu-flags.c
+++ b/lib/mu-flags.c
@@ -45,51 +45,38 @@ static const FlagInfo FLAG_INFO[] = {
{ MU_FLAG_SIGNED, 'z', "signed", 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_LIST, 'l', "list", MU_FLAG_TYPE_CONTENT },
+
{ MU_FLAG_UNREAD, 'u', "unread", MU_FLAG_TYPE_PSEUDO }
};
-/* does not use FLAG_INFO, optimized */
+
MuFlagType
mu_flag_type (MuFlags flag)
{
- if (flag >= MU_FLAG_DRAFT && flag <= MU_FLAG_TRASHED)
- 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;
+ unsigned u;
+ 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;
}
-/* does not use FLAG_INFO, optimized */
char
mu_flag_char (MuFlags flag)
{
- switch (flag) {
-
- case MU_FLAG_DRAFT: return 'D';
- case MU_FLAG_FLAGGED: return 'F';
- case MU_FLAG_PASSED: return 'P';
- case MU_FLAG_REPLIED: return 'R';
- case MU_FLAG_SEEN: return 'S';
- case MU_FLAG_TRASHED: return 'T';
-
- case MU_FLAG_NEW: return 'N';
-
- case MU_FLAG_SIGNED: return 'z';
- case MU_FLAG_ENCRYPTED: return 'x';
- case MU_FLAG_HAS_ATTACH: return 'a';
+ unsigned u;
- case MU_FLAG_UNREAD: return 'u';
+ for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
+ if (FLAG_INFO[u].flag == flag)
+ return FLAG_INFO[u].kar;
- default:
- return 0;
- }
+ g_warning ("%s: invalid flag %u", __FUNCTION__, flag);
+ return 0;
}
@@ -97,52 +84,28 @@ mu_flag_char (MuFlags flag)
static MuFlags
mu_flag_from_char (char kar)
{
- switch (kar) {
-
- case 'D': return MU_FLAG_DRAFT;
- case 'F': return MU_FLAG_FLAGGED;
- case 'P': return MU_FLAG_PASSED;
- case 'R': return MU_FLAG_REPLIED;
- case 'S': return MU_FLAG_SEEN;
- case 'T': return MU_FLAG_TRASHED;
-
- case 'N': return MU_FLAG_NEW;
-
- case 'z': return MU_FLAG_SIGNED;
- case 'x': return MU_FLAG_ENCRYPTED;
- case 'a': return MU_FLAG_HAS_ATTACH;
+ unsigned u;
- case 'u': return MU_FLAG_UNREAD;
+ for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
+ if (FLAG_INFO[u].kar == kar)
+ return FLAG_INFO[u].flag;
- default:
- return MU_FLAG_INVALID;
- }
+ g_warning ("%s: invalid kar %c", __FUNCTION__, kar);
+ return MU_FLAG_INVALID;
}
-/* does not use FLAG_INFO, optimized */
const char*
mu_flag_name (MuFlags flag)
{
- switch (flag) {
- 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";
-
- case MU_FLAG_SIGNED: return "signed";
- case MU_FLAG_ENCRYPTED: return "encrypted";
- case MU_FLAG_HAS_ATTACH: return "attach";
+ unsigned u;
- case MU_FLAG_UNREAD: return "unread";
+ for (u = 0; u != G_N_ELEMENTS (FLAG_INFO); ++u)
+ if (FLAG_INFO[u].flag == flag)
+ return FLAG_INFO[u].name;
- default:
- return NULL;
- }
+ g_warning ("%s: invalid flags %u", __FUNCTION__, flag);
+ return NULL;
}
@@ -162,13 +125,12 @@ mu_flags_to_str_s (MuFlags flags, MuFlagType types)
}
-
MuFlags
mu_flags_from_str (const char *str, MuFlagType types,
gboolean ignore_invalid)
{
- const char *cur;
- MuFlags flag;
+ const char *cur;
+ MuFlags flag;
g_return_val_if_fail (str, MU_FLAG_INVALID);
@@ -239,8 +201,8 @@ MuFlags
mu_flags_from_str_delta (const char *str, MuFlags oldflags,
MuFlagType types)
{
- const char *cur;
- MuFlags newflags;
+ const char *cur;
+ MuFlags newflags;
g_return_val_if_fail (str, MU_FLAG_INVALID);
diff --git a/lib/mu-flags.h b/lib/mu-flags.h
index 3ac2fac..5b9f89b 100644
--- a/lib/mu-flags.h
+++ b/lib/mu-flags.h
@@ -51,7 +51,10 @@ enum _MuFlags {
/* pseudo-flag, only for queries, so we can search for
* flag:unread, which is equivalent to 'flag:new OR NOT
* flag:seen' */
- MU_FLAG_UNREAD = 1 << 10
+ MU_FLAG_UNREAD = 1 << 10,
+
+ /* other content flags */
+ MU_FLAG_LIST = 1 << 11
};
typedef enum _MuFlags MuFlags;