diff options
Diffstat (limited to 'mail/em-composer-utils.c')
-rw-r--r-- | mail/em-composer-utils.c | 474 |
1 files changed, 237 insertions, 237 deletions
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index ab3e6c7812..580c9650f9 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -70,10 +70,10 @@ static EAccount * guess_account (CamelMimeMessage *message, CamelFolder *folder) struct emcs_t { unsigned int ref_count; - + CamelFolder *drafts_folder; char *drafts_uid; - + CamelFolder *folder; guint32 flags, set; char *uid; @@ -83,7 +83,7 @@ static struct emcs_t * emcs_new (void) { struct emcs_t *emcs; - + emcs = g_new (struct emcs_t, 1); emcs->ref_count = 1; emcs->drafts_folder = NULL; @@ -92,7 +92,7 @@ emcs_new (void) emcs->flags = 0; emcs->set = 0; emcs->uid = NULL; - + return emcs; } @@ -102,7 +102,7 @@ free_emcs (struct emcs_t *emcs) if (emcs->drafts_folder) camel_object_unref (emcs->drafts_folder); g_free (emcs->drafts_uid); - + if (emcs->folder) camel_object_unref (emcs->folder); g_free (emcs->uid); @@ -135,14 +135,14 @@ ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recip gboolean res; GString *str; int i; - + str = g_string_new(""); for (i = 0; recipients[i] != NULL; ++i) { if (!e_destination_get_html_mail_pref (recipients[i])) { const char *name; - + name = e_destination_get_textrep (recipients[i], FALSE); - + g_string_append_printf (str, " %s\n", name); } } @@ -173,7 +173,7 @@ ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case) realizing it. To try to avoid being totally confusing, I've changed this dialog to provide slightly different text in that case, to better explain what the hell is going on. */ - + return em_utils_prompt_user((GtkWindow *)composer, "/apps/evolution/mail/prompts/only_bcc", hidden_list_case?"mail:ask-send-only-bcc-contact":"mail:ask-send-only-bcc", NULL); } @@ -190,9 +190,9 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag { struct emcs_t *emcs; struct _send_data *send = data; - + emcs = send->emcs; - + if (queued) { if (emcs && emcs->drafts_folder) { /* delete the old draft message */ @@ -204,7 +204,7 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag g_free (emcs->drafts_uid); emcs->drafts_uid = NULL; } - + if (emcs && emcs->folder) { /* set any replied flags etc */ camel_folder_set_message_flags (emcs->folder, emcs->uid, emcs->flags, emcs->set); @@ -214,9 +214,9 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag g_free (emcs->uid); emcs->uid = NULL; } - + gtk_widget_destroy (GTK_WIDGET (send->composer)); - + if (send->send && camel_session_is_online (session)) { /* queue a message send */ mail_send (); @@ -228,20 +228,20 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag 0, NULL, em_utils_composer_send_cb, NULL); g_signal_handlers_disconnect_matched (send->composer, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, em_utils_composer_save_draft_cb, NULL); - + /* reconnect to the signals using a non-NULL emcs for the callback data */ em_composer_utils_setup_default_callbacks (send->composer); } - + e_msg_composer_set_enable_autosave (send->composer, TRUE); gtk_widget_show (GTK_WIDGET (send->composer)); } - + camel_message_info_free (info); - + if (send->emcs) emcs_unref (send->emcs); - + g_object_unref (send->composer); g_free (send); } @@ -262,23 +262,23 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data) GList *postlist; EMEvent *eme; EMEventTargetComposer *target; - + gconf = mail_config_get_gconf_client (); - + /* We should do all of the validity checks based on the composer, and not on the created message, as extra interaction may occur when we get the message (e.g. to get a passphrase to sign a message) */ - + /* get the message recipients */ recipients = e_msg_composer_get_recipients (composer); - + cia = camel_internet_address_new (); - + /* see which ones are visible/present, etc */ if (recipients) { for (i = 0; recipients[i] != NULL; i++) { const char *addr = e_destination_get_address (recipients[i]); - + if (addr && addr[0]) { camel_address_decode ((CamelAddress *) cia, addr); if (camel_address_length ((CamelAddress *) cia) > 0) { @@ -294,12 +294,12 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data) } } } - + recipients_bcc = e_msg_composer_get_bcc (composer); if (recipients_bcc) { for (i = 0; recipients_bcc[i] != NULL; i++) { const char *addr = e_destination_get_address (recipients_bcc[i]); - + if (addr && addr[0]) { camel_address_decode ((CamelAddress *) cia, addr); if (camel_address_length ((CamelAddress *) cia) > 0) { @@ -308,65 +308,65 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data) } } } - + e_destination_freev (recipients_bcc); } - + camel_object_unref (cia); postlist = e_msg_composer_hdrs_get_post_to(e_msg_composer_get_hdrs (composer)); num_post = g_list_length(postlist); g_list_foreach(postlist, (GFunc)g_free, NULL); g_list_free(postlist); - + /* I'm sensing a lack of love, er, I mean recipients. */ if (num == 0 && num_post == 0) { e_error_run((GtkWindow *)composer, "mail:send-no-recipients", NULL); goto finished; } - + if (num > 0 && (num == num_bcc || shown == 0)) { - /* this means that the only recipients are Bcc's */ + /* this means that the only recipients are Bcc's */ if (!ask_confirm_for_only_bcc (composer, shown == 0)) goto finished; } - + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); confirm_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL); - + /* Only show this warning if our default is to send html. If it isn't, we've manually switched into html mode in the composer and (presumably) had a good reason for doing this. */ if (e_msg_composer_get_send_html (composer) && send_html && confirm_html) { gboolean html_problem = FALSE; - + if (recipients) { for (i = 0; recipients[i] != NULL && !html_problem; i++) { if (!e_destination_get_html_mail_pref (recipients[i])) html_problem = TRUE; } } - + if (html_problem) { html_problem = !ask_confirm_for_unwanted_html_mail (composer, recipients); if (html_problem) goto finished; } } - + /* Check for no subject */ subject = e_msg_composer_get_subject (composer); if (subject == NULL || subject[0] == '\0') { if (!ask_confirm_for_empty_subject (composer)) goto finished; } - + /** @Event: composer.presendchecks * @Title: Composer PreSend Checks * @Target: EMEventTargetMessage - * + * * composer.presendchecks is emitted during pre-checks for the message just before sending. - * Since the e-plugin framework doesn't provide a way to return a value from the plugin, + * Since the e-plugin framework doesn't provide a way to return a value from the plugin, * use 'presend_check_status' to set whether the check passed / failed. */ eme = em_event_peek(); @@ -382,10 +382,10 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data) message = e_msg_composer_get_message (composer, save_html_object_data); if (message == NULL) goto finished; - + /* Add info about the sending account */ account = e_msg_composer_get_preferred_account (composer); - + if (account) { /* FIXME: Why isn't this crap just in e_msg_composer_get_message? */ camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Account", account->uid); @@ -393,18 +393,18 @@ composer_get_message (EMsgComposer *composer, gboolean save_html_object_data) camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Fcc", account->sent_folder_uri); if (account->id->organization && *account->id->organization) { char *org; - + org = camel_header_encode_string ((const unsigned char *)account->id->organization); camel_medium_set_header (CAMEL_MEDIUM (message), "Organization", org); g_free (org); } } - + finished: - + if (recipients) e_destination_freev (recipients); - + return message; } @@ -428,11 +428,11 @@ em_utils_composer_send_cb (EMsgComposer *composer, gpointer user_data) mail_folder = mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_OUTBOX); camel_object_ref (mail_folder); - + /* mail the message */ info = camel_message_info_new(NULL); camel_message_info_set_flags(info, CAMEL_MESSAGE_SEEN, ~0); - + send = g_malloc (sizeof (*send)); send->emcs = user_data; if (send->emcs) @@ -443,7 +443,7 @@ em_utils_composer_send_cb (EMsgComposer *composer, gpointer user_data) gtk_widget_hide (GTK_WIDGET (composer)); e_msg_composer_set_enable_autosave (composer, FALSE); - + mail_append_mail (mail_folder, message, info, composer_send_queued_cb, send); camel_object_unref (mail_folder); camel_object_unref (message); @@ -462,23 +462,23 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i { struct _save_draft_info *sdi = user_data; struct emcs_t *emcs; - + if (!ok) goto done; e_msg_composer_set_saved (sdi->composer); - + if ((emcs = sdi->emcs) == NULL) { emcs = emcs_new (); - + /* disconnect the previous signal handlers */ g_signal_handlers_disconnect_by_func (sdi->composer, G_CALLBACK (em_utils_composer_send_cb), NULL); g_signal_handlers_disconnect_by_func (sdi->composer, G_CALLBACK (em_utils_composer_save_draft_cb), NULL); - + /* reconnect to the signals using a non-NULL emcs for the callback data */ em_composer_utils_setup_default_callbacks (sdi->composer); } - + if (emcs->drafts_folder) { /* delete the original draft message */ camel_folder_set_message_flags (emcs->drafts_folder, emcs->drafts_uid, @@ -489,7 +489,7 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i g_free (emcs->drafts_uid); emcs->drafts_uid = NULL; } - + if (emcs->folder) { /* set the replied flags etc */ camel_folder_set_message_flags (emcs->folder, emcs->uid, emcs->flags, emcs->set); @@ -498,16 +498,16 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i g_free (emcs->uid); emcs->uid = NULL; } - + if (appended_uid) { camel_object_ref (folder); emcs->drafts_folder = folder; emcs->drafts_uid = g_strdup (appended_uid); } - + if (sdi->quit) gtk_widget_destroy (GTK_WIDGET (sdi->composer)); - + done: g_object_unref (sdi->composer); if (sdi->emcs) @@ -520,7 +520,7 @@ static void save_draft_folder (char *uri, CamelFolder *folder, gpointer data) { CamelFolder **save = data; - + if (folder) { *save = folder; camel_object_ref (folder); @@ -556,10 +556,10 @@ em_utils_composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer user if (account && account->drafts_folder_uri && strcmp (account->drafts_folder_uri, default_drafts_folder_uri) != 0) { int id; - + id = mail_get_folder (account->drafts_folder_uri, 0, save_draft_folder, &folder, mail_thread_new); mail_msg_wait (id); - + if (!folder || !account->enabled) { if (e_error_run((GtkWindow *)composer, "mail:ask-default-drafts", NULL) != GTK_RESPONSE_YES) { g_object_unref(composer); @@ -569,7 +569,7 @@ em_utils_composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer user g_free(sdi); return; } - + folder = drafts_folder; camel_object_ref (drafts_folder); } @@ -577,7 +577,7 @@ em_utils_composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer user folder = drafts_folder; camel_object_ref (folder); } - + info = camel_message_info_new(NULL); camel_message_info_set_flags(info, CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_SEEN, ~0); @@ -591,9 +591,9 @@ em_composer_utils_setup_callbacks (EMsgComposer *composer, CamelFolder *folder, guint32 flags, guint32 set, CamelFolder *drafts, const char *drafts_uid) { struct emcs_t *emcs; - + emcs = emcs_new (); - + if (folder && uid) { camel_object_ref (folder); emcs->folder = folder; @@ -601,16 +601,16 @@ em_composer_utils_setup_callbacks (EMsgComposer *composer, CamelFolder *folder, emcs->flags = flags; emcs->set = set; } - + if (drafts && drafts_uid) { camel_object_ref (drafts); emcs->drafts_folder = drafts; emcs->drafts_uid = g_strdup (drafts_uid); } - + g_signal_connect (composer, "send", G_CALLBACK (em_utils_composer_send_cb), emcs); g_signal_connect (composer, "save-draft", G_CALLBACK (em_utils_composer_save_draft_cb), emcs); - + g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, emcs); } @@ -677,12 +677,12 @@ em_utils_compose_new_message_with_mailto (const char *url, const char *fromuri) { EMsgComposer *composer; EAccount *account = NULL; - + if (url != NULL) composer = e_msg_composer_new_from_url (url); else composer = e_msg_composer_new (); - + em_composer_utils_setup_default_callbacks (composer); if (fromuri @@ -691,7 +691,7 @@ em_utils_compose_new_message_with_mailto (const char *url, const char *fromuri) e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show ((GtkWidget *) composer); gdk_window_raise (((GtkWidget *) composer)->window); } @@ -709,28 +709,28 @@ em_utils_post_to_folder (CamelFolder *folder) { EMsgComposer *composer; EAccount *account; - + composer = e_msg_composer_new_with_type (E_MSG_COMPOSER_POST); - + if (folder != NULL) { char *url = mail_tools_folder_to_url (folder); - + e_msg_composer_hdrs_set_post_to (e_msg_composer_get_hdrs (composer), url); g_free (url); - + url = camel_url_to_string (CAMEL_SERVICE (folder->parent_store)->url, CAMEL_URL_HIDE_ALL); account = mail_config_get_account_by_source_url (url); g_free (url); - + if (account) e_msg_composer_hdrs_set_from_account (e_msg_composer_get_hdrs(composer), account->name); } - + em_composer_utils_setup_default_callbacks (composer); - + e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show ((GtkWidget *) composer); } @@ -746,17 +746,17 @@ void em_utils_post_to_url (const char *url) { EMsgComposer *composer; - + composer = e_msg_composer_new_with_type (E_MSG_COMPOSER_POST); - + if (url != NULL) e_msg_composer_hdrs_set_post_to (e_msg_composer_get_hdrs (composer), url); - + em_composer_utils_setup_default_callbacks (composer); - + e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show ((GtkWidget *) composer); } @@ -771,7 +771,7 @@ edit_message (CamelMimeMessage *message, CamelFolder *drafts, const char *uid) em_composer_utils_setup_callbacks (composer, NULL, NULL, 0, 0, drafts, uid); e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show (GTK_WIDGET (composer)); } @@ -786,7 +786,7 @@ void em_utils_edit_message (CamelMimeMessage *message) { g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - + edit_message (message, NULL, NULL); } @@ -795,13 +795,13 @@ edit_messages (CamelFolder *folder, GPtrArray *uids, GPtrArray *msgs, void *user { gboolean replace = GPOINTER_TO_INT (user_data); int i; - + if (msgs == NULL) return; - + for (i = 0; i < msgs->len; i++) { camel_medium_remove_header (CAMEL_MEDIUM (msgs->pdata[i]), "X-Mailer"); - + if (replace) edit_message (msgs->pdata[i], folder, uids->pdata[i]); else @@ -822,7 +822,7 @@ em_utils_edit_messages (CamelFolder *folder, GPtrArray *uids, gboolean replace) { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); - + mail_get_messages (folder, uids, edit_messages, GINT_TO_POINTER (replace)); } @@ -831,7 +831,7 @@ static void forward_attached (CamelFolder *folder, GPtrArray *messages, CamelMimePart *part, char *subject, const char *fromuri) { EMsgComposer *composer; - + composer = create_new_composer (subject, fromuri); if (composer == NULL) return; @@ -839,7 +839,7 @@ forward_attached (CamelFolder *folder, GPtrArray *messages, CamelMimePart *part, e_msg_composer_attach (composer, part); e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show (GTK_WIDGET (composer)); } @@ -868,7 +868,7 @@ em_utils_forward_attached (CamelFolder *folder, GPtrArray *uids, const char *fro { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); - + mail_build_attachment (folder, uids, forward_attached_cb, g_strdup(fromuri)); } @@ -893,9 +893,9 @@ forward_non_attached (GPtrArray *messages, int style, const char *fromuri) message = messages->pdata[i]; subject = mail_tool_generate_forward_subject (message); - + text = em_utils_message_to_html (message, _("-------- Forwarded Message --------"), flags, &len, NULL); - + if (text) { composer = create_new_composer (subject, fromuri); @@ -906,12 +906,12 @@ forward_non_attached (GPtrArray *messages, int style, const char *fromuri) e_msg_composer_set_body_text (composer, text, len); e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); - + gtk_widget_show (GTK_WIDGET (composer)); } g_free (text); } - + g_free (subject); } } @@ -936,7 +936,7 @@ em_utils_forward_inline (CamelFolder *folder, GPtrArray *uids, const char *fromu { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); - + mail_get_messages (folder, uids, forward_inline, g_strdup(fromuri)); } @@ -961,7 +961,7 @@ em_utils_forward_quoted (CamelFolder *folder, GPtrArray *uids, const char *fromu { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); - + mail_get_messages (folder, uids, forward_quoted, g_strdup(fromuri)); } @@ -981,20 +981,20 @@ em_utils_forward_message (CamelMimeMessage *message, const char *fromuri) GConfClient *gconf; char *subject; int mode; - + messages = g_ptr_array_new (); g_ptr_array_add (messages, message); - + gconf = mail_config_get_gconf_client (); mode = gconf_client_get_int (gconf, "/apps/evolution/mail/format/forward_style", NULL); - + switch (mode) { case MAIL_CONFIG_FORWARD_ATTACHED: default: part = mail_tool_make_message_attachment (message); - + subject = mail_tool_generate_forward_subject (message); - + forward_attached (NULL, messages, part, subject, fromuri); camel_object_unref (part); g_free (subject); @@ -1006,7 +1006,7 @@ em_utils_forward_message (CamelMimeMessage *message, const char *fromuri) forward_non_attached (messages, MAIL_CONFIG_FORWARD_QUOTED, fromuri); break; } - + g_ptr_array_free (messages, TRUE); } @@ -1023,10 +1023,10 @@ em_utils_forward_messages (CamelFolder *folder, GPtrArray *uids, const char *fro { GConfClient *gconf; int mode; - + gconf = mail_config_get_gconf_client (); mode = gconf_client_get_int (gconf, "/apps/evolution/mail/format/forward_style", NULL); - + switch (mode) { case MAIL_CONFIG_FORWARD_ATTACHED: default: @@ -1048,19 +1048,19 @@ redirect_get_composer (CamelMimeMessage *message) { EMsgComposer *composer; EAccount *account; - + /* QMail will refuse to send a message if it finds one of it's Delivered-To headers in the message, so remove all Delivered-To headers. Fixes bug #23635. */ while (camel_medium_get_header (CAMEL_MEDIUM (message), "Delivered-To")) camel_medium_remove_header (CAMEL_MEDIUM (message), "Delivered-To"); - + account = guess_account (message, NULL); - + composer = e_msg_composer_new_redirect (message, account ? account->name : NULL); - + em_composer_utils_setup_default_callbacks (composer); - + return composer; } @@ -1075,11 +1075,11 @@ void em_utils_redirect_message (CamelMimeMessage *message) { EMsgComposer *composer; - + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - + composer = redirect_get_composer (message); - + gtk_widget_show (GTK_WIDGET (composer)); e_msg_composer_unset_changed (composer); e_msg_composer_drop_editor_undo (composer); @@ -1090,7 +1090,7 @@ redirect_msg (CamelFolder *folder, const char *uid, CamelMimeMessage *message, v { if (message == NULL) return; - + em_utils_redirect_message (message); } @@ -1107,7 +1107,7 @@ em_utils_redirect_message_by_uid (CamelFolder *folder, const char *uid) { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uid != NULL); - + mail_get_message (folder, uid, redirect_msg, NULL, mail_thread_new); } @@ -1151,7 +1151,7 @@ em_utils_handle_receipt (CamelFolder *folder, const char *uid, CamelMimeMessage camel_message_info_set_user_flag(info, "receipt-handled", TRUE); camel_message_info_free(info); - + account = guess_account(msg, folder); /* TODO: should probably decode/format the address, it could be in rfc2047 format */ @@ -1161,7 +1161,7 @@ em_utils_handle_receipt (CamelFolder *folder, const char *uid, CamelMimeMessage while (camel_mime_is_lwsp(*addr)) addr++; } - + if (account && (account->receipt_policy == E_ACCOUNT_RECEIPT_ALWAYS || account->receipt_policy == E_ACCOUNT_RECEIPT_ASK) && e_error_run (NULL, "mail:ask-receipt", addr, camel_mime_message_get_subject(msg)) == GTK_RESPONSE_YES) em_utils_send_receipt(folder, msg); @@ -1187,7 +1187,7 @@ em_utils_send_receipt (CamelFolder *folder, CamelMimeMessage *message) CamelDataWrapper *receipt_text, *receipt_data; CamelContentType *type; CamelInternetAddress *addr; - CamelStream *stream; + CamelStream *stream; CamelFolder *out_folder; CamelMessageInfo *info; const char *message_id = camel_medium_get_header (CAMEL_MEDIUM (message), "Message-ID"); @@ -1201,27 +1201,27 @@ em_utils_send_receipt (CamelFolder *folder, CamelMimeMessage *message) if (!receipt_address) return; - + /* Collect information for the receipt */ - + /* We use camel_header_msgid_generate () to get a canonical * hostname, then skip the part leading to '@' */ hostname = strchr ((fake_msgid = camel_header_msgid_generate ()), '@'); hostname++; - + self_address = account->id->address; if (!message_id) message_id = ""; if (!message_date) message_date =""; - + /* Create toplevel container */ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (body), "multipart/report;" "report-type=\"disposition-notification\""); - camel_multipart_set_boundary (body, NULL); - + camel_multipart_set_boundary (body, NULL); + /* Create textual receipt */ receipt_text = camel_data_wrapper_new (); type = camel_content_type_new ("text", "plain"); @@ -1234,20 +1234,20 @@ em_utils_send_receipt (CamelFolder *folder, CamelMimeMessage *message) self_address, message_subject, message_date); camel_data_wrapper_construct_from_stream (receipt_text, stream); camel_object_unref (stream); - + part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), receipt_text); camel_object_unref (receipt_text); camel_multipart_add_part (body, part); - camel_object_unref (part); - + camel_object_unref (part); + /* Create the machine-readable receipt */ receipt_data = camel_data_wrapper_new (); stream = camel_stream_mem_new (); part = camel_mime_part_new (); ua = g_strdup_printf ("%s; %s", hostname, "Evolution " VERSION SUB_VERSION " " VERSION_COMMENT); - recipient = g_strdup_printf ("rfc822; %s", self_address); + recipient = g_strdup_printf ("rfc822; %s", self_address); type = camel_content_type_new ("message", "disposition-notification"); camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (part), type); @@ -1260,27 +1260,27 @@ em_utils_send_receipt (CamelFolder *folder, CamelMimeMessage *message) g_free (ua); g_free (recipient); g_free (fake_msgid); - + camel_data_wrapper_construct_from_stream (receipt_data, stream); camel_object_unref (stream); camel_medium_set_content_object (CAMEL_MEDIUM (part), receipt_data); camel_object_unref (receipt_data); camel_multipart_add_part (body, part); - camel_object_unref (part); - + camel_object_unref (part); + /* Finish creating the message */ camel_medium_set_content_object (CAMEL_MEDIUM (receipt), CAMEL_DATA_WRAPPER (body)); camel_object_unref (body); - + receipt_subject = g_strdup_printf ("Delivery Notification for: \"%s\"", message_subject); camel_mime_message_set_subject (receipt, receipt_subject); g_free (receipt_subject); - + addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), self_address); camel_mime_message_set_from (receipt, addr); camel_object_unref (addr); - + addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), receipt_address); camel_mime_message_set_recipients (receipt, CAMEL_RECIPIENT_TYPE_TO, addr); @@ -1288,11 +1288,11 @@ em_utils_send_receipt (CamelFolder *folder, CamelMimeMessage *message) camel_medium_set_header (CAMEL_MEDIUM (receipt), "Return-Path", "<>"); if(account) { - camel_medium_set_header (CAMEL_MEDIUM (receipt), + camel_medium_set_header (CAMEL_MEDIUM (receipt), "X-Evolution-Account", account->uid); - camel_medium_set_header (CAMEL_MEDIUM (receipt), + camel_medium_set_header (CAMEL_MEDIUM (receipt), "X-Evolution-Transport", account->transport->url); - camel_medium_set_header (CAMEL_MEDIUM (receipt), + camel_medium_set_header (CAMEL_MEDIUM (receipt), "X-Evolution-Fcc", account->sent_folder_uri); } @@ -1312,19 +1312,19 @@ generate_account_hash (void) EAccount *account, *def; EAccountList *accounts; EIterator *iter; - + accounts = mail_config_get_accounts (); account_hash = g_hash_table_new (camel_strcase_hash, camel_strcase_equal); - + def = mail_config_get_default_account (); - + iter = e_list_get_iterator ((EList *) accounts); while (e_iterator_is_valid (iter)) { account = (EAccount *) e_iterator_get (iter); - + if (account->id->address) { EAccount *acnt; - + /* Accounts with identical email addresses that are enabled * take precedence over the accounts that aren't. If all * accounts with matching email addresses are disabled, then @@ -1336,20 +1336,20 @@ generate_account_hash (void) g_hash_table_remove (account_hash, acnt->id->address); acnt = NULL; } - + if (!acnt) g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); } - + e_iterator_next (iter); } - + g_object_unref (iter); /* The default account has to be there if none of the enabled accounts are present */ if (g_hash_table_size (account_hash) == 0 && def && def->id->address) g_hash_table_insert (account_hash, (char *) def->id->address, (void *) def); - + return account_hash; } @@ -1358,33 +1358,33 @@ em_utils_camel_address_to_destination (CamelInternetAddress *iaddr) { EDestination *dest, **destv; int n, i, j; - + if (iaddr == NULL) return NULL; - + if ((n = camel_address_length ((CamelAddress *) iaddr)) == 0) return NULL; - + destv = g_malloc (sizeof (EDestination *) * (n + 1)); for (i = 0, j = 0; i < n; i++) { const char *name, *addr; - + if (camel_internet_address_get (iaddr, i, &name, &addr)) { dest = e_destination_new (); e_destination_set_name (dest, name); e_destination_set_email (dest, addr); - + destv[j++] = dest; } } - + if (j == 0) { g_free (destv); return NULL; } - + destv[j] = NULL; - + return destv; } @@ -1397,7 +1397,7 @@ reply_get_composer (CamelMimeMessage *message, EAccount *account, EDestination **tov, **ccv; EMsgComposer *composer; char *subject; - + g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL); g_return_val_if_fail (to == NULL || CAMEL_IS_INTERNET_ADDRESS (to), NULL); g_return_val_if_fail (cc == NULL || CAMEL_IS_INTERNET_ADDRESS (cc), NULL); @@ -1425,9 +1425,9 @@ reply_get_composer (CamelMimeMessage *message, EAccount *account, } e_msg_composer_set_headers (composer, account ? account->name : NULL, tov, ccv, NULL, subject); - + g_free (subject); - + /* add post-to, if nessecary */ if (postto && camel_address_length((CamelAddress *)postto)) { char *store_url = NULL; @@ -1444,28 +1444,28 @@ reply_get_composer (CamelMimeMessage *message, EAccount *account, g_free(post); g_free (store_url); } - + /* Add In-Reply-To and References. */ message_id = camel_medium_get_header (CAMEL_MEDIUM (message), "Message-Id"); references = camel_medium_get_header (CAMEL_MEDIUM (message), "References"); if (message_id) { char *reply_refs; - + e_msg_composer_add_header (composer, "In-Reply-To", message_id); - + if (references) reply_refs = g_strdup_printf ("%s %s", references, message_id); else reply_refs = g_strdup (message_id); - + e_msg_composer_add_header (composer, "References", reply_refs); g_free (reply_refs); } else if (references) { e_msg_composer_add_header (composer, "References", references); } - + e_msg_composer_drop_editor_undo (composer); - + return composer; } @@ -1501,7 +1501,7 @@ guess_account (CamelMimeMessage *message, CamelFolder *folder) account_hash = generate_account_hash (); for (j=0;account == NULL && j<2;j++) { const CamelInternetAddress *to; - + to = camel_mime_message_get_recipients(message, types[j]); if (to) { for (i = 0; camel_internet_address_get(to, i, NULL, &tmp); i++) { @@ -1532,7 +1532,7 @@ get_reply_sender (CamelMimeMessage *message, CamelInternetAddress *to, CamelNNTP const CamelInternetAddress *reply_to; const char *name, *addr, *posthdr; int i; - + /* check whether there is a 'Newsgroups: ' header in there */ if (postto && ((posthdr = camel_medium_get_header((CamelMedium *)message, "Followup-To")) @@ -1540,11 +1540,11 @@ get_reply_sender (CamelMimeMessage *message, CamelInternetAddress *to, CamelNNTP camel_address_decode((CamelAddress *)postto, posthdr); return; } - + reply_to = camel_mime_message_get_reply_to (message); if (!reply_to) reply_to = camel_mime_message_get_from (message); - + if (reply_to) { for (i = 0; camel_internet_address_get (reply_to, i, &name, &addr); i++) camel_internet_address_add (to, name, addr); @@ -1556,38 +1556,38 @@ get_reply_list (CamelMimeMessage *message, CamelInternetAddress *to) { const char *header, *p; char *addr; - + /* Examples: - * + * * List-Post: <mailto:list@host.com> * List-Post: <mailto:moderator@host.com?subject=list%20posting> * List-Post: NO (posting not allowed on this list) */ if (!(header = camel_medium_get_header ((CamelMedium *) message, "List-Post"))) return FALSE; - + while (*header == ' ' || *header == '\t') header++; - + /* check for NO */ if (!g_ascii_strncasecmp (header, "NO", 2)) return FALSE; - + /* Search for the first mailto angle-bracket enclosed URL. * (See rfc2369, Section 2, paragraph 3 for details) */ if (!(header = camel_strstrcase (header, "<mailto:"))) return FALSE; - + header += 8; - + p = header; while (*p && !strchr ("?>", *p)) p++; - - addr = g_strndup (header, p - header); + + addr = g_strndup (header, p - header); camel_internet_address_add(to, NULL, addr); g_free (addr); - + return TRUE; } @@ -1596,7 +1596,7 @@ concat_unique_addrs (CamelInternetAddress *dest, const CamelInternetAddress *src { const char *name, *addr; int i; - + for (i = 0; camel_internet_address_get (src, i, &name, &addr); i++) { if (!g_hash_table_lookup (rcpt_hash, addr)) { camel_internet_address_add (dest, name, addr); @@ -1612,7 +1612,7 @@ get_reply_all (CamelMimeMessage *message, CamelInternetAddress *to, CamelInterne const char *name, *addr, *posthdr; GHashTable *rcpt_hash; int i; - + /* check whether there is a 'Newsgroups: ' header in there */ if (postto) { if ((posthdr = camel_medium_get_header((CamelMedium *)message, "Followup-To"))) @@ -1620,16 +1620,16 @@ get_reply_all (CamelMimeMessage *message, CamelInternetAddress *to, CamelInterne if ((posthdr = camel_medium_get_header((CamelMedium *)message, "Newsgroups"))) camel_address_decode((CamelAddress *)postto, posthdr); } - + rcpt_hash = generate_account_hash (); - + reply_to = camel_mime_message_get_reply_to (message); if (!reply_to) reply_to = camel_mime_message_get_from (message); - + to_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); cc_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); - + if (reply_to) { for (i = 0; camel_internet_address_get (reply_to, i, &name, &addr); i++) { /* ignore references to the Reply-To address in the To and Cc lists */ @@ -1637,16 +1637,16 @@ get_reply_all (CamelMimeMessage *message, CamelInternetAddress *to, CamelInterne /* In the case that we are doing a Reply-To-All, we do not want to include the user's email address because replying to oneself is kinda silly. */ - + camel_internet_address_add (to, name, addr); g_hash_table_insert (rcpt_hash, (char *) addr, GINT_TO_POINTER (1)); } } } - + concat_unique_addrs (cc, to_addrs, rcpt_hash); concat_unique_addrs (cc, cc_addrs, rcpt_hash); - + /* promote the first Cc: address to To: if To: is empty */ if (camel_address_length ((CamelAddress *) to) == 0 && camel_address_length ((CamelAddress *)cc) > 0) { camel_internet_address_get (cc, 0, &name, &addr); @@ -1660,7 +1660,7 @@ get_reply_all (CamelMimeMessage *message, CamelInternetAddress *to, CamelInterne || camel_internet_address_get(cc_addrs, 0, &name, &addr))) { camel_internet_address_add(to, name, addr); } - + g_hash_table_destroy (rcpt_hash); } @@ -1688,14 +1688,14 @@ format_sender (GString *str, const char *attr, CamelMimeMessage *message) { const CamelInternetAddress *sender; const char *name, *addr; - + sender = camel_mime_message_get_from (message); if (sender != NULL && camel_address_length (CAMEL_ADDRESS (sender)) > 0) { camel_internet_address_get (sender, 0, &name, &addr); } else { name = _("an unknown sender"); } - + if (name && !strcmp (attr, "{SenderName}")) { g_string_append (str, name); } else if (addr && !strcmp (attr, "{SenderEMail}")) { @@ -1753,9 +1753,9 @@ attribution_format (const char *format, CamelMimeMessage *message) struct tm tm; time_t date; int type; - + str = g_string_new (""); - + date = camel_mime_message_get_date (message, &tzone); if (date == CAMEL_MESSAGE_DATE_CURRENT) { @@ -1767,35 +1767,35 @@ attribution_format (const char *format, CamelMimeMessage *message) time (&date); tzone = 0; } - + /* Convert to UTC */ date += (tzone / 100) * 60 * 60; date += (tzone % 100) * 60; - + gmtime_r (&date, &tm); - + start = inptr = format; while (*inptr != '\0') { start = inptr; while (*inptr && strncmp (inptr, "${", 2) != 0) inptr++; - + g_string_append_len (str, start, inptr - start); - + if (*inptr == '\0') break; - + start = ++inptr; while (*inptr && *inptr != '}') inptr++; - + if (*inptr != '}') { /* broken translation */ g_string_append_len (str, "${", 2); inptr = start + 1; continue; } - + inptr++; len = inptr - start; type = ATTRIB_UNKNOWN; @@ -1805,7 +1805,7 @@ attribution_format (const char *format, CamelMimeMessage *message) break; } } - + switch (type) { case ATTRIB_CUSTOM: attribvars[i].v.formatter (str, attribvars[i].name, message); @@ -1853,10 +1853,10 @@ attribution_format (const char *format, CamelMimeMessage *message) break; } } - + s = str->str; g_string_free (str, FALSE); - + return s; } @@ -1867,9 +1867,9 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat * CamelMimePart *part; GConfClient *gconf; ssize_t len; - + gconf = mail_config_get_gconf_client (); - + switch (gconf_client_get_int (gconf, "/apps/evolution/mail/format/reply_style", NULL)) { case MAIL_CONFIG_REPLY_DO_NOT_QUOTE: /* do nothing */ @@ -1896,7 +1896,7 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat * g_free (text); break; } - + e_msg_composer_drop_editor_undo (composer); } @@ -1963,7 +1963,7 @@ em_utils_reply_to_message(CamelFolder *folder, const char *uid, CamelMimeMessage /** @Event: message.replying * @Title: Message being replied to * @Target: EMEventTargetMessage - * + * * message.replying is emitted when a user starts replying to a message. */ @@ -1974,10 +1974,10 @@ em_utils_reply_to_message(CamelFolder *folder, const char *uid, CamelMimeMessage to = camel_internet_address_new(); cc = camel_internet_address_new(); - + account = guess_account (message, folder); flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_SEEN; - + switch (mode) { case REPLY_MODE_SENDER: if (folder) @@ -1998,7 +1998,7 @@ em_utils_reply_to_message(CamelFolder *folder, const char *uid, CamelMimeMessage get_reply_all(message, to, cc, postto); break; } - + composer = reply_get_composer (message, account, to, cc, folder, postto); e_msg_composer_add_message_attachments (composer, message, TRUE); @@ -2006,11 +2006,11 @@ em_utils_reply_to_message(CamelFolder *folder, const char *uid, CamelMimeMessage camel_object_unref(postto); camel_object_unref(to); camel_object_unref(cc); - + composer_set_body (composer, message, source); - + em_composer_utils_setup_callbacks (composer, folder, uid, flags, flags, NULL, NULL); - + gtk_widget_show (GTK_WIDGET (composer)); e_msg_composer_unset_changed (composer); } @@ -2030,13 +2030,13 @@ post_reply_to_message (CamelFolder *folder, const char *uid, CamelMimeMessage *m EAccount *account; char *real_uid; guint32 flags; - + if (message == NULL) return; - + if (CAMEL_IS_VEE_FOLDER (folder)) { CamelMessageInfo *info; - + info = camel_folder_get_message_info (folder, uid); real_folder = camel_vee_folder_get_location ((CamelVeeFolder *) folder, (struct _CamelVeeMessageInfo *) info, &real_uid); camel_folder_free_message_info (folder, info); @@ -2045,18 +2045,18 @@ post_reply_to_message (CamelFolder *folder, const char *uid, CamelMimeMessage *m camel_object_ref (folder); real_uid = g_strdup (uid); } - + account = guess_account (message, real_folder); flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_SEEN; - + to = camel_internet_address_new(); get_reply_sender (message, to, NULL); - + composer = e_msg_composer_new_with_type (E_MSG_COMPOSER_MAIL_POST); - + /* construct the tov/ccv */ tov = em_utils_camel_address_to_destination (to); - + /* Set the subject of the new message. */ if ((subject = (char *) camel_mime_message_get_subject (message))) { if (g_ascii_strncasecmp (subject, "Re: ", 4) != 0) @@ -2066,45 +2066,45 @@ post_reply_to_message (CamelFolder *folder, const char *uid, CamelMimeMessage *m } else { subject = g_strdup (""); } - + e_msg_composer_set_headers (composer, account ? account->name : NULL, tov, NULL, NULL, subject); - + g_free (subject); - + url = mail_tools_folder_to_url (real_folder); e_msg_composer_hdrs_set_post_to (e_msg_composer_get_hdrs(composer), url); g_free (url); - + /* Add In-Reply-To and References. */ message_id = camel_medium_get_header (CAMEL_MEDIUM (message), "Message-Id"); references = camel_medium_get_header (CAMEL_MEDIUM (message), "References"); if (message_id) { char *reply_refs; - + e_msg_composer_add_header (composer, "In-Reply-To", message_id); - + if (references) reply_refs = g_strdup_printf ("%s %s", references, message_id); else reply_refs = g_strdup (message_id); - + e_msg_composer_add_header (composer, "References", reply_refs); g_free (reply_refs); } else if (references) { e_msg_composer_add_header (composer, "References", references); } - + e_msg_composer_drop_editor_undo (composer); - + e_msg_composer_add_message_attachments (composer, message, TRUE); - + composer_set_body (composer, message, NULL); - + em_composer_utils_setup_callbacks (composer, real_folder, real_uid, flags, flags, NULL, NULL); - - gtk_widget_show (GTK_WIDGET (composer)); + + gtk_widget_show (GTK_WIDGET (composer)); e_msg_composer_unset_changed (composer); - + camel_object_unref (real_folder); camel_object_unref(to); g_free (real_uid); @@ -2124,6 +2124,6 @@ em_utils_post_reply_to_message_by_uid (CamelFolder *folder, const char *uid) { g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uid != NULL); - + mail_get_message (folder, uid, post_reply_to_message, NULL, mail_thread_new); } |