diff options
author | Lucian Langa <lucilanga@gnome.org> | 2009-05-04 21:08:13 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2009-05-04 21:08:13 +0800 |
commit | 073d6daf345da3f8aac6d57b306a4c7db516a99c (patch) | |
tree | 38fbf492452c11e8813bc904a1b501b2081cab5d | |
parent | 3cdb70a7d8e22bd8d55995b5bacdb798e3c15a0d (diff) | |
download | gsoc2013-evolution-073d6daf345da3f8aac6d57b306a4c7db516a99c.tar.gz gsoc2013-evolution-073d6daf345da3f8aac6d57b306a4c7db516a99c.tar.zst gsoc2013-evolution-073d6daf345da3f8aac6d57b306a4c7db516a99c.zip |
BUGFIX: 578540 - Create address book entries when sending mails
bbdb plugin, adds entry when sending any email, not only on reply.
-rw-r--r-- | plugins/bbdb/bbdb.c | 86 | ||||
-rw-r--r-- | plugins/bbdb/org-gnome-evolution-bbdb.eplug.xml | 11 |
2 files changed, 51 insertions, 46 deletions
diff --git a/plugins/bbdb/bbdb.c b/plugins/bbdb/bbdb.c index adc89dbcb2..c642dd9130 100644 --- a/plugins/bbdb/bbdb.c +++ b/plugins/bbdb/bbdb.c @@ -35,6 +35,7 @@ #include <mail/em-config.h> #include <mail/em-event.h> #include <camel/camel-mime-message.h> +#include <composer/e-msg-composer.h> #include "bbdb.h" @@ -42,7 +43,7 @@ /* Plugin hooks */ int e_plugin_lib_enable (EPluginLib *ep, int enable); -void bbdb_handle_reply (EPlugin *ep, EMEventTargetMessage *target); +void bbdb_handle_send (EPlugin *ep, EMEventTargetComposer *target); GtkWidget *bbdb_page_factory (EPlugin *ep, EConfigHookItemFactoryData *hook_data); GtkWidget *bbdb_page_factory (EPlugin *ep, EConfigHookItemFactoryData *hook_data); @@ -227,47 +228,43 @@ bbdb_do_thread (const char *name, const char *email) G_UNLOCK (todo); } -/* Code to populate addressbook when you reply to a mail follows */ void -bbdb_handle_reply (EPlugin *ep, EMEventTargetMessage *target) +bbdb_handle_send (EPlugin *ep, EMEventTargetComposer *target) { - const CamelInternetAddress *cia; - int i; - - cia = camel_mime_message_get_from (target->message); - if (cia) { - for (i = 0; i < camel_address_length (CAMEL_ADDRESS (cia)); i ++) { - const char *name=NULL, *email=NULL; - if (!(camel_internet_address_get (cia, i, &name, &email))) - continue; - bbdb_do_thread (name, email); - } - } + GConfClient *gconf; + CamelMimeMessage *message = NULL; + const CamelInternetAddress *to, *cc; + gint i, len, enable; + gconf = gconf_client_get_default (); - /* If this is a reply-all event, process To: and Cc: also. */ - if (((EEventTarget *) target)->mask & EM_EVENT_MESSAGE_REPLY_ALL) { + enable = gconf_client_get_bool (gconf, GCONF_KEY_ENABLE, NULL); + g_object_unref (G_OBJECT (gconf)); + + if (!enable) return; - } - cia = camel_mime_message_get_recipients (target->message, CAMEL_RECIPIENT_TYPE_TO); - if (cia) { - for (i = 0; i < camel_address_length (CAMEL_ADDRESS (cia)); i ++) { - const char *name=NULL, *email=NULL; - if (!(camel_internet_address_get (cia, i, &name, &email))) - continue; - bbdb_do_thread (name, email); - } - } + message = e_msg_composer_get_message(target->composer, 1); - cia = camel_mime_message_get_recipients (target->message, CAMEL_RECIPIENT_TYPE_CC); - if (cia) { - for (i = 0; i < camel_address_length (CAMEL_ADDRESS (cia)); i ++) { - const char *name=NULL, *email=NULL; - if (!(camel_internet_address_get (cia, i, &name, &email))) - continue; - bbdb_do_thread (name, email); - } - } + to = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); + + len = CAMEL_ADDRESS (to)->addresses->len; + for (i = 0; i < len; i++) { + const gchar *name, *addr; + if (!(camel_internet_address_get (to, i, &name, &addr))) + continue; + bbdb_do_thread (name, addr); + } + + + cc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); + + len = CAMEL_ADDRESS (cc)->addresses->len; + for (i = 0; i < len; i++) { + const gchar *name, *addr; + if (!(camel_internet_address_get (cc, i, &name, &addr))) + continue; + bbdb_do_thread (name, addr); + } } static void @@ -458,14 +455,18 @@ enable_toggled_cb (GtkWidget *widget, gpointer data) struct bbdb_stuff *stuff = (struct bbdb_stuff *) data; gboolean active; ESource *selected_source; + gchar *addressbook; active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); /* Save the new setting to gconf */ gconf_client_set_bool (stuff->target->gconf, GCONF_KEY_ENABLE, active, NULL); - gtk_widget_set_sensitive (stuff->option_menu, active); - if (active && !gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK, NULL)) { + gtk_widget_set_sensitive (stuff->option_menu, active); + + addressbook = gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK, NULL); + + if (active && !addressbook) { const gchar *uri = NULL; GError *error = NULL; @@ -484,6 +485,7 @@ enable_toggled_cb (GtkWidget *widget, gpointer data) g_error_free (error); } } + g_free (addressbook); } static void @@ -492,18 +494,22 @@ enable_gaim_toggled_cb (GtkWidget *widget, gpointer data) struct bbdb_stuff *stuff = (struct bbdb_stuff *) data; gboolean active; ESource *selected_source; + char *addressbook_gaim; active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); /* Save the new setting to gconf */ gconf_client_set_bool (stuff->target->gconf, GCONF_KEY_ENABLE_GAIM, active, NULL); + addressbook_gaim = gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, NULL); gtk_widget_set_sensitive (stuff->gaim_option_menu, active); - if (active && !gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, NULL)) { + if (active && !addressbook_gaim) { selected_source = e_source_combo_box_get_active ( E_SOURCE_COMBO_BOX (stuff->gaim_option_menu)); gconf_client_set_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, e_source_get_uri (selected_source), NULL); } + + g_free (addressbook_gaim); } static void @@ -636,7 +642,7 @@ bbdb_page_factory (EPlugin *ep, EConfigHookItemFactoryData *hook_data) gtk_box_pack_start (GTK_BOX (hbox), inner_vbox, FALSE, FALSE, 0); /* Enable BBDB checkbox */ - check = gtk_check_button_new_with_mnemonic (_("_Auto-create address book entries when replying to messages")); + check = gtk_check_button_new_with_mnemonic (_("Create _address book entries when sending mails")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), gconf_client_get_bool (target->gconf, GCONF_KEY_ENABLE, NULL)); g_signal_connect (GTK_TOGGLE_BUTTON (check), "toggled", G_CALLBACK (enable_toggled_cb), stuff); gtk_box_pack_start (GTK_BOX (inner_vbox), check, FALSE, FALSE, 0); diff --git a/plugins/bbdb/org-gnome-evolution-bbdb.eplug.xml b/plugins/bbdb/org-gnome-evolution-bbdb.eplug.xml index ff3ff9f8d8..8f9af69821 100644 --- a/plugins/bbdb/org-gnome-evolution-bbdb.eplug.xml +++ b/plugins/bbdb/org-gnome-evolution-bbdb.eplug.xml @@ -11,12 +11,11 @@ <hook class="org.gnome.evolution.mail.events:1.0"> <event - id="message.replying" - handle="bbdb_handle_reply" - target="message" - /> - </hook> - + id="composer.presendchecks" + handle="bbdb_handle_send" + target="message" + /> + </hook> <hook class="org.gnome.evolution.mail.config:1.0"> <group id="org.gnome.evolution.mail.prefs" target="prefs"> <item type="page" path="80.bbdb" _label="BBDB" factory="bbdb_page_factory"/> |