* mu-guile-message.c: use mu_msg_part_save_temp, rename some symbols

This commit is contained in:
djcb 2012-01-15 14:37:30 +02:00
parent 3b07a328a5
commit 799e3e150a
1 changed files with 46 additions and 57 deletions

View File

@ -359,7 +359,7 @@ SCM_DEFINE_PUBLIC (get_contacts, "mu:get-contacts", 2, 0, 0,
struct _AttInfo { struct _AttInfo {
SCM attlist; SCM attlist;
gboolean files_only; gboolean attachments_only;
}; };
typedef struct _AttInfo AttInfo; typedef struct _AttInfo AttInfo;
@ -371,7 +371,8 @@ each_part (MuMsg *msg, MuMsgPart *part, AttInfo *attinfo)
if (!part->type) if (!part->type)
return; return;
if (attinfo->files_only && !part->file_name) if (attinfo->attachments_only &&
!mu_msg_part_looks_like_attachment (part, TRUE))
return; return;
mime_type = g_strdup_printf ("%s/%s", part->type, part->subtype); mime_type = g_strdup_printf ("%s/%s", part->type, part->subtype);
@ -401,20 +402,20 @@ each_part (MuMsg *msg, MuMsgPart *part, AttInfo *attinfo)
SCM_DEFINE_PUBLIC (get_parts, "mu:get-parts", 1, 1, 0, SCM_DEFINE_PUBLIC (get_parts, "mu:get-parts", 1, 1, 0,
(SCM MSG, SCM FILES_ONLY), (SCM MSG, SCM ATTS_ONLY),
"Get the list of mime-parts for MSG. If FILES_ONLY is #t, only" "Get the list of mime-parts for MSG. If ATTS_ONLY is #t, only"
"get parts that file names. The resulting list has elements " "get parts that are (look like) attachments. The resulting list has "
"which are list of the form (index name mime-type size).\n") "elements which are list of the form (index name mime-type size).\n")
#define FUNC_NAME s_get_parts #define FUNC_NAME s_get_parts
{ {
MuMsgWrapper *msgwrap; MuMsgWrapper *msgwrap;
AttInfo attinfo; AttInfo attinfo;
SCM_ASSERT (mu_guile_scm_is_msg(MSG), MSG, SCM_ARG1, FUNC_NAME); SCM_ASSERT (mu_guile_scm_is_msg(MSG), MSG, SCM_ARG1, FUNC_NAME);
SCM_ASSERT (scm_is_bool(FILES_ONLY), FILES_ONLY,SCM_ARG2, FUNC_NAME); SCM_ASSERT (scm_is_bool(ATTS_ONLY), ATTS_ONLY, SCM_ARG2, FUNC_NAME);
attinfo.attlist = SCM_EOL; /* empty list */ attinfo.attlist = SCM_EOL; /* empty list */
attinfo.files_only = FILES_ONLY == SCM_BOOL_T ? TRUE : FALSE; attinfo.attachments_only = ATTS_ONLY == SCM_BOOL_T ? TRUE : FALSE;
msgwrap = (MuMsgWrapper*) SCM_CDR(MSG); msgwrap = (MuMsgWrapper*) SCM_CDR(MSG);
mu_msg_part_foreach (msgwrap->_msg, mu_msg_part_foreach (msgwrap->_msg,
@ -436,10 +437,9 @@ SCM_DEFINE_PUBLIC (save_part, "mu:save-part", 2, 0, 0,
#define FUNC_NAME s_save_part #define FUNC_NAME s_save_part
{ {
GError *err; GError *err;
gchar *filepath, *msgpath; gchar *attachpath, *msgpath;
unsigned index; unsigned index;
MuMsg *msg; MuMsg *msg;
gboolean rv;
SCM rv_scm; SCM rv_scm;
SCM_ASSERT (scm_is_string(MSGPATH), MSGPATH, SCM_ARG1, FUNC_NAME); SCM_ASSERT (scm_is_string(MSGPATH), MSGPATH, SCM_ARG1, FUNC_NAME);
@ -456,30 +456,19 @@ SCM_DEFINE_PUBLIC (save_part, "mu:save-part", 2, 0, 0,
goto leave; goto leave;
} }
filepath = mu_msg_part_filepath_cache (msg, index); attachpath = mu_msg_part_save_temp (msg, index, &err);
if (!filepath) { if (!attachpath) {
rv_scm = mu_guile_error (FUNC_NAME, 0, "could not get filepath", rv_scm = mu_guile_g_error (FUNC_NAME, err);
SCM_UNSPECIFIED);
goto leave; goto leave;
} }
rv = mu_msg_part_save (msg, filepath, index, FALSE, TRUE, &err); rv_scm = mu_guile_scm_from_str (attachpath);
if (!rv) {
rv_scm = err ? mu_guile_g_error (FUNC_NAME, err) :
mu_guile_error (FUNC_NAME, 0, "could not save part",
SCM_UNSPECIFIED);
goto leave;
}
rv_scm = mu_guile_scm_from_str (filepath);
leave: leave:
mu_msg_unref (msg); mu_msg_unref (msg);
g_clear_error (&err); g_clear_error (&err);
g_free (filepath);
free (msgpath);
g_free (attachpath);
return rv_scm; return rv_scm;
} }
#undef FUNC_NAME #undef FUNC_NAME
@ -519,38 +508,38 @@ static struct {
unsigned val; unsigned val;
} SYMPAIRS[] = { } SYMPAIRS[] = {
{ "mu:high", MU_MSG_PRIO_HIGH }, { "mu:prio:high", MU_MSG_PRIO_HIGH },
{ "mu:low", MU_MSG_PRIO_LOW }, { "mu:prio:low", MU_MSG_PRIO_LOW },
{ "mu:normal", MU_MSG_PRIO_NORMAL }, { "mu:prio:normal", MU_MSG_PRIO_NORMAL },
{ "mu:new", MU_FLAG_NEW }, { "mu:flag:new", MU_FLAG_NEW },
{ "mu:passed", MU_FLAG_PASSED }, { "mu:flag:passed", MU_FLAG_PASSED },
{ "mu:replied", MU_FLAG_REPLIED }, { "mu:flag:replied", MU_FLAG_REPLIED },
{ "mu:seen", MU_FLAG_SEEN }, { "mu:flag:seen", MU_FLAG_SEEN },
{ "mu:trashed", MU_FLAG_TRASHED }, { "mu:flag:trashed", MU_FLAG_TRASHED },
{ "mu:draft", MU_FLAG_DRAFT }, { "mu:flag:draft", MU_FLAG_DRAFT },
{ "mu:flagged", MU_FLAG_FLAGGED }, { "mu:flag:flagged", MU_FLAG_FLAGGED },
{ "mu:signed", MU_FLAG_SIGNED }, { "mu:flag:signed", MU_FLAG_SIGNED },
{ "mu:encrypted", MU_FLAG_ENCRYPTED }, { "mu:flag:encrypted", MU_FLAG_ENCRYPTED },
{ "mu:has-attach", MU_FLAG_HAS_ATTACH }, { "mu:flag:has-attach", MU_FLAG_HAS_ATTACH },
{ "mu:unread", MU_FLAG_UNREAD }, { "mu:flag:unread", MU_FLAG_UNREAD },
{ "mu:bcc", MU_MSG_FIELD_ID_BCC }, { "mu:field:bcc", MU_MSG_FIELD_ID_BCC },
{ "mu:body-html", MU_MSG_FIELD_ID_BODY_HTML }, { "mu:field:body-html", MU_MSG_FIELD_ID_BODY_HTML },
{ "mu:body-txt", MU_MSG_FIELD_ID_BODY_TEXT }, { "mu:field:body-txt", MU_MSG_FIELD_ID_BODY_TEXT },
{ "mu:cc", MU_MSG_FIELD_ID_CC }, { "mu:field:cc", MU_MSG_FIELD_ID_CC },
{ "mu:date", MU_MSG_FIELD_ID_DATE }, { "mu:field:date", MU_MSG_FIELD_ID_DATE },
{ "mu:flags", MU_MSG_FIELD_ID_FLAGS }, { "mu:field:flags", MU_MSG_FIELD_ID_FLAGS },
{ "mu:from", MU_MSG_FIELD_ID_FROM }, { "mu:field:from", MU_MSG_FIELD_ID_FROM },
{ "mu:maildir", MU_MSG_FIELD_ID_MAILDIR }, { "mu:field:maildir", MU_MSG_FIELD_ID_MAILDIR },
{ "mu:message-id", MU_MSG_FIELD_ID_MSGID }, { "mu:field:message-id",MU_MSG_FIELD_ID_MSGID },
{ "mu:path", MU_MSG_FIELD_ID_PATH }, { "mu:field:path", MU_MSG_FIELD_ID_PATH },
{ "mu:prio", MU_MSG_FIELD_ID_PRIO }, { "mu:field:prio", MU_MSG_FIELD_ID_PRIO },
{ "mu:refs", MU_MSG_FIELD_ID_REFS }, { "mu:field:refs", MU_MSG_FIELD_ID_REFS },
{ "mu:size", MU_MSG_FIELD_ID_SIZE }, { "mu:field:size", MU_MSG_FIELD_ID_SIZE },
{ "mu:subject", MU_MSG_FIELD_ID_SUBJECT }, { "mu:field:subject", MU_MSG_FIELD_ID_SUBJECT },
{ "mu:tags", MU_MSG_FIELD_ID_TAGS }, { "mu:field:tags", MU_MSG_FIELD_ID_TAGS },
{ "mu:to", MU_MSG_FIELD_ID_TO }, { "mu:field:to", MU_MSG_FIELD_ID_TO },
}; };