mirror of https://github.com/djcb/mu.git
* restore flag:unread and some optimization
This commit is contained in:
parent
8302fb23bb
commit
675b89708f
|
@ -524,10 +524,13 @@ define_symbols (void)
|
|||
scm_c_define ("mu:trashed", scm_from_int(MU_FLAG_TRASHED));
|
||||
scm_c_define ("mu:draft", scm_from_int(MU_FLAG_DRAFT));
|
||||
scm_c_define ("mu:flagged", scm_from_int(MU_FLAG_FLAGGED));
|
||||
scm_c_define ("mu:unread", scm_from_int(MU_FLAG_UNREAD));
|
||||
|
||||
scm_c_define ("mu:signed", scm_from_int(MU_FLAG_SIGNED));
|
||||
scm_c_define ("mu:encrypted", scm_from_int(MU_FLAG_ENCRYPTED));
|
||||
scm_c_define ("mu:has-attach", scm_from_int(MU_FLAG_HAS_ATTACH));
|
||||
|
||||
scm_c_define ("mu:unread", scm_from_int(MU_FLAG_UNREAD));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH MU-EASY 1 "May 2011" "User Manuals"
|
||||
.TH MU-EASY 1 "August 2011" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
|
||||
|
@ -138,20 +138,20 @@ Get all messages from Jim without an attachment:
|
|||
\fB$ mu find from:jim AND NOT flag:attach\fR
|
||||
.fi
|
||||
|
||||
Get all unseen messages where the subject mentions Ångström:
|
||||
Get all unread messages where the subject mentions Ångström:
|
||||
.nf
|
||||
\fB$ mu find subject:Ångström NOT flag:seen\fR
|
||||
\fB$ mu find subject:Ångström flag:unread\fR
|
||||
.fi
|
||||
which is equivalent to:
|
||||
.nf
|
||||
\fB$ mu find subject:angstrom NOT flag:seen\fR
|
||||
\fB$ mu find subject:angstrom flag:unread\fR
|
||||
.fi
|
||||
because does mu is case-insensitive and accent-insensitive.
|
||||
|
||||
Get all unseen messages between March 2002 and August 2003 about some bird (or
|
||||
Get all unread messages between March 2002 and August 2003 about some bird (or
|
||||
a Swedish rock band):
|
||||
.nf
|
||||
\fB$ mu find date:20020301..20030831 nightingale NOT flag:seen\fR
|
||||
\fB$ mu find date:20020301..20030831 nightingale flag:unread\fR
|
||||
.fi
|
||||
|
||||
Get all messages received today:
|
||||
|
|
|
@ -469,7 +469,7 @@ Find all messages in the 'Archive' folder from Fred:
|
|||
Find all unread messages with attachments:
|
||||
|
||||
.nf
|
||||
$ mu find flag:attach NOT flag:seen
|
||||
$ mu find flag:attach flag:unread
|
||||
.fi
|
||||
|
||||
|
||||
|
@ -520,7 +520,7 @@ VFolders {
|
|||
|
||||
[size:1m..100m]!mu "Big"
|
||||
|
||||
[NOT flag:seen]!mu "Unread"
|
||||
[flag:unread]!mu "Unread"
|
||||
}
|
||||
.fi
|
||||
|
||||
|
|
|
@ -42,7 +42,9 @@ static const FlagInfo FLAG_INFO[] = {
|
|||
|
||||
{ MU_FLAG_SIGNED, 's', "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_HAS_ATTACH, 'a', "attach", MU_FLAG_TYPE_CONTENT },
|
||||
|
||||
{ MU_FLAG_UNREAD, 'u', "unread", MU_FLAG_TYPE_PSEUDO }
|
||||
};
|
||||
|
||||
/* does not use FLAG_INFO, optimized */
|
||||
|
@ -53,9 +55,12 @@ mu_flag_type (MuFlags flag)
|
|||
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;
|
||||
|
||||
g_return_val_if_reached (MU_FLAG_TYPE_INVALID);
|
||||
return MU_FLAG_TYPE_INVALID;
|
||||
}
|
||||
|
||||
|
@ -78,9 +83,10 @@ mu_flag_char (MuFlags flag)
|
|||
case MU_FLAG_SIGNED: return 's';
|
||||
case MU_FLAG_ENCRYPTED: return 'x';
|
||||
case MU_FLAG_HAS_ATTACH: return 'a';
|
||||
|
||||
|
||||
case MU_FLAG_UNREAD: return 'u';
|
||||
|
||||
default:
|
||||
g_message ("unsupported flag %u", flag);
|
||||
g_return_val_if_reached (0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -105,9 +111,10 @@ mu_flag_from_char (char kar)
|
|||
case 's': return MU_FLAG_SIGNED;
|
||||
case 'x': return MU_FLAG_ENCRYPTED;
|
||||
case 'a': return MU_FLAG_HAS_ATTACH;
|
||||
|
||||
|
||||
case 'u': return MU_FLAG_UNREAD;
|
||||
|
||||
default:
|
||||
g_message ("unsupported char %c", kar);
|
||||
g_return_val_if_reached (MU_FLAG_INVALID);
|
||||
return MU_FLAG_INVALID;
|
||||
}
|
||||
|
@ -132,6 +139,9 @@ mu_flag_name (MuFlags flag)
|
|||
case MU_FLAG_SIGNED: return "signed";
|
||||
case MU_FLAG_ENCRYPTED: return "encrypted";
|
||||
case MU_FLAG_HAS_ATTACH: return "attach";
|
||||
|
||||
case MU_FLAG_UNREAD: return "unread";
|
||||
|
||||
default:
|
||||
g_return_val_if_reached (NULL);
|
||||
return NULL;
|
||||
|
|
|
@ -27,18 +27,31 @@ G_BEGIN_DECLS
|
|||
|
||||
enum _MuFlags {
|
||||
MU_FLAG_NONE = 0,
|
||||
|
||||
|
||||
/* next 6 are seen in the file-info part of maildir message
|
||||
* file names, ie., in a name like "1234345346:2,<fileinfo>",
|
||||
* <fileinfo> consists of zero or more of the following
|
||||
* characters (in ascii order) */
|
||||
MU_FLAG_DRAFT = 1 << 0,
|
||||
MU_FLAG_FLAGGED = 1 << 1,
|
||||
MU_FLAG_PASSED = 1 << 2,
|
||||
MU_FLAG_REPLIED = 1 << 3,
|
||||
MU_FLAG_SEEN = 1 << 4,
|
||||
MU_FLAG_TRASHED = 1 << 5,
|
||||
|
||||
MU_FLAG_NEW = 1 << 6,
|
||||
|
||||
/* decides on cur/ or new/ in the maildir */
|
||||
MU_FLAG_NEW = 1 << 6,
|
||||
|
||||
/* content flags -- not visible in the filename, but used for
|
||||
* searching */
|
||||
MU_FLAG_SIGNED = 1 << 7,
|
||||
MU_FLAG_ENCRYPTED = 1 << 8,
|
||||
MU_FLAG_HAS_ATTACH = 1 << 9
|
||||
MU_FLAG_HAS_ATTACH = 1 << 9,
|
||||
|
||||
/* 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
|
||||
};
|
||||
typedef enum _MuFlags MuFlags;
|
||||
|
||||
|
@ -47,7 +60,8 @@ typedef enum _MuFlags MuFlags;
|
|||
enum _MuFlagType {
|
||||
MU_FLAG_TYPE_MAILFILE = 1 << 0,
|
||||
MU_FLAG_TYPE_MAILDIR = 1 << 1,
|
||||
MU_FLAG_TYPE_CONTENT = 1 << 2
|
||||
MU_FLAG_TYPE_CONTENT = 1 << 2,
|
||||
MU_FLAG_TYPE_PSEUDO = 1 << 3
|
||||
};
|
||||
typedef enum _MuFlagType MuFlagType;
|
||||
|
||||
|
@ -62,7 +76,7 @@ typedef enum _MuFlagType MuFlagType;
|
|||
*
|
||||
* @return the flag type or MU_FLAG_TYPE_INVALID in case of error
|
||||
*/
|
||||
MuFlagType mu_flag_type (MuFlags flag);
|
||||
MuFlagType mu_flag_type (MuFlags flag) G_GNUC_CONST;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -72,7 +86,7 @@ MuFlagType mu_flag_type (MuFlags flag);
|
|||
*
|
||||
* @return the character, or 0 in case of error
|
||||
*/
|
||||
char mu_flag_char (MuFlags flag);
|
||||
char mu_flag_char (MuFlags flag) G_GNUC_CONST;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -82,7 +96,7 @@ char mu_flag_char (MuFlags flag);
|
|||
*
|
||||
* @return the name (don't free) as string or NULL in case of error
|
||||
*/
|
||||
const char* mu_flag_name (MuFlags flag);
|
||||
const char* mu_flag_name (MuFlags flag) G_GNUC_CONST;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -332,10 +332,15 @@ get_flags (MuMsgFile *self)
|
|||
{
|
||||
MuFlags flags;
|
||||
|
||||
g_return_val_if_fail (self, MU_FLAG_NONE);
|
||||
g_return_val_if_fail (self, MU_FLAG_INVALID);
|
||||
|
||||
flags = mu_maildir_get_flags_from_path (self->_path);
|
||||
flags |= get_content_flags (self);
|
||||
|
||||
/* pseudo-flag --> unread means either NEW or NOT SEEN, just
|
||||
* for searching convenience */
|
||||
if ((flags & MU_FLAG_NEW) || (!(flags & MU_FLAG_SEEN)))
|
||||
flags |= MU_FLAG_UNREAD;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
|
|
@ -325,6 +325,34 @@ add_terms_values_date (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: we could pre-calculate the add_term values for FLAGS */
|
||||
|
||||
|
||||
/* pre-calculate; optimization */
|
||||
G_GNUC_CONST static const std::string&
|
||||
prio_val (MuMsgPrio prio)
|
||||
{
|
||||
static const std::string pfx (prefix(MU_MSG_FIELD_ID_PRIO));
|
||||
|
||||
static const std::string lowstr
|
||||
(pfx + std::string(1, mu_msg_prio_char(MU_MSG_PRIO_LOW)));
|
||||
static const std::string normalstr
|
||||
(pfx + std::string(1, mu_msg_prio_char(MU_MSG_PRIO_NORMAL)));
|
||||
static const std::string highstr
|
||||
(pfx + std::string(1, mu_msg_prio_char(MU_MSG_PRIO_HIGH)));
|
||||
|
||||
|
||||
switch (prio) {
|
||||
case MU_MSG_PRIO_LOW: return lowstr;
|
||||
case MU_MSG_PRIO_NORMAL: return normalstr;
|
||||
case MU_MSG_PRIO_HIGH: return highstr;
|
||||
default:
|
||||
g_return_val_if_reached (normalstr);
|
||||
return normalstr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
add_terms_values_number (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid)
|
||||
|
@ -341,10 +369,8 @@ add_terms_values_number (Xapian::Document& doc, MuMsg *msg, MuMsgFieldId mfid)
|
|||
cur && *cur; ++cur)
|
||||
doc.add_term (prefix(mfid) + (char)tolower (*cur));
|
||||
|
||||
} else if (mfid == MU_MSG_FIELD_ID_PRIO) {
|
||||
doc.add_term (prefix(mfid) + std::string(1,
|
||||
mu_msg_prio_char((MuMsgPrio)num)));
|
||||
}
|
||||
} else if (mfid == MU_MSG_FIELD_ID_PRIO)
|
||||
doc.add_term (prio_val((MuMsgPrio)num));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -182,7 +182,7 @@ test_mu_msg_03 (void)
|
|||
==,
|
||||
"\nLet's write some fünkÿ text\nusing umlauts.\n\nFoo.\n");
|
||||
g_assert_cmpuint (mu_msg_get_flags(msg),
|
||||
==, MU_FLAG_NONE);
|
||||
==, MU_FLAG_UNREAD); /* not seen => unread */
|
||||
|
||||
mu_msg_unref (msg);
|
||||
}
|
||||
|
@ -206,9 +206,9 @@ test_mu_msg_04 (void)
|
|||
==, MU_MSG_PRIO_NORMAL);
|
||||
g_assert_cmpuint (mu_msg_get_date(msg),
|
||||
==, 0);
|
||||
|
||||
|
||||
g_assert_cmpuint (mu_msg_get_flags(msg),
|
||||
==, MU_FLAG_HAS_ATTACH);
|
||||
==, MU_FLAG_HAS_ATTACH|MU_FLAG_UNREAD);
|
||||
|
||||
mu_msg_unref (msg);
|
||||
}
|
||||
|
@ -345,7 +345,8 @@ test_mu_msg_comp_unix_programmer (void)
|
|||
|
||||
refs = mu_str_from_list (mu_msg_get_references(msg), ',');
|
||||
g_assert_cmpstr (refs, ==,
|
||||
"e9065dac-13c1-4103-9e31-6974ca232a89@t15g2000prt.googlegroups.com,"
|
||||
"e9065dac-13c1-4103-9e31-6974ca232a89@t15g2000prt"
|
||||
".googlegroups.com,"
|
||||
"87hbblwelr.fsf@sapphire.mobileactivedefense.com,"
|
||||
"pql248-4va.ln1@wilbur.25thandClement.com,"
|
||||
"ikns6r$li3$1@Iltempo.Update.UU.SE,"
|
||||
|
|
|
@ -38,8 +38,8 @@ If =mu= did not guess the right Maildir, you can set it explicitly:
|
|||
*** signed messages about apples *OR* oranges
|
||||
#+html:<pre> $ mu find flag:signed apples OR oranges</pre>
|
||||
|
||||
*** unseen messages about things starting with 'soc' (soccer, society, socrates, ...)
|
||||
#+html:<pre> $ mu find 'subject:soc*' NOT flag:seen</pre>
|
||||
*** unread messages about things starting with 'soc' (soccer, society, socrates, ...)
|
||||
#+html:<pre> $ mu find 'subject:soc*' flag:unread</pre>
|
||||
|
||||
Note, the '*' only works at the /end/ of a search term.
|
||||
(searching using the '*' wildcard is available since mu 0.9.6)
|
||||
|
|
Loading…
Reference in New Issue