* refactor msg-sorting a bit
This commit is contained in:
51
src/mu-msg.c
51
src/mu-msg.c
@ -598,25 +598,54 @@ mu_msg_contact_foreach (MuMsg *msg, MuMsgContactForeachFunc func,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
cmp_str (const char* s1, const char *s2)
|
||||
{
|
||||
if (s1 == s2)
|
||||
return 0;
|
||||
else if (!s1)
|
||||
return -1;
|
||||
else if (!s2)
|
||||
return 1;
|
||||
|
||||
return g_utf8_collate (s1, s2);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
cmp_subject (const char* s1, const char *s2)
|
||||
{
|
||||
if (s1 == s2)
|
||||
return 0;
|
||||
else if (!s1)
|
||||
return -1;
|
||||
else if (!s2)
|
||||
return 1;
|
||||
|
||||
return g_utf8_collate (
|
||||
mu_str_subject_normalize (s1),
|
||||
mu_str_subject_normalize (s2));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
mu_msg_cmp (MuMsg *m1, MuMsg *m2, MuMsgFieldId mfid)
|
||||
{
|
||||
GCompareDataFunc func;
|
||||
|
||||
g_return_val_if_fail (m1, 0);
|
||||
g_return_val_if_fail (m2, 0);
|
||||
g_return_val_if_fail (mu_msg_field_id_is_valid(mfid), 0);
|
||||
|
||||
func = mu_msg_field_cmp_func (mfid);
|
||||
|
||||
if (mfid == MU_MSG_FIELD_ID_SUBJECT)
|
||||
return cmp_subject (get_str_field (m1, mfid),
|
||||
get_str_field (m2, mfid));
|
||||
|
||||
if (mu_msg_field_is_string (mfid))
|
||||
return func (get_str_field (m1, mfid),
|
||||
get_str_field (m2, mfid), NULL);
|
||||
/* TODO: special-case 64-bit nums */
|
||||
else if (mu_msg_field_is_numeric (mfid))
|
||||
return func (GUINT_TO_POINTER((guint)get_num_field(m1, mfid)),
|
||||
GUINT_TO_POINTER((guint)get_num_field(m2, mfid)),
|
||||
NULL);
|
||||
return cmp_str (get_str_field (m1, mfid),
|
||||
get_str_field (m2, mfid));
|
||||
|
||||
/* TODO: note, we cast (potentially > MAXINT to int) */
|
||||
if (mu_msg_field_is_numeric (mfid))
|
||||
return get_num_field(m1, mfid) - get_num_field(m2, mfid);
|
||||
|
||||
return 0; /* TODO: handle lists */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user