[balsa/gtk3] Store group as distribution list, if implemented



commit 0bbf2acd1a0d2e01576522763fc50f0e3a63373d
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Sun Sep 30 21:03:05 2012 -0400

    Store group as distribution list, if implemented
    
    	* src/store-address.c (store_address_add_address),
    	(store_address_add_list): store a group as a distribution list,
    	if the address book implements lists.

 ChangeLog           |    6 ++++++
 src/store-address.c |   51 ++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 44 insertions(+), 13 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 7601f9e..14bf404 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2012-09-30  Peter Bloomfield
 
+	* src/store-address.c (store_address_add_address),
+	(store_address_add_list): store a group as a distribution list,
+	if the address book implements lists.
+
+2012-09-30  Peter Bloomfield
+
 	* libbalsa/libbalsa.c (ask_cert_real): replace "&" by "&amp;" in
 	marked-up string.
 
diff --git a/src/store-address.c b/src/store-address.c
index 235532d..ebd399e 100644
--- a/src/store-address.c
+++ b/src/store-address.c
@@ -376,7 +376,28 @@ store_address_add_address(StoreAddressInfo * info,
     address = libbalsa_address_new();
     address->full_name =
         g_strdup(ia->name ? ia->name : group ? group->name : NULL);
-    address->address_list = g_list_prepend(NULL, g_strdup(INTERNET_ADDRESS_MAILBOX (ia)->addr));
+    if (INTERNET_ADDRESS_IS_GROUP(ia)) {
+        InternetAddressList *members;
+        int j;
+
+        address->address_list = NULL;
+        members = INTERNET_ADDRESS_GROUP(ia)->members;
+
+        for (j = 0; j < internet_address_list_length(members); j++) {
+            InternetAddress *member_address =
+                internet_address_list_get_address(members, j);
+            if (INTERNET_ADDRESS_IS_MAILBOX(member_address))
+                address->address_list =
+                    g_list_prepend(address->address_list,
+                                   g_strdup(INTERNET_ADDRESS_MAILBOX
+                                            (member_address)->addr));
+        }
+        address->address_list = g_list_reverse(address->address_list);
+    } else {
+        address->address_list =
+            g_list_prepend(NULL,
+                           g_strdup(INTERNET_ADDRESS_MAILBOX(ia)->addr));
+    }
     ew = libbalsa_address_get_edit_widget(address, entries, NULL, NULL);
     g_object_unref(address);
 
@@ -417,27 +438,31 @@ store_address_add_lbaddress(StoreAddressInfo * info,
  * take a list of addresses and pass them one at a time to
  * store_address_add_address */
 static void
-store_address_add_list(StoreAddressInfo * info,
-                       const gchar * label,
+store_address_add_list(StoreAddressInfo    * info,
+                       const gchar         * label,
                        InternetAddressList * list)
 {
     int i, j;
-    
+
     if (!list)
         return;
 
-    for (i = 0; i < internet_address_list_length (list); i++) {
-        InternetAddress *ia = internet_address_list_get_address (list, i);
-	
-        if (INTERNET_ADDRESS_IS_MAILBOX (ia))
+    for (i = 0; i < internet_address_list_length(list); i++) {
+        InternetAddress *ia = internet_address_list_get_address(list, i);
+
+        if (INTERNET_ADDRESS_IS_MAILBOX(ia)) {
             store_address_add_address(info, label, ia, NULL);
-        else {
-            InternetAddressList *members = INTERNET_ADDRESS_GROUP (ia)->members;
+        } else if (info->current_address_book->dist_list_mode) {
+            store_address_add_address(info, label, ia, ia);
+        } else {
+            InternetAddressList *members =
+                INTERNET_ADDRESS_GROUP(ia)->members;
 
-            for (j = 0; j < internet_address_list_length (members); j++) {
-                InternetAddress *member_address = internet_address_list_get_address (members, j);
+            for (j = 0; j < internet_address_list_length(members); j++) {
+                InternetAddress *member_address =
+                    internet_address_list_get_address(members, j);
 
-                if (INTERNET_ADDRESS_IS_MAILBOX (member_address))
+                if (INTERNET_ADDRESS_IS_MAILBOX(member_address))
                     store_address_add_address(info, label, member_address,
                                               ia);
             }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]