From 0652e8e2cd1709a90f301b21daf296069f6d51e5 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Date: Fri, 26 Nov 2010 16:42:23 -0500
Subject: [PATCH] [#4639] Fix determining default addressbook if this property
 is not set in gconf

---
 .../src/contacts/addressbook.c                |  2 +
 .../src/contacts/addressbook/eds.c            | 53 ++++++++++++++++---
 .../src/contacts/addressbook/eds.h            |  3 ++
 3 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c
index bf545a9c30..db232da8cd 100644
--- a/sflphone-client-gnome/src/contacts/addressbook.c
+++ b/sflphone-client-gnome/src/contacts/addressbook.c
@@ -132,6 +132,7 @@ addressbook_get_books_data()
 
     fill_books_data();
     addressbook_config_books();
+    determine_default_addressbook();
 
     return get_books_data();
 }
@@ -147,6 +148,7 @@ addressbook_init()
 
     fill_books_data();
     addressbook_config_books();
+    determine_default_addressbook();
 
     // Call books initialization
     init ();
diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c
index a26b6bcaf2..370fad4e65 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.c
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c
@@ -73,6 +73,12 @@ static gchar *current_name = "Default";
 
 static EBookQueryTest current_test = E_BOOK_QUERY_BEGINS_WITH;
 
+
+/**
+ * Prototypes
+ */
+void empty_books_data();
+
 /**
  * Freeing a hit instance
  */
@@ -477,6 +483,8 @@ fill_books_data ()
     ESourceList *source_list = NULL;
     gboolean default_found;
 
+    DEBUG ("Addressbook: Fill books data");
+
     source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources");
 
     if (source_list == NULL) {
@@ -491,7 +499,7 @@ fill_books_data ()
         return;
     }
 
-    if (books_data == NULL) {
+    if (books_data != NULL) {
         empty_books_data();
         books_data = NULL;
     }
@@ -523,10 +531,12 @@ fill_books_data ()
                 if (strcmp (prop, "true") == 0) {
                     book_data->isdefault = TRUE;
                     default_found = TRUE;
-                } else
+                } else {
                     book_data->isdefault = FALSE;
-            } else
+                }
+            } else {
                 book_data->isdefault = FALSE;
+            }
 
             if (strcmp (absuri+strlen (absuri)-1, "/") == 0)
                 book_data->uri = g_strjoin ("", absuri, e_source_peek_relative_uri (source), NULL);
@@ -540,13 +550,38 @@ fill_books_data ()
         g_free (absuri);
     }
 
-    if (!default_found) {
-        DEBUG ("Addressbook: No default addressbook found, using first addressbook as default");
-        book_data_t *book_data = g_slist_nth_data (books_data, 0);
-        book_data->isdefault = TRUE;
+    g_object_unref (source_list);
+}
+
+void
+determine_default_addressbook()
+{
+    GSList *list_element = books_data;
+    gboolean default_found = FALSE;
+
+    while (list_element && !default_found) {
+        book_data_t *book_data = list_element->data;
+
+        if (book_data->isdefault)
+            default_found = TRUE;
+
+        list_element = g_slist_next (list_element);
     }
 
-    g_object_unref (source_list);
+    // reset loop
+    list_element = books_data;
+
+    while (list_element && !default_found) {
+        book_data_t *book_data = list_element->data;
+
+        if (book_data->active) {
+            book_data->isdefault = TRUE;
+            DEBUG ("Addressbook: No default addressbook found, using %s addressbook as default", book_data->name);
+            default_found = TRUE;
+        }
+
+        list_element = g_slist_next (list_element);
+    }
 }
 
 void
@@ -567,6 +602,8 @@ empty_books_data()
 
         free_book_data (book_data);
     }
+
+
 }
 
 void
diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h
index 361fc88243..26d54206bd 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.h
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h
@@ -166,6 +166,9 @@ get_current_addressbook_test (void);
 GSList *
 get_books_data();
 
+void
+determine_default_addressbook();
+
 
 G_END_DECLS
 
-- 
GitLab