From: Sergio Villar Senin Date: Wed, 21 Mar 2007 10:28:19 +0000 (+0000) Subject: * Moved two methods from mail operation API to ModestTnyMsg API X-Git-Tag: git_migration_finished~3967 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=c2c60d8c88aa180b656a1b932ea695185f7f3f6e * Moved two methods from mail operation API to ModestTnyMsg API pmo-trunk-r915 --- diff --git a/src/gnome/modest-main-window.c b/src/gnome/modest-main-window.c index 1b43e42..b8cc009 100644 --- a/src/gnome/modest-main-window.c +++ b/src/gnome/modest-main-window.c @@ -104,8 +104,8 @@ struct _ModestMainWindowPrivate { typedef struct _GetMsgAsyncHelper { ModestMainWindowPrivate *main_window_private; guint action; - ModestMailOperationReplyType reply_type; - ModestMailOperationForwardType forward_type; + ModestTnyMsgReplyType reply_type; + ModestTnyMsgForwardType forward_type; gchar *from; TnyIterator *iter; } GetMsgAsyncHelper; diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index c6da458..5d24933 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -86,8 +86,8 @@ struct _ModestMainWindowPrivate { typedef struct _GetMsgAsyncHelper { ModestMainWindowPrivate *main_window_private; guint action; - ModestMailOperationReplyType reply_type; - ModestMailOperationForwardType forward_type; + ModestTnyMsgReplyType reply_type; + ModestTnyMsgForwardType forward_type; gchar *from; TnyIterator *iter; } GetMsgAsyncHelper; diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 1c5e43f..97a76fa 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -47,7 +47,6 @@ #include "modest-tny-msg.h" #include "modest-tny-platform-factory.h" #include "modest-marshal.h" -#include "modest-formatter.h" #include "modest-error.h" /* 'private'/'protected' functions */ @@ -68,8 +67,6 @@ static void update_folders_cb (TnyFolderStore *self, TnyList *list, GError **err, gpointer user_data); -static void add_attachments (TnyMsg *msg, - GList *attachments_list); enum _ModestMailOperationSignals { @@ -257,169 +254,6 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self, } static void -add_if_attachment (gpointer data, gpointer user_data) -{ - TnyMimePart *part; - GList *attachments_list; - - part = TNY_MIME_PART (data); - attachments_list = (GList *) user_data; - - if (tny_mime_part_is_attachment (part)) - attachments_list = g_list_prepend (attachments_list, part); -} - - -static TnyMsg * -create_reply_forward_mail (TnyMsg *msg, const gchar *from, gboolean is_reply, guint type) -{ - TnyMsg *new_msg; - TnyHeader *new_header, *header; - gchar *new_subject; - TnyMimePart *body; - ModestFormatter *formatter; - - /* Get body from original msg. Always look for the text/plain - part of the message to create the reply/forwarded mail */ - header = tny_msg_get_header (msg); - body = modest_tny_msg_find_body_part (msg, FALSE); - - /* TODO: select the formatter from account prefs */ - formatter = modest_formatter_new ("text/plain"); - - /* Format message body */ - if (is_reply) { - switch (type) { - case MODEST_MAIL_OPERATION_REPLY_TYPE_CITE: - default: - new_msg = modest_formatter_cite (formatter, body, header); - break; - case MODEST_MAIL_OPERATION_REPLY_TYPE_QUOTE: - new_msg = modest_formatter_quote (formatter, body, header); - break; - } - } else { - switch (type) { - case MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE: - default: - new_msg = modest_formatter_inline (formatter, body, header); - break; - case MODEST_MAIL_OPERATION_FORWARD_TYPE_ATTACHMENT: - new_msg = modest_formatter_attach (formatter, body, header); - break; - } - } - g_object_unref (G_OBJECT(formatter)); - g_object_unref (G_OBJECT(body)); - - /* Fill the header */ - new_header = tny_msg_get_header (new_msg); - tny_header_set_from (new_header, from); - tny_header_set_replyto (new_header, from); - - /* Change the subject */ - new_subject = - (gchar *) modest_text_utils_derived_subject (tny_header_get_subject(header), - (is_reply) ? _("Re:") : _("Fwd:")); - tny_header_set_subject (new_header, (const gchar *) new_subject); - g_free (new_subject); - - /* Clean */ - g_object_unref (G_OBJECT (new_header)); - g_object_unref (G_OBJECT (header)); - - return new_msg; -} - -TnyMsg* -modest_mail_operation_create_forward_mail (TnyMsg *msg, - const gchar *from, - ModestMailOperationForwardType forward_type) -{ - TnyMsg *new_msg; - TnyList *parts = NULL; - GList *attachments_list = NULL; - - new_msg = create_reply_forward_mail (msg, from, FALSE, forward_type); - - /* Add attachments */ - parts = TNY_LIST (tny_simple_list_new()); - tny_mime_part_get_parts (TNY_MIME_PART (msg), parts); - tny_list_foreach (parts, add_if_attachment, attachments_list); - add_attachments (new_msg, attachments_list); - - /* Clean */ - if (attachments_list) - g_list_free (attachments_list); - g_object_unref (G_OBJECT (parts)); - - return new_msg; -} - -TnyMsg* -modest_mail_operation_create_reply_mail (TnyMsg *msg, - const gchar *from, - ModestMailOperationReplyType reply_type, - ModestMailOperationReplyMode reply_mode) -{ - TnyMsg *new_msg = NULL; - TnyHeader *new_header, *header; - const gchar* reply_to; - gchar *new_cc = NULL; - const gchar *cc = NULL, *bcc = NULL; - GString *tmp = NULL; - - new_msg = create_reply_forward_mail (msg, from, TRUE, reply_type); - - /* Fill the header */ - header = tny_msg_get_header (msg); - new_header = tny_msg_get_header (new_msg); - reply_to = tny_header_get_replyto (header); - - if (reply_to) - tny_header_set_to (new_header, reply_to); - else - tny_header_set_to (new_header, tny_header_get_from (header)); - - switch (reply_mode) { - case MODEST_MAIL_OPERATION_REPLY_MODE_SENDER: - /* Do not fill neither cc nor bcc */ - break; - case MODEST_MAIL_OPERATION_REPLY_MODE_LIST: - /* TODO */ - break; - case MODEST_MAIL_OPERATION_REPLY_MODE_ALL: - /* Concatenate to, cc and bcc */ - cc = tny_header_get_cc (header); - bcc = tny_header_get_bcc (header); - - tmp = g_string_new (tny_header_get_to (header)); - if (cc) g_string_append_printf (tmp, ",%s",cc); - if (bcc) g_string_append_printf (tmp, ",%s",bcc); - - /* Remove my own address from the cc list. TODO: - remove also the To: of the new message, needed due - to the new reply_to feature */ - new_cc = (gchar *) - modest_text_utils_remove_address ((const gchar *) tmp->str, - from); - /* FIXME: remove also the mails from the new To: */ - tny_header_set_cc (new_header, new_cc); - - /* Clean */ - g_string_free (tmp, TRUE); - g_free (new_cc); - break; - } - - /* Clean */ - g_object_unref (G_OBJECT (new_header)); - g_object_unref (G_OBJECT (header)); - - return new_msg; -} - -static void status_update_cb (TnyFolder *folder, const gchar *what, gint status, gint oftotal, gpointer user_data) { g_print ("%s status: %d, of total %d\n", what, status, oftotal); @@ -839,40 +673,3 @@ modest_mail_operation_xfer_msg (ModestMailOperation *self, return TRUE; } - - -/* ******************************************************************* */ -/* ************************* UTILIY FUNCTIONS ************************ */ -/* ******************************************************************* */ - -static void -add_attachments (TnyMsg *msg, GList *attachments_list) -{ - GList *pos; - TnyMimePart *attachment_part, *old_attachment; - const gchar *attachment_content_type; - const gchar *attachment_filename; - TnyStream *attachment_stream; - - for (pos = (GList *)attachments_list; pos; pos = pos->next) { - - old_attachment = pos->data; - attachment_filename = tny_mime_part_get_filename (old_attachment); - attachment_stream = tny_mime_part_get_stream (old_attachment); - attachment_part = tny_platform_factory_new_mime_part - (modest_runtime_get_platform_factory()); - - attachment_content_type = tny_mime_part_get_content_type (old_attachment); - - tny_mime_part_construct_from_stream (attachment_part, - attachment_stream, - attachment_content_type); - tny_stream_reset (attachment_stream); - - tny_mime_part_set_filename (attachment_part, attachment_filename); - - tny_mime_part_add_part (TNY_MIME_PART (msg), attachment_part); -/* g_object_unref (attachment_part); */ - } -} - diff --git a/src/modest-mail-operation.h b/src/modest-mail-operation.h index c03d4ec..c3ec8d2 100644 --- a/src/modest-mail-operation.h +++ b/src/modest-mail-operation.h @@ -47,37 +47,6 @@ typedef struct _ModestMailOperation ModestMailOperation; typedef struct _ModestMailOperationClass ModestMailOperationClass; /** - * ModestMailOperationForwardType: - * - * How the original message will be forwarded to the recipient - */ -typedef enum _ModestMailOperationForwardType { - MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE = 1, - MODEST_MAIL_OPERATION_FORWARD_TYPE_ATTACHMENT -} ModestMailOperationForwardType; - -/** - * ModestMailOperationReplyType: - * - * How the original message will be forwarded to the recipient - */ -typedef enum _ModestMailOperationReplyType { - MODEST_MAIL_OPERATION_REPLY_TYPE_CITE = 1, - MODEST_MAIL_OPERATION_REPLY_TYPE_QUOTE -} ModestMailOperationReplyType; - -/** - * ModestMailOperationReplyMode: - * - * Who will be the recipients of the replied message - */ -typedef enum _ModestMailOperationReplyMode { - MODEST_MAIL_OPERATION_REPLY_MODE_SENDER, - MODEST_MAIL_OPERATION_REPLY_MODE_LIST, - MODEST_MAIL_OPERATION_REPLY_MODE_ALL -} ModestMailOperationReplyMode; - -/** * ModestMailOperationStatus: * * The state of a mail operation @@ -154,34 +123,6 @@ void modest_mail_operation_send_new_mail (ModestMailOperation *self, const GList *attachments_list); /** - * modest_mail_operation_create_forward_mail: - * @msg: a valid #TnyMsg instance - * @forward_type: the type of formatting used to create the forwarded message - * - * Creates a forwarded message from an existing one - * - * Returns: a new #TnyMsg, or NULL in case of error - **/ -TnyMsg* modest_mail_operation_create_forward_mail (TnyMsg *msg, - const gchar *from, - ModestMailOperationForwardType forward_type); - -/** - * modest_mail_operation_create_reply_mail: - * @msg: a valid #TnyMsg instance - * @reply_type: the type of formatting used to create the reply message - * @reply_mode: the mode of reply: to the sender only, to a mail list or to all - * - * Creates a new message to reply to an existing one - * - * Returns: Returns: a new #TnyMsg, or NULL in case of error - **/ -TnyMsg* modest_mail_operation_create_reply_mail (TnyMsg *msg, - const gchar *from, - ModestMailOperationReplyType reply_type, - ModestMailOperationReplyMode reply_mode); - -/** * modest_mail_operation_update_account: * @self: a #ModestMailOperation * @store_account: a #TnyStoreAccount diff --git a/src/modest-tny-msg.c b/src/modest-tny-msg.c index fac56d5..6a4f827 100644 --- a/src/modest-tny-msg.c +++ b/src/modest-tny-msg.c @@ -33,6 +33,7 @@ #include #include #include +#include "modest-formatter.h" #include #include @@ -261,6 +262,168 @@ modest_tny_msg_find_body_part (TnyMsg *msg, gboolean want_html) } +static TnyMsg * +create_reply_forward_mail (TnyMsg *msg, const gchar *from, gboolean is_reply, guint type) +{ + TnyMsg *new_msg; + TnyHeader *new_header, *header; + gchar *new_subject; + TnyMimePart *body; + ModestFormatter *formatter; + + /* Get body from original msg. Always look for the text/plain + part of the message to create the reply/forwarded mail */ + header = tny_msg_get_header (msg); + body = modest_tny_msg_find_body_part (msg, FALSE); + + /* TODO: select the formatter from account prefs */ + formatter = modest_formatter_new ("text/plain"); + + /* Format message body */ + if (is_reply) { + switch (type) { + case MODEST_TNY_MSG_REPLY_TYPE_CITE: + default: + new_msg = modest_formatter_cite (formatter, body, header); + break; + case MODEST_TNY_MSG_REPLY_TYPE_QUOTE: + new_msg = modest_formatter_quote (formatter, body, header); + break; + } + } else { + switch (type) { + case MODEST_TNY_MSG_FORWARD_TYPE_INLINE: + default: + new_msg = modest_formatter_inline (formatter, body, header); + break; + case MODEST_TNY_MSG_FORWARD_TYPE_ATTACHMENT: + new_msg = modest_formatter_attach (formatter, body, header); + break; + } + } + g_object_unref (G_OBJECT(formatter)); + g_object_unref (G_OBJECT(body)); + + /* Fill the header */ + new_header = tny_msg_get_header (new_msg); + tny_header_set_from (new_header, from); + tny_header_set_replyto (new_header, from); + + /* Change the subject */ + new_subject = + (gchar *) modest_text_utils_derived_subject (tny_header_get_subject(header), + (is_reply) ? _("Re:") : _("Fwd:")); + tny_header_set_subject (new_header, (const gchar *) new_subject); + g_free (new_subject); + + /* Clean */ + g_object_unref (G_OBJECT (new_header)); + g_object_unref (G_OBJECT (header)); + + return new_msg; +} + +static void +add_if_attachment (gpointer data, gpointer user_data) +{ + TnyMimePart *part; + GList *attachments_list; + + part = TNY_MIME_PART (data); + attachments_list = (GList *) user_data; + + if (tny_mime_part_is_attachment (part)) + attachments_list = g_list_prepend (attachments_list, part); +} + +TnyMsg* +modest_tny_msg_create_forward_msg (TnyMsg *msg, + const gchar *from, + ModestTnyMsgForwardType forward_type) +{ + TnyMsg *new_msg; + TnyList *parts = NULL; + GList *attachments_list = NULL; + + new_msg = create_reply_forward_mail (msg, from, FALSE, forward_type); + + /* Add attachments */ + parts = TNY_LIST (tny_simple_list_new()); + tny_mime_part_get_parts (TNY_MIME_PART (msg), parts); + tny_list_foreach (parts, add_if_attachment, attachments_list); + add_attachments (new_msg, attachments_list); + + /* Clean */ + if (attachments_list) + g_list_free (attachments_list); + g_object_unref (G_OBJECT (parts)); + + return new_msg; +} + +TnyMsg* +modest_tny_msg_create_reply_msg (TnyMsg *msg, + const gchar *from, + ModestTnyMsgReplyType reply_type, + ModestTnyMsgReplyMode reply_mode) +{ + TnyMsg *new_msg = NULL; + TnyHeader *new_header, *header; + const gchar* reply_to; + gchar *new_cc = NULL; + const gchar *cc = NULL, *bcc = NULL; + GString *tmp = NULL; + + new_msg = create_reply_forward_mail (msg, from, TRUE, reply_type); + + /* Fill the header */ + header = tny_msg_get_header (msg); + new_header = tny_msg_get_header (new_msg); + reply_to = tny_header_get_replyto (header); + + if (reply_to) + tny_header_set_to (new_header, reply_to); + else + tny_header_set_to (new_header, tny_header_get_from (header)); + + switch (reply_mode) { + case MODEST_TNY_MSG_REPLY_MODE_SENDER: + /* Do not fill neither cc nor bcc */ + break; + case MODEST_TNY_MSG_REPLY_MODE_LIST: + /* TODO */ + break; + case MODEST_TNY_MSG_REPLY_MODE_ALL: + /* Concatenate to, cc and bcc */ + cc = tny_header_get_cc (header); + bcc = tny_header_get_bcc (header); + + tmp = g_string_new (tny_header_get_to (header)); + if (cc) g_string_append_printf (tmp, ",%s",cc); + if (bcc) g_string_append_printf (tmp, ",%s",bcc); + + /* Remove my own address from the cc list. TODO: + remove also the To: of the new message, needed due + to the new reply_to feature */ + new_cc = (gchar *) + modest_text_utils_remove_address ((const gchar *) tmp->str, + from); + /* FIXME: remove also the mails from the new To: */ + tny_header_set_cc (new_header, new_cc); + + /* Clean */ + g_string_free (tmp, TRUE); + g_free (new_cc); + break; + } + + /* Clean */ + g_object_unref (G_OBJECT (new_header)); + g_object_unref (G_OBJECT (header)); + + return new_msg; +} + static gboolean is_ascii(const gchar *s) diff --git a/src/modest-tny-msg.h b/src/modest-tny-msg.h index d99b0cc..250c6f8 100644 --- a/src/modest-tny-msg.h +++ b/src/modest-tny-msg.h @@ -31,6 +31,37 @@ #define __MODEST_TNY_MSG_H__ /** + * ModestTnyMsgForwardType: + * + * How the original message will be forwarded to the recipient + */ +typedef enum _ModestTnyMsgForwardType { + MODEST_TNY_MSG_FORWARD_TYPE_INLINE = 1, + MODEST_TNY_MSG_FORWARD_TYPE_ATTACHMENT +} ModestTnyMsgForwardType; + +/** + * ModestTnyMsgReplyType: + * + * How the original message will be forwarded to the recipient + */ +typedef enum _ModestTnyMsgReplyType { + MODEST_TNY_MSG_REPLY_TYPE_CITE = 1, + MODEST_TNY_MSG_REPLY_TYPE_QUOTE +} ModestTnyMsgReplyType; + +/** + * ModestTnyMsgReplyMode: + * + * Who will be the recipients of the replied message + */ +typedef enum _ModestTnyMsgReplyMode { + MODEST_TNY_MSG_REPLY_MODE_SENDER, + MODEST_TNY_MSG_REPLY_MODE_LIST, + MODEST_TNY_MSG_REPLY_MODE_ALL +} ModestTnyMsgReplyMode; + +/** * modest_tny_msg_new: * @mailto: recipient for the message * @mailfrom: sender of this message @@ -58,7 +89,7 @@ TnyMsg* modest_tny_msg_new (const gchar* mailto, const gchar* mailfrom, const gc * * Returns: the TnyMsgMimePart for the found part, or NULL if no matching part is found */ -TnyMimePart *modest_tny_msg_find_body_part (TnyMsg * self, gboolean want_html); +TnyMimePart* modest_tny_msg_find_body_part (TnyMsg * self, gboolean want_html); /** @@ -72,6 +103,38 @@ TnyMimePart *modest_tny_msg_find_body_part (TnyMsg * self, gboolean want_html); * Returns: the body of the message as text, or NULL if it is not found * the text should be freed with **/ -gchar* modest_tny_msg_get_body (TnyMsg *self, gboolean want_html); +gchar* modest_tny_msg_get_body (TnyMsg *self, gboolean want_html); + + +/** + * modest_tny_msg_create_forward_msg: + * @msg: a valid #TnyMsg instance + * @from: the sender of the forwarded mail + * @forward_type: the type of formatting used to create the forwarded message + * + * Creates a forwarded message from an existing one + * + * Returns: a new #TnyMsg, or NULL in case of error + **/ +TnyMsg* modest_tny_msg_create_forward_msg (TnyMsg *msg, + const gchar *from, + ModestTnyMsgForwardType forward_type); + +/** + * modest_tny_msg_create_reply_msg: + * @msg: a valid #TnyMsg instance + * @from: the sender of the forwarded mail + * @reply_type: the type of formatting used to create the reply message + * @reply_mode: the mode of reply: to the sender only, to a mail list or to all + * + * Creates a new message to reply to an existing one + * + * Returns: Returns: a new #TnyMsg, or NULL in case of error + **/ +TnyMsg* modest_tny_msg_create_reply_msg (TnyMsg *msg, + const gchar *from, + ModestTnyMsgReplyType reply_type, + ModestTnyMsgReplyMode reply_mode); + #endif /* __MODEST_TNY_MSG_H__ */ diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index c705470..032a094 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -331,19 +331,19 @@ reply_forward_func (gpointer data, gpointer user_data) switch (rf_helper->action) { case ACTION_REPLY: new_msg = - modest_mail_operation_create_reply_mail (msg, from, - rf_helper->reply_forward_type, - MODEST_MAIL_OPERATION_REPLY_MODE_SENDER); + modest_tny_msg_create_reply_msg (msg, from, + rf_helper->reply_forward_type, + MODEST_TNY_MSG_REPLY_MODE_SENDER); break; case ACTION_REPLY_TO_ALL: new_msg = - modest_mail_operation_create_reply_mail (msg, from, rf_helper->reply_forward_type, - MODEST_MAIL_OPERATION_REPLY_MODE_ALL); + modest_tny_msg_create_reply_msg (msg, from, rf_helper->reply_forward_type, + MODEST_TNY_MSG_REPLY_MODE_ALL); edit_type = MODEST_EDIT_TYPE_REPLY; break; case ACTION_FORWARD: new_msg = - modest_mail_operation_create_forward_mail (msg, from, rf_helper->reply_forward_type); + modest_tny_msg_create_forward_msg (msg, from, rf_helper->reply_forward_type); edit_type = MODEST_EDIT_TYPE_FORWARD; break; default: