char * mail_tool_do_movemail (const char *source_url, CamelException *ex) { #ifndef G_OS_WIN32 char *dest_path; struct stat sb; CamelURL *uri; uri = camel_url_new(source_url, ex); if (uri == NULL) return NULL; if (strcmp(uri->protocol, "mbox") != 0) { /* This is really only an internal error anyway */ camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID, _("Trying to movemail a non-mbox source `%s'"), source_url); camel_url_free(uri); return NULL; } /* Set up our destination. */ dest_path = mail_tool_get_local_movemail_path ((unsigned char *)source_url, ex); if (dest_path == NULL) return NULL; /* Movemail from source (source_url) to dest_path */ camel_movemail (uri->path, dest_path, ex); camel_url_free(uri); 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 (camel_exception_is_set (ex)) { 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_do_movemail (CamelStore *store, GError **error) { #ifndef G_OS_WIN32 CamelService *service; CamelProvider *provider; CamelSettings *settings; 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); 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; } settings = camel_service_ref_settings (service); src_path = camel_local_settings_dup_path ( CAMEL_LOCAL_SETTINGS (settings)); g_object_unref (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; g_free (src_path); 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 }