* mu-msg.c / test-mu-msg.c: improve attachment detection
This commit is contained in:
38
src/mu-msg.c
38
src/mu-msg.c
@ -231,11 +231,12 @@ get_recipient (MuMsg *msg, GMimeRecipientType rtype, StringFields field)
|
|||||||
|
|
||||||
char *recep;
|
char *recep;
|
||||||
InternetAddressList *receps;
|
InternetAddressList *receps;
|
||||||
receps = g_mime_message_get_recipients (msg->_mime_msg, rtype);
|
receps = g_mime_message_get_recipients (msg->_mime_msg,
|
||||||
|
rtype);
|
||||||
/* FIXME: is there an internal leak in
|
/* FIXME: is there an internal leak in
|
||||||
* internet_address_list_to_string? */
|
* internet_address_list_to_string? */
|
||||||
recep = (char*)internet_address_list_to_string (receps, TRUE);
|
recep = (char*)internet_address_list_to_string (receps,
|
||||||
|
TRUE);
|
||||||
if (recep && recep[0]=='\0')
|
if (recep && recep[0]=='\0')
|
||||||
g_free (recep);
|
g_free (recep);
|
||||||
else
|
else
|
||||||
@ -275,21 +276,33 @@ mu_msg_get_date (MuMsg *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
part_is_inline (GMimeObject *part)
|
part_looks_like_attachment (GMimeObject *part)
|
||||||
{
|
{
|
||||||
GMimeContentDisposition *disp;
|
GMimeContentDisposition *disp;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
disp = g_mime_object_get_content_disposition (part);
|
disp = g_mime_object_get_content_disposition (part);
|
||||||
if (!GMIME_IS_CONTENT_DISPOSITION(disp))
|
if (!GMIME_IS_CONTENT_DISPOSITION(disp))
|
||||||
return TRUE;
|
return FALSE; /* no content disp? prob not
|
||||||
|
* an attachment. */
|
||||||
|
|
||||||
str = g_mime_content_disposition_get_disposition (disp);
|
str = g_mime_content_disposition_get_disposition (disp);
|
||||||
|
|
||||||
if (str && (strcmp (str, GMIME_DISPOSITION_ATTACHMENT) == 0))
|
/* ok, it says it's an attachment, so it probably is... */
|
||||||
return FALSE;
|
if (!str)
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
if (strcmp (str, GMIME_DISPOSITION_ATTACHMENT) == 0)
|
||||||
|
return TRUE;
|
||||||
|
else if (strcmp (str, GMIME_DISPOSITION_INLINE) == 0) {
|
||||||
|
/* inline-images are also considered attachments... */
|
||||||
|
GMimeContentType *ct;
|
||||||
|
ct = g_mime_object_get_content_type (part);
|
||||||
|
if (ct)
|
||||||
|
return g_mime_content_type_is_type
|
||||||
|
(ct, "image", "*");
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -302,7 +315,7 @@ msg_cflags_cb (GMimeObject *parent, GMimeObject *part, MuMsgFlags *flags)
|
|||||||
if (!GMIME_IS_PART(part))
|
if (!GMIME_IS_PART(part))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!part_is_inline(part))
|
if (part_looks_like_attachment(part))
|
||||||
*flags |= MU_MSG_FLAG_HAS_ATTACH;
|
*flags |= MU_MSG_FLAG_HAS_ATTACH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,9 +348,11 @@ get_content_flags (MuMsg *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ctype) {
|
if (ctype) {
|
||||||
if (g_mime_content_type_is_type (ctype,"*", "signed"))
|
if (g_mime_content_type_is_type
|
||||||
|
(ctype,"*", "signed"))
|
||||||
flags |= MU_MSG_FLAG_SIGNED;
|
flags |= MU_MSG_FLAG_SIGNED;
|
||||||
if (g_mime_content_type_is_type (ctype,"*", "encrypted"))
|
if (g_mime_content_type_is_type
|
||||||
|
(ctype,"*", "encrypted"))
|
||||||
flags |= MU_MSG_FLAG_ENCRYPTED;
|
flags |= MU_MSG_FLAG_ENCRYPTED;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
@ -353,7 +368,6 @@ mu_msg_get_flags (MuMsg *msg)
|
|||||||
g_return_val_if_fail (msg, MU_MSG_FLAG_NONE);
|
g_return_val_if_fail (msg, MU_MSG_FLAG_NONE);
|
||||||
|
|
||||||
if (msg->_flags == MU_MSG_FLAG_NONE) {
|
if (msg->_flags == MU_MSG_FLAG_NONE) {
|
||||||
msg->_flags = 0;
|
|
||||||
msg->_flags = mu_msg_flags_from_file (mu_msg_get_path(msg));
|
msg->_flags = mu_msg_flags_from_file (mu_msg_get_path(msg));
|
||||||
msg->_flags |= get_content_flags (msg);
|
msg->_flags |= get_content_flags (msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -145,10 +145,14 @@ test_mu_msg_02 (void)
|
|||||||
==, 1218051515);
|
==, 1218051515);
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
mu_msg_contact_foreach (msg, (MuMsgContactForeachFunc)check_contact_02,
|
mu_msg_contact_foreach (msg,
|
||||||
|
(MuMsgContactForeachFunc)check_contact_02,
|
||||||
&i);
|
&i);
|
||||||
g_assert_cmpint (i,==,2);
|
g_assert_cmpint (i,==,2);
|
||||||
|
|
||||||
|
g_assert_cmpuint (mu_msg_get_flags(msg),
|
||||||
|
==, MU_MSG_FLAG_SEEN);
|
||||||
|
|
||||||
mu_msg_destroy (msg);
|
mu_msg_destroy (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,10 +178,41 @@ test_mu_msg_03 (void)
|
|||||||
==,
|
==,
|
||||||
"\nLet's write some fünkÿ text\nusing umlauts.\n\nFoo.\n");
|
"\nLet's write some fünkÿ text\nusing umlauts.\n\nFoo.\n");
|
||||||
|
|
||||||
|
g_assert_cmpuint (mu_msg_get_flags(msg),
|
||||||
|
==, 0);
|
||||||
|
|
||||||
|
|
||||||
mu_msg_destroy (msg);
|
mu_msg_destroy (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_mu_msg_04 (void)
|
||||||
|
{
|
||||||
|
MuMsg *msg;
|
||||||
|
|
||||||
|
msg = mu_msg_new (MU_TESTMAILDIR2
|
||||||
|
"Foo/cur/mail4", NULL);
|
||||||
|
|
||||||
|
g_assert_cmpstr (mu_msg_get_to(msg),
|
||||||
|
==, "George Custer <gac@example.com>");
|
||||||
|
g_assert_cmpstr (mu_msg_get_subject(msg),
|
||||||
|
==, "pics for you");
|
||||||
|
g_assert_cmpstr (mu_msg_get_from(msg),
|
||||||
|
==, "Sitting Bull <sb@example.com>");
|
||||||
|
g_assert_cmpuint (mu_msg_get_prio(msg), /* 'low' */
|
||||||
|
==, MU_MSG_PRIO_NORMAL);
|
||||||
|
g_assert_cmpuint (mu_msg_get_date(msg),
|
||||||
|
==, 0);
|
||||||
|
|
||||||
|
g_assert_cmpuint (mu_msg_get_flags(msg),
|
||||||
|
==, MU_MSG_FLAG_HAS_ATTACH);
|
||||||
|
|
||||||
|
mu_msg_destroy (msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* static gboolean */
|
/* static gboolean */
|
||||||
/* ignore_error (const char* log_domain, GLogLevelFlags log_level, const gchar* msg, */
|
/* ignore_error (const char* log_domain, GLogLevelFlags log_level, const gchar* msg, */
|
||||||
/* gpointer user_data) */
|
/* gpointer user_data) */
|
||||||
@ -199,6 +234,8 @@ main (int argc, char *argv[])
|
|||||||
test_mu_msg_02);
|
test_mu_msg_02);
|
||||||
g_test_add_func ("/mu-msg/mu-msg-03",
|
g_test_add_func ("/mu-msg/mu-msg-03",
|
||||||
test_mu_msg_03);
|
test_mu_msg_03);
|
||||||
|
g_test_add_func ("/mu-msg/mu-msg-04",
|
||||||
|
test_mu_msg_04);
|
||||||
|
|
||||||
g_log_set_handler (NULL,
|
g_log_set_handler (NULL,
|
||||||
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION,
|
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION,
|
||||||
|
|||||||
Reference in New Issue
Block a user