New function that implements the Redirect feature.
2002-01-29 Jeffrey Stedfast <fejj@ximian.com> * mail-callbacks.c (redirect): New function that implements the Redirect feature. * mail-ops.c (mail_send_message): If we are redirecting a message, get the Resent-* recipients otherwise get the normal To/Cc/Bcc recipients and use them in the CamelTransport::send_to() method. * mail-session.c (main_get_filter_driver): Set the beep_func to the beep_cb, not the play_sound_func. Oops ;-) * folder-browser-ui.c: Add Redirect bonobo verb thingy here. (folder_browser_ui_set_selection_state): Add MessageRedirect to the proper string arrays. svn path=/trunk/; revision=15511
This commit is contained in:

committed by
Jeffrey Stedfast

parent
85610de9fe
commit
865606984f
@ -1,3 +1,19 @@
|
||||
2002-01-29 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* mail-callbacks.c (redirect): New function that implements the
|
||||
Redirect feature.
|
||||
|
||||
* mail-ops.c (mail_send_message): If we are redirecting a message,
|
||||
get the Resent-* recipients otherwise get the normal To/Cc/Bcc
|
||||
recipients and use them in the CamelTransport::send_to() method.
|
||||
|
||||
* mail-session.c (main_get_filter_driver): Set the beep_func to
|
||||
the beep_cb, not the play_sound_func. Oops ;-)
|
||||
|
||||
* folder-browser-ui.c: Add Redirect bonobo verb thingy here.
|
||||
(folder_browser_ui_set_selection_state): Add MessageRedirect to
|
||||
the proper string arrays.
|
||||
|
||||
2002-01-29 Radek Doulik <rodo@ximian.com>
|
||||
|
||||
* mail-callbacks.c (do_mail_print): initialize line to 0 to make
|
||||
|
@ -51,6 +51,7 @@ static BonoboUIVerb message_verbs [] = {
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageForwardAttached", forward_attached),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageForwardInline", forward_inline),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageForwardQuoted", forward_quoted),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageRedirect", redirect),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageMarkAsRead", mark_as_seen),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageMarkAsUnRead", mark_as_unseen),
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageMarkAsImportant", mark_as_important),
|
||||
@ -549,6 +550,7 @@ folder_browser_ui_set_selection_state (FolderBrowser *fb, FolderBrowserSelection
|
||||
"MessageMarkAsImportant", "MessageMarkAsUnimportant",
|
||||
"MessageOpen", "MessageSaveAs",
|
||||
"MessageForward", "MessageForwardAttached",
|
||||
"MessageRedirect",
|
||||
|
||||
"EditCut", "EditCopy", "EditPaste", "ViewHideSelected",
|
||||
|
||||
@ -561,7 +563,7 @@ folder_browser_ui_set_selection_state (FolderBrowser *fb, FolderBrowserSelection
|
||||
static const char *multiple_disables[] = {
|
||||
/* actions that work on exactly 1 message */
|
||||
"MessageReplyAll", "MessageReplyList", "MessageReplySender", "MessageResend",
|
||||
"MessageForwardInline", "MessageForwardQuoted", "MessageSearch",
|
||||
"MessageForwardInline", "MessageForwardQuoted", "MessageRedirect", "MessageSearch",
|
||||
|
||||
"PrintMessage", "PrintPreviewMessage",
|
||||
|
||||
|
@ -1285,6 +1285,89 @@ forward (GtkWidget *widget, gpointer user_data)
|
||||
forward_message (user_data, style);
|
||||
}
|
||||
|
||||
static EMsgComposer *
|
||||
redirect_get_composer (CamelMimeMessage *message)
|
||||
{
|
||||
const MailConfigAccount *account = NULL;
|
||||
const CamelInternetAddress *to_addrs, *cc_addrs;
|
||||
const GSList *accounts = NULL;
|
||||
EMsgComposer *composer;
|
||||
|
||||
g_return_val_if_fail (message != NULL, NULL);
|
||||
|
||||
accounts = mail_config_get_accounts ();
|
||||
to_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO);
|
||||
cc_addrs = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC);
|
||||
|
||||
account = guess_me (to_addrs, cc_addrs, accounts);
|
||||
|
||||
if (!account) {
|
||||
const char *source;
|
||||
|
||||
source = camel_mime_message_get_source (message);
|
||||
account = mail_config_get_account_by_source_url (source);
|
||||
}
|
||||
|
||||
if (!account)
|
||||
account = mail_config_get_default_account ();
|
||||
|
||||
composer = e_msg_composer_new_redirect (message, account->name);
|
||||
if (composer) {
|
||||
gtk_signal_connect (GTK_OBJECT (composer), "send",
|
||||
GTK_SIGNAL_FUNC (composer_send_cb), NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (composer), "postpone",
|
||||
GTK_SIGNAL_FUNC (composer_postpone_cb), NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (composer), "save-draft",
|
||||
GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL);
|
||||
} else {
|
||||
g_warning ("Could not create composer");
|
||||
}
|
||||
|
||||
return composer;
|
||||
}
|
||||
|
||||
static void
|
||||
do_redirect (CamelFolder *folder, char *uid, CamelMimeMessage *message, void *data)
|
||||
{
|
||||
EMsgComposer *composer;
|
||||
|
||||
if (!message)
|
||||
return;
|
||||
|
||||
composer = redirect_get_composer (message);
|
||||
if (composer) {
|
||||
CamelDataWrapper *wrapper;
|
||||
|
||||
wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (message));
|
||||
if (CAMEL_IS_MULTIPART (wrapper))
|
||||
e_msg_composer_add_message_attachments (composer, message, FALSE);
|
||||
|
||||
gtk_widget_show (GTK_WIDGET (composer));
|
||||
e_msg_composer_unset_changed (composer);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
redirect (GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
FolderBrowser *fb = (FolderBrowser *) user_data;
|
||||
|
||||
if (FOLDER_BROWSER_IS_DESTROYED (fb))
|
||||
return;
|
||||
|
||||
if (!check_send_configuration (fb))
|
||||
return;
|
||||
|
||||
if (fb->mail_display && fb->mail_display->current_message) {
|
||||
do_redirect (fb->folder, NULL,
|
||||
fb->mail_display->current_message,
|
||||
NULL);
|
||||
} else {
|
||||
mail_get_message (fb->folder, fb->message_list->cursor_uid,
|
||||
do_redirect, NULL, mail_thread_new);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
transfer_msg_done (gboolean ok, void *data)
|
||||
{
|
||||
|
@ -54,6 +54,8 @@ void forward_quoted (GtkWidget *widget, gpointer user_data);
|
||||
void forward_attached (GtkWidget *widget, gpointer user_data);
|
||||
void forward (GtkWidget *widget, gpointer user_data);
|
||||
|
||||
void redirect (GtkWidget *widget, gpointer user_data);
|
||||
|
||||
void reply_to_sender (GtkWidget *widget, gpointer user_data);
|
||||
void reply_to_list (GtkWidget *widget, gpointer user_data);
|
||||
void reply_to_all (GtkWidget *widget, gpointer user_data);
|
||||
|
@ -426,19 +426,35 @@ mail_fetch_mail (const char *source, int keep, const char *type, CamelOperation
|
||||
|
||||
extern CamelFolder *sent_folder;
|
||||
|
||||
static char *normal_recipients[] = {
|
||||
CAMEL_RECIPIENT_TYPE_TO,
|
||||
CAMEL_RECIPIENT_TYPE_CC,
|
||||
CAMEL_RECIPIENT_TYPE_BCC
|
||||
};
|
||||
|
||||
static char *resent_recipients[] = {
|
||||
CAMEL_RECIPIENT_TYPE_RESENT_TO,
|
||||
CAMEL_RECIPIENT_TYPE_RESENT_CC,
|
||||
CAMEL_RECIPIENT_TYPE_RESENT_BCC
|
||||
};
|
||||
|
||||
/* send 1 message to a specific transport */
|
||||
static void
|
||||
mail_send_message (CamelMimeMessage *message, const char *destination,
|
||||
CamelFilterDriver *driver, CamelException *ex)
|
||||
{
|
||||
const CamelInternetAddress *iaddr;
|
||||
CamelAddress *from, *recipients;
|
||||
CamelMessageInfo *info;
|
||||
CamelTransport *xport = NULL;
|
||||
char *transport_url = NULL;
|
||||
char *sent_folder_uri = NULL;
|
||||
const char *resent_from;
|
||||
CamelFolder *folder;
|
||||
XEvolution *xev;
|
||||
int i;
|
||||
|
||||
camel_medium_add_header (CAMEL_MEDIUM (message), "X-Mailer",
|
||||
camel_medium_set_header (CAMEL_MEDIUM (message), "X-Mailer",
|
||||
"Evolution/" VERSION SUB_VERSION " " VERSION_COMMENT);
|
||||
|
||||
camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0);
|
||||
@ -471,7 +487,27 @@ mail_send_message (CamelMimeMessage *message, const char *destination,
|
||||
return;
|
||||
}
|
||||
|
||||
camel_transport_send (xport, CAMEL_MEDIUM (message), ex);
|
||||
from = (CamelAddress *) camel_internet_address_new ();
|
||||
resent_from = camel_medium_get_header (CAMEL_MEDIUM (message), "Resent-From");
|
||||
if (resent_from) {
|
||||
camel_address_decode (from, resent_from);
|
||||
} else {
|
||||
iaddr = camel_mime_message_get_from (message);
|
||||
camel_address_copy (from, CAMEL_ADDRESS (iaddr));
|
||||
}
|
||||
|
||||
recipients = (CamelAddress *) camel_internet_address_new ();
|
||||
for (i = 0; i < 3; i++) {
|
||||
const char *type;
|
||||
|
||||
type = resent_from ? resent_recipients[i] : normal_recipients[i];
|
||||
iaddr = camel_mime_message_get_recipients (message, type);
|
||||
camel_address_cat (recipients, CAMEL_ADDRESS (iaddr));
|
||||
}
|
||||
|
||||
camel_transport_send_to (xport, CAMEL_MEDIUM (message), from, recipients, ex);
|
||||
camel_object_unref (CAMEL_OBJECT (recipients));
|
||||
camel_object_unref (CAMEL_OBJECT (from));
|
||||
|
||||
mail_tool_restore_xevolution_headers (message, xev);
|
||||
mail_tool_destroy_xevolution (xev);
|
||||
|
@ -857,7 +857,7 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException
|
||||
|
||||
camel_filter_driver_set_shell_exec_func (driver, mail_execute_shell_command, NULL);
|
||||
camel_filter_driver_set_play_sound_func (driver, session_play_sound, NULL);
|
||||
camel_filter_driver_set_play_sound_func (driver, session_system_beep, NULL);
|
||||
camel_filter_driver_set_system_beep_func (driver, session_system_beep, NULL);
|
||||
|
||||
fsearch = g_string_new ("");
|
||||
faction = g_string_new ("");
|
||||
|
Reference in New Issue
Block a user