diff options
Diffstat (limited to 'mail/em-utils.c')
-rw-r--r-- | mail/em-utils.c | 215 |
1 files changed, 145 insertions, 70 deletions
diff --git a/mail/em-utils.c b/mail/em-utils.c index 7685e76845..45f54abbcf 100644 --- a/mail/em-utils.c +++ b/mail/em-utils.c @@ -56,7 +56,6 @@ #include <gio/gio.h> -#include "mail-component.h" #include "mail-mt.h" #include "mail-ops.h" #include "mail-tools.h" @@ -69,10 +68,10 @@ #include "e-util/e-util.h" #include "e-util/e-util-private.h" #include "e-util/e-mktemp.h" -#include "libedataserver/e-account-list.h" +#include "e-util/e-account-utils.h" #include "e-util/e-dialog-utils.h" #include "e-util/e-error.h" - +#include "widgets/misc/e-alert-activity.h" #include "em-utils.h" #include "em-composer-utils.h" @@ -80,11 +79,10 @@ #include "em-format-quote.h" #include "em-account-editor.h" #include "e-attachment.h" -#include "e-activity-handler.h" -static void emu_save_part_done (CamelMimePart *part, char *name, int done, void *data); +#include "e-mail-shell-backend.h" -extern struct _CamelSession *session; +static void emu_save_part_done (CamelMimePart *part, char *name, int done, void *data); #define d(x) @@ -194,20 +192,24 @@ druid_destroy_cb (gpointer user_data, GObject *deadbeef) * otherwise. **/ gboolean -em_utils_configure_account (GtkWidget *parent) +em_utils_configure_account (GtkWindow *parent) { EMAccountEditor *emae; + EAccountList *account_list; + + g_return_val_if_fail (GTK_IS_WINDOW (parent), FALSE); emae = em_account_editor_new(NULL, EMAE_DRUID, "org.gnome.evolution.mail.config.accountDruid"); - if (parent != NULL) - e_dialog_set_transient_for((GtkWindow *)emae->editor, parent); + gtk_window_set_transient_for (GTK_WINDOW (emae->editor), parent); g_object_weak_ref((GObject *)emae->editor, (GWeakNotify) druid_destroy_cb, NULL); gtk_widget_show(emae->editor); gtk_grab_add(emae->editor); gtk_main(); - return mail_config_is_configured(); + account_list = e_get_account_list (); + + return (e_list_length ((EList *) account_list) > 0); } /** @@ -224,16 +226,19 @@ em_utils_configure_account (GtkWidget *parent) * or %FALSE otherwise. **/ gboolean -em_utils_check_user_can_send_mail (GtkWidget *parent) +em_utils_check_user_can_send_mail (GtkWindow *parent) { + EAccountList *account_list; EAccount *account; - if (!mail_config_is_configured ()) { + account_list = e_get_account_list (); + + if (e_list_length ((EList *) account_list) == 0) { if (!em_utils_configure_account (parent)) return FALSE; } - if (!(account = mail_config_get_default_account ())) + if (!(account = e_get_default_account ())) return FALSE; /* Check for a transport */ @@ -250,14 +255,18 @@ static GtkWidget *filter_editor = NULL; static void em_filter_editor_response (GtkWidget *dialog, int button, gpointer user_data) { + EShellBackend *shell_backend; EMFilterContext *fc; + shell_backend = E_SHELL_BACKEND (global_mail_shell_backend); + if (button == GTK_RESPONSE_OK) { + const gchar *data_dir; char *user; + data_dir = e_shell_backend_get_data_dir (shell_backend); fc = g_object_get_data ((GObject *) dialog, "context"); - user = g_strdup_printf ("%s/filters.xml", - mail_component_peek_base_directory (mail_component_peek ())); + user = g_strdup_printf ("%s/filters.xml", data_dir); rule_context_save ((RuleContext *) fc, user); g_free (user); } @@ -284,7 +293,8 @@ static EMFilterSource em_filter_source_element_names[] = { void em_utils_edit_filters (GtkWidget *parent) { - const char *base_directory = mail_component_peek_base_directory (mail_component_peek ()); + EShellBackend *shell_backend; + const gchar *data_dir; char *user, *system; EMFilterContext *fc; @@ -293,8 +303,11 @@ em_utils_edit_filters (GtkWidget *parent) return; } + shell_backend = E_SHELL_BACKEND (global_mail_shell_backend); + data_dir = e_shell_backend_get_data_dir (shell_backend); + fc = em_filter_context_new (); - user = g_strdup_printf ("%s/filters.xml", base_directory); + user = g_build_filename (data_dir, "filters.xml", NULL); system = g_build_filename (EVOLUTION_PRIVDATADIR, "filtertypes.xml", NULL); rule_context_load ((RuleContext *) fc, system, user); g_free (user); @@ -385,12 +398,14 @@ emu_save_get_filename_for_part (CamelMimePart *part) * Saves a mime part to disk (prompting the user for filename). **/ void -em_utils_save_part (GtkWidget *parent, const char *prompt, CamelMimePart *part) +em_utils_save_part (GtkWindow *parent, const char *prompt, CamelMimePart *part) { GtkWidget *file_chooser; const gchar *utf8_filename; gchar *uri = NULL, *filename; + g_return_if_fail (parent == NULL || GTK_IS_WINDOW (parent)); + utf8_filename = emu_save_get_filename_for_part (part); filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL); em_filename_make_safe (filename); @@ -500,12 +515,14 @@ get_unique_file_names (GSList *parts) } void -em_utils_save_parts (GtkWidget *parent, const gchar *prompt, GSList *parts) +em_utils_save_parts (GtkWindow *parent, const gchar *prompt, GSList *parts) { GtkWidget *file_chooser; gchar *path_uri; GSList *iter, *file_names, *iter_file; + g_return_if_fail (parent == NULL || GTK_IS_WINDOW (parent)); + file_chooser = e_file_get_save_filesel ( parent, prompt, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); @@ -556,7 +573,7 @@ exit: * Returns %TRUE if saving succeeded, %FALSE otherwise **/ gboolean -em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePart *part) +em_utils_save_part_to_file(GtkWindow *parent, const char *filename, CamelMimePart *part) { int done; char *dirname; @@ -567,7 +584,7 @@ em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePar dirname = g_path_get_dirname(filename); if (g_mkdir_with_parents(dirname, 0777) == -1) { - GtkWidget *w = e_error_new((GtkWindow *)parent, "mail:no-create-path", filename, g_strerror(errno), NULL); + GtkWidget *w = e_error_new(parent, "mail:no-create-path", filename, g_strerror(errno), NULL); g_free(dirname); em_utils_show_error_silent (w); return FALSE; @@ -576,13 +593,13 @@ em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePar if (g_access(filename, F_OK) == 0) { if (g_access(filename, W_OK) != 0) { - e_error_run((GtkWindow *)parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, filename, NULL); + e_error_run(parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, filename, NULL); return FALSE; } } if (g_stat(filename, &st) != -1 && !S_ISREG(st.st_mode)) { - GtkWidget *w = e_error_new((GtkWindow *)parent, "mail:no-write-path-notfile", filename, NULL); + GtkWidget *w = e_error_new(parent, "mail:no-write-path-notfile", filename, NULL); em_utils_show_error_silent (w); return FALSE; } @@ -635,13 +652,14 @@ emu_save_messages_response(GtkWidget *filesel, int response, struct _save_messag * user for filename). **/ void -em_utils_save_messages (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids) +em_utils_save_messages (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids) { struct _save_messages_data *data; GtkWidget *filesel; char *filename = NULL; CamelMessageInfo *info = NULL; + g_return_if_fail (GTK_IS_WINDOW (parent)); g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); @@ -681,7 +699,7 @@ emu_add_address_cb(BonoboListener *listener, const char *name, const CORBA_any * /* one of email or vcard should be always NULL, never both of them */ static void -emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const char *vcard) +emu_add_address_or_vcard (GtkWindow *parent, const char *email, const char *vcard) { GtkWidget *win; GtkWidget *control; @@ -704,14 +722,7 @@ emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const ch win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title((GtkWindow *)win, _("Add address")); - if (parent && !GTK_IS_WINDOW (parent)) { - parent = gtk_widget_get_toplevel (parent); - if (!parent || !(GTK_WIDGET_TOPLEVEL (parent))) - parent = NULL; - } - - if (parent) - gtk_window_set_transient_for((GtkWindow *)win, ((GtkWindow *)parent)); + gtk_window_set_transient_for((GtkWindow *)win, parent); gtk_window_set_position((GtkWindow *)win, GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_type_hint((GtkWindow *)win, GDK_WINDOW_TYPE_HINT_DIALOG); @@ -742,8 +753,10 @@ emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const ch * Add address @email to the addressbook. **/ void -em_utils_add_address (struct _GtkWidget *parent, const char *email) +em_utils_add_address (GtkWindow *parent, const char *email) { + g_return_if_fail (GTK_IS_WINDOW (parent)); + emu_add_address_or_vcard (parent, email, NULL); } @@ -752,8 +765,10 @@ em_utils_add_address (struct _GtkWidget *parent, const char *email) * Adds whole vCard to the addressbook. **/ void -em_utils_add_vcard (struct _GtkWidget *parent, const char *vcard) +em_utils_add_vcard (GtkWindow *parent, const char *vcard) { + g_return_if_fail (GTK_IS_WINDOW (parent)); + emu_add_address_or_vcard (parent, NULL, vcard); } @@ -804,7 +819,7 @@ tag_editor_response (GtkWidget *dialog, int button, struct ted_t *ted) camel_tag_list_free (&tags); if (ted->emfv->preview) - em_format_redraw(ted->emfv->preview); + em_format_redraw (EM_FORMAT (ted->emfv->preview)); } gtk_widget_destroy (dialog); @@ -820,19 +835,18 @@ tag_editor_response (GtkWidget *dialog, int button, struct ted_t *ted) * @folder and @uids. **/ void -em_utils_flag_for_followup (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids) +em_utils_flag_for_followup (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids) { GtkWidget *editor; struct ted_t *ted; int i; + g_return_if_fail (GTK_IS_WINDOW (parent)); g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); editor = (GtkWidget *) message_tag_followup_new (); - - if (parent != NULL) - e_dialog_set_transient_for ((GtkWindow *) editor, parent); + gtk_window_set_transient_for (GTK_WINDOW (editor), parent); camel_object_ref (folder); @@ -884,10 +898,11 @@ em_utils_flag_for_followup (GtkWidget *parent, CamelFolder *folder, GPtrArray *u * @folder and @uids. **/ void -em_utils_flag_for_followup_clear (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids) +em_utils_flag_for_followup_clear (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids) { int i; + g_return_if_fail (GTK_IS_WINDOW (parent)); g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); @@ -918,11 +933,12 @@ em_utils_flag_for_followup_clear (GtkWidget *parent, CamelFolder *folder, GPtrAr * Flag-for-Followup. **/ void -em_utils_flag_for_followup_completed (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids) +em_utils_flag_for_followup_completed (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids) { char *now; int i; + g_return_if_fail (GTK_IS_WINDOW (parent)); g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); @@ -1378,19 +1394,23 @@ em_utils_temp_save_part(GtkWidget *parent, CamelMimePart *part, gboolean mode) gboolean em_utils_folder_is_templates (CamelFolder *folder, const char *uri) { + CamelFolder *local_templates_folder; EAccountList *accounts; EAccount *account; EIterator *iter; int is = FALSE; char *templates_uri; - if (folder == mail_component_get_folder (NULL, MAIL_COMPONENT_FOLDER_TEMPLATES)) + local_templates_folder = e_mail_shell_backend_get_folder ( + global_mail_shell_backend, E_MAIL_FOLDER_TEMPLATES); + + if (folder == local_templates_folder) return TRUE; - if (uri == NULL) + if (folder == NULL || uri == NULL) return FALSE; - accounts = mail_config_get_accounts(); + accounts = e_get_account_list (); iter = e_list_get_iterator ((EList *)accounts); while (e_iterator_is_valid (iter)) { account = (EAccount *)e_iterator_get (iter); @@ -1425,19 +1445,23 @@ em_utils_folder_is_templates (CamelFolder *folder, const char *uri) gboolean em_utils_folder_is_drafts(CamelFolder *folder, const char *uri) { + CamelFolder *local_drafts_folder; EAccountList *accounts; EAccount *account; EIterator *iter; int is = FALSE; char *drafts_uri; - if (folder == mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_DRAFTS)) + local_drafts_folder = e_mail_shell_backend_get_folder ( + global_mail_shell_backend, E_MAIL_FOLDER_DRAFTS); + + if (folder == local_drafts_folder) return TRUE; - if (uri == NULL) + if (folder == NULL || uri == NULL) return FALSE; - accounts = mail_config_get_accounts(); + accounts = e_get_account_list (); iter = e_list_get_iterator((EList *)accounts); while (e_iterator_is_valid(iter)) { account = (EAccount *)e_iterator_get(iter); @@ -1472,19 +1496,23 @@ em_utils_folder_is_drafts(CamelFolder *folder, const char *uri) gboolean em_utils_folder_is_sent(CamelFolder *folder, const char *uri) { + CamelFolder *local_sent_folder; EAccountList *accounts; EAccount *account; EIterator *iter; int is = FALSE; char *sent_uri; - if (folder == mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_SENT)) + local_sent_folder = e_mail_shell_backend_get_folder ( + global_mail_shell_backend, E_MAIL_FOLDER_SENT); + + if (folder == local_sent_folder) return TRUE; - if (uri == NULL) + if (folder == NULL || uri == NULL) return FALSE; - accounts = mail_config_get_accounts(); + accounts = e_get_account_list (); iter = e_list_get_iterator((EList *)accounts); while (e_iterator_is_valid(iter)) { account = (EAccount *)e_iterator_get(iter); @@ -1519,8 +1547,13 @@ em_utils_folder_is_sent(CamelFolder *folder, const char *uri) gboolean em_utils_folder_is_outbox(CamelFolder *folder, const char *uri) { + CamelFolder *local_outbox_folder; + + local_outbox_folder = e_mail_shell_backend_get_folder ( + global_mail_shell_backend, E_MAIL_FOLDER_OUTBOX); + /* <Highlander>There can be only one.</Highlander> */ - return folder == mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_OUTBOX); + return folder == local_outbox_folder; } /** @@ -1619,7 +1652,6 @@ em_utils_part_to_html(CamelMimePart *part, ssize_t *len, EMFormat *source) emfq = em_format_quote_new(NULL, (CamelStream *)mem, 0); ((EMFormat *) emfq)->composer = TRUE; - em_format_set_session((EMFormat *)emfq, session); if (source) { /* copy over things we can, other things are internal, perhaps need different api than 'clone' */ if (source->default_charset) @@ -1669,7 +1701,6 @@ em_utils_message_to_html(CamelMimeMessage *message, const char *credits, guint32 emfq = em_format_quote_new(credits, (CamelStream *)mem, flags); ((EMFormat *) emfq)->composer = TRUE; - em_format_set_session((EMFormat *)emfq, session); if (!source) { GConfClient *gconf; @@ -1743,7 +1774,7 @@ em_utils_empty_trash (GtkWidget *parent) camel_exception_init (&ex); /* expunge all remote stores */ - accounts = mail_config_get_accounts (); + accounts = e_get_account_list (); iter = e_list_get_iterator ((EList *) accounts); while (e_iterator_is_valid (iter)) { account = (EAccount *) e_iterator_get (iter); @@ -1912,7 +1943,7 @@ char *em_uri_to_camel(const char *euri) uid = g_strdup(eurl->host); } - accounts = mail_config_get_accounts(); + accounts = e_get_account_list (); account = e_account_list_find(accounts, E_ACCOUNT_FIND_UID, uid); g_free(uid); @@ -2384,7 +2415,7 @@ em_utils_clear_get_password_canceled_accounts_flag (void) { EAccountList *accounts; - accounts = mail_config_get_accounts (); + accounts = e_get_account_list (); if (accounts) { EIterator *iter; @@ -2405,25 +2436,69 @@ em_utils_clear_get_password_canceled_accounts_flag (void) } -static void error_response(GtkObject *o, int button, void *data) -{ - gtk_widget_destroy((GtkWidget *)o); -} - void em_utils_show_error_silent (GtkWidget *widget) { - EActivityHandler *handler = mail_component_peek_activity_handler (mail_component_peek ()); - if(!g_object_get_data ((GObject *) widget, "response-handled")) - g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL); - e_activity_handler_make_error (handler, "mail", E_LOG_ERROR, widget); + EShellBackend *shell_backend; + EActivity *activity; + + shell_backend = E_SHELL_BACKEND (global_mail_shell_backend); + + activity = e_alert_activity_new_warning (widget); + e_shell_backend_add_activity (shell_backend, activity); + g_object_unref (activity); + + if (g_object_get_data (G_OBJECT (widget), "response-handled") == NULL) + g_signal_connect ( + widget, "response", + G_CALLBACK (gtk_widget_destroy), NULL); } void em_utils_show_info_silent (GtkWidget *widget) { - EActivityHandler *handler = mail_component_peek_activity_handler (mail_component_peek ()); - if(!g_object_get_data ((GObject *) widget, "response-handled")) - g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL); - e_activity_handler_make_error (handler, "mail", E_LOG_WARNINGS, widget); + EShellBackend *shell_backend; + EActivity *activity; + + shell_backend = E_SHELL_BACKEND (global_mail_shell_backend); + + activity = e_alert_activity_new_info (widget); + e_shell_backend_add_activity (shell_backend, activity); + g_object_unref (activity); + + if (g_object_get_data (G_OBJECT (widget), "response-handled") == NULL) + g_signal_connect ( + widget, "response", + G_CALLBACK (gtk_widget_destroy), NULL); +} + +gchar * +em_utils_url_unescape_amp (const gchar *url) +{ + gchar *buff; + int i, j, amps; + + if (!url) + return NULL; + + amps = 0; + for (i = 0; url [i]; i++) { + if (url [i] == '&' && strncmp (url + i, "&", 5) == 0) + amps++; + } + + buff = g_strdup (url); + + if (!amps) + return buff; + + for (i = 0, j = 0; url [i]; i++, j++) { + buff [j] = url [i]; + + if (url [i] == '&' && strncmp (url + i, "&", 5) == 0) + i += 4; + } + buff [j] = 0; + + return buff; } |