Refactored the code that joins the addresses in a single string
[modest] / src / modest-text-utils.c
index 7bceaf0..db00b31 100644 (file)
@@ -163,6 +163,8 @@ static gchar*   modest_text_utils_quote_html       (const gchar *text,
                                                    GList *attachments,
                                                    int limit);
 static gchar*   get_email_from_address (const gchar *address);
+static void     remove_extra_spaces (gchar *string);
+
 
 
 /* ******************************************************************* */
@@ -694,12 +696,56 @@ modest_text_utils_split_addresses_list (const gchar *addresses)
        addr = g_strndup (my_addrs, end - my_addrs);
        g_strchomp (addr);
 
+       remove_extra_spaces (addr);
+
        head = g_slist_append (NULL, addr);
        head->next = modest_text_utils_split_addresses_list (end); /* recurse */
 
        return head;
 }
 
+gchar *
+modest_text_utils_join_addresses (const gchar *from,
+                                 const gchar *to,
+                                 const gchar *cc,
+                                 const gchar *bcc)
+{
+       GString *buffer;
+       gboolean add_separator = FALSE;
+
+       buffer = g_string_new ("");
+
+       if (from && strlen (from)) {
+               buffer = g_string_append (buffer, from);
+               add_separator = TRUE;
+       }
+       if (to && strlen (to)) {
+               if (add_separator)
+                       buffer = g_string_append (buffer, "; ");
+               else
+                       add_separator = TRUE;
+
+               buffer = g_string_append (buffer, to);
+       }
+       if (cc && strlen (cc)) {
+               if (add_separator)
+                       buffer = g_string_append (buffer, "; ");
+               else
+                       add_separator = TRUE;
+
+               buffer = g_string_append (buffer, cc);
+       }
+       if (bcc && strlen (bcc)) {
+               if (add_separator)
+                       buffer = g_string_append (buffer, "; ");
+               else
+                       add_separator = TRUE;
+
+               buffer = g_string_append (buffer, bcc);
+       }
+
+       return g_string_free (buffer, FALSE);
+}
 
 void
 modest_text_utils_address_range_at_position (const gchar *recipients_list,
@@ -1936,6 +1982,20 @@ remove_quotes (gchar **quotes)
        }
 }
 
+static void
+remove_extra_spaces (gchar *string)
+{
+       gchar *start;
+
+       start = string;
+       while (start && start[0] != '\0') {
+               if ((start[0] == ' ') && (start[1] == ' ')) {
+                       g_strchug (start+1);
+               }
+               start++;
+       }
+}
+
 gchar *
 modest_text_utils_escape_mnemonics (const gchar *text)
 {