static gboolean save_part (MuMsg *msg, const char *targetdir, guint partidx, MuConfig *opts) { GError *err; gchar *filepath; gboolean rv; MuMsgOptions msgopts; err = NULL; rv = FALSE; msgopts = mu_config_get_msg_options (opts); filepath = mu_msg_part_get_path (msg, msgopts, targetdir, partidx, &err); if (!filepath) goto exit; if (!mu_msg_part_save (msg, msgopts, filepath, partidx, &err)) goto exit; if (opts->play) rv = mu_util_play (filepath, TRUE, FALSE, &err); else rv = TRUE; exit: if (err) { g_warning ("error with MIME-part: %s", err->message); g_clear_error (&err); } g_free (filepath); return rv; }
gchar* mu_msg_part_get_cache_path (MuMsg *msg, MuMsgOptions opts, guint partid, GError **err) { char *dirname, *filepath; const char* path; g_return_val_if_fail (msg, NULL); if (!mu_msg_load_msg_file (msg, NULL)) return NULL; path = mu_msg_get_path (msg); /* g_compute_checksum_for_string may be better, but requires * rel. new glib (2.16) */ dirname = g_strdup_printf ("%s%c%x%c%u", mu_util_cache_dir(), G_DIR_SEPARATOR, g_str_hash (path), G_DIR_SEPARATOR, partid); if (!mu_util_create_dir_maybe (dirname, 0700, FALSE)) { mu_util_g_set_error (err, MU_ERROR_FILE, "failed to create dir %s", dirname); g_free (dirname); return NULL; } filepath = mu_msg_part_get_path (msg, opts, dirname, partid, err); g_free (dirname); return filepath; }
static void save_part_if (MuMsg *msg, MuMsgPart *part, SaveData *sd) { gchar *filepath; gboolean rv; GError *err; MuMsgOptions msgopts; if (ignore_part (msg, part, sd)) return; rv = FALSE; filepath = NULL; err = NULL; msgopts = mu_config_get_msg_options (sd->opts); filepath = mu_msg_part_get_path (msg, msgopts, sd->opts->targetdir, part->index, &err); if (!filepath) goto exit; if (!mu_msg_part_save (msg, msgopts, filepath, part->index, &err)) goto exit; if (sd->opts->play) rv = mu_util_play (filepath, TRUE, FALSE, &err); else rv = TRUE; ++sd->saved_num; exit: if (err) g_warning ("error saving MIME part: %s", err->message); g_free (filepath); g_clear_error (&err); sd->result = rv; }