/** * * It dumps attachments to /tmp * **/ void util_attachments_to_files(CamelMimeMessage *message) { gint parts, i = 0; char *store_dir; CamelDataWrapper *content = NULL; content = camel_medium_get_content_object((CamelMedium *) message); if (!content || !CAMEL_IS_MULTIPART(content)) return; parts = camel_multipart_get_number(CAMEL_MULTIPART(content)); if (parts < 1) return; store_dir = "/tmp"; // TODO home for (i = 1; i < parts; i++) { gchar *filename = NULL; gchar *path = NULL; gchar *tmp = NULL; const gchar *orig_filename = NULL; CamelMimePart *mime_part = camel_multipart_get_part(CAMEL_MULTIPART(content), i); orig_filename = camel_mime_part_get_filename(mime_part); g_debug("Orig filename : %s\n", orig_filename); if (orig_filename == NULL) { g_print("Esto es un adjunto distinto."); orig_filename = camel_mime_part_get_description(mime_part); } if (!orig_filename) continue; tmp = clean_name((const guchar *) orig_filename); filename = g_strdup_printf("%s-%s", "evosugar", tmp); path = g_build_filename(store_dir, filename, NULL); g_debug("Attach. to file : %s\n", path); BREAKPOINT; // TODO should be done in another thread if (em_utils_save_part_to_file(NULL, path, mime_part)) { gchar *uri; BREAKPOINT; uri = g_filename_to_uri(path, NULL, NULL); BREAKPOINT; g_free(uri); } BREAKPOINT; g_free(tmp); BREAKPOINT; g_free(filename); BREAKPOINT; g_free(path); BREAKPOINT; } //g_free (store_dir); }
static gboolean save_part(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, void *d) { struct _save_data *data = d; char *filename, *ext, *save; CamelMimePart *part; gboolean doit; /* TODO: check for existing file */ gtk_tree_model_get(model, iter, 0, &doit, -1); if (!doit) return FALSE; gtk_tree_model_get(model, iter, 2, &filename, 3, &ext, 4, &part, -1); if (ext == NULL) save = g_build_filename(data->path, filename, NULL); else save = g_strdup_printf("%s%s", data->base, ext); /* FIXME: if part == data->msg then we need to save this * differently, not using the envelope MimePart */ /* * The underlying em_utils_save_part_to_file ain't using gnome-vfs. Therefor * the POSIX access-call should suffice for checking the file existence. */ if (g_access(save, F_OK) == 0) doit = e_error_run(NULL, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, save, NULL) == GTK_RESPONSE_OK; if (doit) em_utils_save_part_to_file(NULL, save, part); g_free(ext); g_free(filename); return FALSE; }