[evolution/evolution-3-12] Automatic Contacts can duplicate recipients in the set book
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/evolution-3-12] Automatic Contacts can duplicate recipients in the set book
- Date: Mon, 1 Dec 2014 11:14:34 +0000 (UTC)
commit cab6e7c939cd7d2eadb7f1bae5065d5cdab43bcd
Author: Milan Crha <mcrha redhat com>
Date: Mon Dec 1 12:09:19 2014 +0100
Automatic Contacts can duplicate recipients in the set book
The duplication could happen when the destination book was not set
to be used for autocompletion. Always checking the destination
book, and check it as the first, will not do unnecessary tests
in other books and will make sure that the contacts are not
blindly added there.
plugins/bbdb/bbdb.c | 62 +++++++++++++++++++++++++++++++-------------------
1 files changed, 38 insertions(+), 24 deletions(-)
---
diff --git a/plugins/bbdb/bbdb.c b/plugins/bbdb/bbdb.c
index 4d95ecf..f62ff79 100644
--- a/plugins/bbdb/bbdb.c
+++ b/plugins/bbdb/bbdb.c
@@ -287,6 +287,7 @@ bbdb_do_it (EBookClient *client,
GError *error = NULL;
EShell *shell;
ESourceRegistry *registry;
+ ESource *dest_source;
EClientCache *client_cache;
GList *addressbooks;
GList *aux_addressbooks;
@@ -313,34 +314,47 @@ bbdb_do_it (EBookClient *client,
registry = e_shell_get_registry (shell);
client_cache = e_shell_get_client_cache (shell);
addressbooks = e_source_registry_list_enabled (registry, E_SOURCE_EXTENSION_ADDRESS_BOOK);
+ dest_source = e_client_get_source (E_CLIENT (client));
+
+ /* Test the destination client first */
+ if (g_list_find (addressbooks, dest_source)) {
+ addressbooks = g_list_remove (addressbooks, dest_source);
+ g_object_unref (dest_source);
+ }
+
+ addressbooks = g_list_prepend (addressbooks, g_object_ref (dest_source));
aux_addressbooks = addressbooks;
while (aux_addressbooks != NULL) {
- /* Check only addressbooks with autocompletion enabled */
- has_autocomplete = e_source_has_extension (aux_addressbooks->data,
E_SOURCE_EXTENSION_AUTOCOMPLETE);
- if (!has_autocomplete) {
- aux_addressbooks = aux_addressbooks->next;
- continue;
- }
+ if (g_strcmp0 (e_source_get_uid (dest_source), e_source_get_uid (aux_addressbooks->data)) ==
0) {
+ client_addressbook = g_object_ref (client);
+ } else {
+ /* Check only addressbooks with autocompletion enabled */
+ has_autocomplete = e_source_has_extension (aux_addressbooks->data,
E_SOURCE_EXTENSION_AUTOCOMPLETE);
+ if (!has_autocomplete) {
+ aux_addressbooks = aux_addressbooks->next;
+ continue;
+ }
- autocomplete_extension = e_source_get_extension (aux_addressbooks->data,
E_SOURCE_EXTENSION_AUTOCOMPLETE);
- on_autocomplete = e_source_autocomplete_get_include_me (autocomplete_extension);
- if (!on_autocomplete) {
- aux_addressbooks = aux_addressbooks->next;
- continue;
- }
+ autocomplete_extension = e_source_get_extension (aux_addressbooks->data,
E_SOURCE_EXTENSION_AUTOCOMPLETE);
+ on_autocomplete = e_source_autocomplete_get_include_me (autocomplete_extension);
+ if (!on_autocomplete) {
+ aux_addressbooks = aux_addressbooks->next;
+ continue;
+ }
- client_addressbook = (EBookClient *) e_client_cache_get_client_sync (
- client_cache, (ESource *) aux_addressbooks->data,
- E_SOURCE_EXTENSION_ADDRESS_BOOK,
- NULL, &error);
+ client_addressbook = (EBookClient *) e_client_cache_get_client_sync (
+ client_cache, (ESource *) aux_addressbooks->data,
+ E_SOURCE_EXTENSION_ADDRESS_BOOK,
+ NULL, &error);
- if (error != NULL) {
- g_warning ("bbdb: Failed to get addressbook client: %s\n", error->message);
- g_clear_error (&error);
- aux_addressbooks = aux_addressbooks->next;
- continue;
+ if (error != NULL) {
+ g_warning ("bbdb: Failed to get addressbook client: %s\n", error->message);
+ g_clear_error (&error);
+ aux_addressbooks = aux_addressbooks->next;
+ continue;
+ }
}
/* If any contacts exists with this email address, don't do anything */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]