aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-tools.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2012-01-18 00:07:19 +0800
committerMatthew Barnes <mbarnes@redhat.com>2012-01-19 12:48:47 +0800
commit61ae36351b24cc676f60483d576706bf827f2987 (patch)
treec55d9e000efd47fa14865fad2defa79b5ed61ffd /mail/mail-tools.c
parent37644b9d257369c5c158121ca4807cafbe844595 (diff)
downloadgsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.gz
gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.zst
gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.zip
Introduce libemail-engine and libemail-utils.
These libraries are bound for E-D-S so they live at the lowest layer of Evolution for now -- even libeutil can link to them (but please don't). This is the first step toward moving mail handing to a D-Bus service.
Diffstat (limited to 'mail/mail-tools.c')
-rw-r--r--mail/mail-tools.c245
1 files changed, 0 insertions, 245 deletions
diff --git a/mail/mail-tools.c b/mail/mail-tools.c
deleted file mode 100644
index 30ac175a18..0000000000
--- a/mail/mail-tools.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * Dan Winship <danw@ximian.com>
- * Peter Williams <peterw@ximian.com>
- * Jeffrey Stedfast <fejj@ximian.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-
-#include <glib/gstdio.h>
-
-#include <glib/gi18n.h>
-
-#include "e-mail-session.h"
-#include "em-utils.h"
-#include "mail-folder-cache.h"
-#include "mail-tools.h"
-
-/* **************************************** */
-
-#ifndef G_OS_WIN32
-
-static gchar *
-mail_tool_get_local_movemail_path (CamelStore *store,
- GError **error)
-{
- const gchar *uid;
- guchar *safe_uid, *c;
- const gchar *data_dir;
- gchar *path, *full;
- struct stat st;
-
- uid = camel_service_get_uid (CAMEL_SERVICE (store));
- safe_uid = (guchar *) g_strdup ((const gchar *) uid);
- for (c = safe_uid; *c; c++)
- if (strchr("/:;=|%&#!*^()\\, ", *c) || !isprint((gint) *c))
- *c = '_';
-
- data_dir = mail_session_get_data_dir ();
- path = g_build_filename (data_dir, "spool", NULL);
-
- if (g_stat (path, &st) == -1 && g_mkdir_with_parents (path, 0700) == -1) {
- g_set_error (
- error, G_FILE_ERROR,
- g_file_error_from_errno (errno),
- _("Could not create spool directory '%s': %s"),
- path, g_strerror (errno));
- g_free (path);
- return NULL;
- }
-
- full = g_strdup_printf("%s/movemail.%s", path, safe_uid);
- g_free (path);
- g_free (safe_uid);
-
- return full;
-}
-
-#endif
-
-gchar *
-mail_tool_do_movemail (CamelStore *store,
- GError **error)
-{
-#ifndef G_OS_WIN32
- CamelService *service;
- CamelProvider *provider;
- CamelSettings *settings;
- const gchar *src_path;
- gchar *dest_path;
- struct stat sb;
- gboolean success;
-
- g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
-
- service = CAMEL_SERVICE (store);
- provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
-
- g_return_val_if_fail (provider != NULL, NULL);
-
- if (g_strcmp0 (provider->protocol, "mbox") != 0) {
- /* This is really only an internal error anyway */
- g_set_error (
- error, CAMEL_SERVICE_ERROR,
- CAMEL_SERVICE_ERROR_URL_INVALID,
- _("Trying to movemail a non-mbox source '%s'"),
- camel_service_get_uid (CAMEL_SERVICE (store)));
- return NULL;
- }
-
- src_path = camel_local_settings_get_path (
- CAMEL_LOCAL_SETTINGS (settings));
-
- /* Set up our destination. */
- dest_path = mail_tool_get_local_movemail_path (store, error);
- if (dest_path == NULL)
- return NULL;
-
- /* Movemail from source to dest_path */
- success = camel_movemail (src_path, dest_path, error) != -1;
-
- if (g_stat (dest_path, &sb) < 0 || sb.st_size == 0) {
- g_unlink (dest_path); /* Clean up the movemail.foo file. */
- g_free (dest_path);
- return NULL;
- }
-
- if (!success) {
- g_free (dest_path);
- return NULL;
- }
-
- return dest_path;
-#else
- /* Unclear yet whether camel-movemail etc makes any sense on
- * Win32, at least it is not ported yet.
- */
- g_warning("%s: Not implemented", __FUNCTION__);
- return NULL;
-#endif
-}
-
-gchar *
-mail_tool_generate_forward_subject (CamelMimeMessage *msg)
-{
- const gchar *subject;
- gchar *fwd_subj;
- const gint max_subject_length = 1024;
-
- subject = camel_mime_message_get_subject (msg);
-
- if (subject && *subject) {
- /* Truncate insanely long subjects */
- if (strlen (subject) < max_subject_length) {
- fwd_subj = g_strdup_printf ("[Fwd: %s]", subject);
- } else {
- /* We can't use %.*s because it depends on the
- * locale being C/POSIX or UTF-8 to work correctly
- * in glibc. */
- fwd_subj = g_malloc (max_subject_length + 11);
- memcpy (fwd_subj, "[Fwd: ", 6);
- memcpy (fwd_subj + 6, subject, max_subject_length);
- memcpy (fwd_subj + 6 + max_subject_length, "...]", 5);
- }
- } else {
- const CamelInternetAddress *from;
- gchar *fromstr;
-
- from = camel_mime_message_get_from (msg);
- if (from) {
- fromstr = camel_address_format (CAMEL_ADDRESS (from));
- fwd_subj = g_strdup_printf ("[Fwd: %s]", fromstr);
- g_free (fromstr);
- } else
- fwd_subj = g_strdup ("[Fwd: No Subject]");
- }
-
- return fwd_subj;
-}
-
-struct _camel_header_raw *
-mail_tool_remove_xevolution_headers (CamelMimeMessage *message)
-{
- struct _camel_header_raw *scan, *list = NULL;
-
- for (scan = ((CamelMimePart *) message)->headers; scan; scan = scan->next)
- if (!strncmp(scan->name, "X-Evolution", 11))
- camel_header_raw_append (&list, scan->name, scan->value, scan->offset);
-
- for (scan = list; scan; scan = scan->next)
- camel_medium_remove_header ((CamelMedium *) message, scan->name);
-
- return list;
-}
-
-void
-mail_tool_restore_xevolution_headers (CamelMimeMessage *message,
- struct _camel_header_raw *xev)
-{
- CamelMedium *medium;
-
- medium = CAMEL_MEDIUM (message);
-
- for (; xev; xev = xev->next)
- camel_medium_add_header (medium, xev->name, xev->value);
-}
-
-CamelMimePart *
-mail_tool_make_message_attachment (CamelMimeMessage *message)
-{
- CamelMimePart *part;
- const gchar *subject;
- struct _camel_header_raw *xev;
- gchar *desc;
-
- subject = camel_mime_message_get_subject (message);
- if (subject)
- desc = g_strdup_printf (_("Forwarded message - %s"), subject);
- else
- desc = g_strdup (_("Forwarded message"));
-
- /* rip off the X-Evolution headers */
- xev = mail_tool_remove_xevolution_headers (message);
- camel_header_raw_clear (&xev);
-
- /* remove Bcc headers */
- camel_medium_remove_header (CAMEL_MEDIUM (message), "Bcc");
-
- part = camel_mime_part_new ();
- camel_mime_part_set_disposition (part, "inline");
- camel_mime_part_set_description (part, desc);
- camel_medium_set_content (
- CAMEL_MEDIUM (part), CAMEL_DATA_WRAPPER (message));
- camel_mime_part_set_content_type (part, "message/rfc822");
- g_free (desc);
-
- return part;
-}