* mu_msg_flags_from_file => mu_msg_file_get_flags_from_path

This commit is contained in:
Dirk-Jan C. Binnema 2010-12-07 23:15:38 +02:00
parent 2d0959ec63
commit 372e245fc7
2 changed files with 0 additions and 114 deletions

View File

@ -154,99 +154,3 @@ mu_msg_flags_foreach (MuMsgFlagsForeachFunc func, gpointer user_data)
func (ALL_FLAGS[i], user_data);
}
/*
* is this a 'new' msg or a 'cur' msg?; if new, we return
* (in info) a ptr to the info part
*/
enum _MsgType {
MSG_TYPE_CUR,
MSG_TYPE_NEW,
MSG_TYPE_OTHER
};
typedef enum _MsgType MsgType;
static MsgType
check_msg_type (const char* path, char **info)
{
char *dir, *file;
MsgType mtype;
/* try to find the info part */
/* note that we can use either the ':' or '!' as separator;
* the former is the official, but as it does not work on e.g. VFAT
* file systems, some Maildir implementations use the latter instead
* (or both). For example, Tinymail/modest does this. The python
* documentation at http://docs.python.org/lib/mailbox-maildir.html
* mentions the '!' as well as a 'popular choice'
*/
*info = NULL;
dir = g_path_get_dirname (path);
file = g_path_get_basename (path);
if (!(*info = strrchr(file, ':')))
*info = strrchr (file, '!'); /* Tinymail */
if (*info)
++(*info); /* skip the ':' or '!' */
if (g_str_has_suffix (dir, G_DIR_SEPARATOR_S "cur")) {
if (!*info)
g_debug ("'cur' file, but no info part: %s", path);
mtype = MSG_TYPE_CUR;
} else if (g_str_has_suffix (dir, G_DIR_SEPARATOR_S "new")) {
if (*info)
g_debug ("'new' file, ignoring info part: %s", path);
mtype = MSG_TYPE_NEW;
} else
mtype = MSG_TYPE_OTHER; /* file has been added explicitly as
a single message */
if (*info)
*info = g_strdup (*info);
g_free (dir);
g_free (file);
return mtype;
}
MuMsgFlags
mu_msg_flags_from_file (const char* path)
{
MuMsgFlags flags;
MsgType mtype;
char *info = NULL;
g_return_val_if_fail (path, MU_MSG_FLAG_NONE);
g_return_val_if_fail (!g_str_has_suffix(path,G_DIR_SEPARATOR_S),
MU_MSG_FLAG_NONE);
mtype = check_msg_type (path, &info);
if (mtype == MSG_TYPE_NEW) { /* we ignore any new-msg flags */
g_free (info);
return MU_MSG_FLAG_NEW;
}
flags = MU_MSG_FLAG_NONE;
if (mtype == MSG_TYPE_CUR || mtype == MSG_TYPE_OTHER) {
char *cursor = info;
/* only support the "2," format */
if (cursor && cursor[0]=='2' && cursor[1]==',') {
cursor += 2; /* jump past 2, */
for (; *cursor; ++cursor)
switch (*cursor) {
case 'P': flags|= MU_MSG_FLAG_PASSED; break;
case 'T': flags|= MU_MSG_FLAG_TRASHED; break;
case 'R': flags|= MU_MSG_FLAG_REPLIED; break;
case 'S': flags|= MU_MSG_FLAG_SEEN; break;
case 'D': flags|= MU_MSG_FLAG_DRAFT;break;
case 'F': flags|= MU_MSG_FLAG_FLAGGED; break;
}
}
}
g_free (info);
return flags;
}

View File

@ -128,8 +128,6 @@ char mu_msg_flag_char (MuMsgFlags flag) G_GNUC_CONST;
const char* mu_msg_flag_name (MuMsgFlags flag) G_GNUC_CONST;
typedef void (*MuMsgFlagsForeachFunc)
(MuMsgFlags flag, gpointer user_data);
@ -142,22 +140,6 @@ typedef void (*MuMsgFlagsForeachFunc)
void mu_msg_flags_foreach (MuMsgFlagsForeachFunc func, gpointer user_data);
/**
* get the Maildir flags from a mailfile. The flags are as specified
* in http://cr.yp.to/proto/maildir.html, plus MU_MSG_FLAG_NEW for
* new messages, ie the ones that live in new/. The flags are
* logically OR'ed. Note that the file does not have to exist; the
* flags are based on the name only.
*
* @param pathname of a mailfile; it does not have to refer to an
* actual message
*
* @return the flags, or MU_MSG_FILE_FLAG_UNKNOWN in case of error
*/
MuMsgFlags mu_msg_flags_from_file (const char* pathname) G_GNUC_PURE;
/**
* is the message flag a file flag? ie. encoded in the filename
*