tmp += prefix_len;
tmp = g_strchug (tmp);
} else {
- break;
+ gchar *prefix_down, *tmp_down;
+
+ /* We need this to properly check the cases of
+ some clients adding FW: instead of Fw: for
+ example */
+ prefix_down = g_utf8_strdown (prefix, -1);
+ tmp_down = g_utf8_strdown (tmp, -1);
+ if (g_str_has_prefix (tmp_down, prefix_down)) {
+ tmp += prefix_len;
+ tmp = g_strchug (tmp);
+ g_free (prefix_down);
+ g_free (tmp_down);
+ } else {
+ g_free (prefix_down);
+ g_free (tmp_down);
+ break;
+ }
}
} while (tmp);
g_slist_foreach (addresses, (GFunc)g_free, NULL);
g_slist_free (addresses);
+ if (new_list == NULL)
+ new_list = g_strdup ("");
+
return new_list;
}
for (node = addresses; node != NULL; node = g_slist_next (node)) {
const gchar *address = (const gchar *) node->data;
gchar *left_limit, *right_limit;
+
+ if (address && strstr(address, "undisclosed-recipients"))
+ continue;
+
left_limit = strstr (address, "<");
right_limit = g_strrstr (address, ">");
return g_string_free (result, FALSE);
}
+
+GSList *
+modest_text_utils_remove_duplicate_addresses_list (GSList *address_list)
+{
+ GSList *new_list, *iter;
+ GHashTable *table;
+
+ g_return_val_if_fail (address_list, NULL);
+
+ table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ new_list = address_list;
+ iter = address_list;
+ while (iter) {
+ const gchar* address = (const gchar*)iter->data;
+
+ /* We need only the email to just compare it and not
+ the full address which would make "a <a@a.com>"
+ different from "a@a.com" */
+ const gchar *email = get_email_from_address (address);
+
+ /* ignore the address if already seen */
+ if (g_hash_table_lookup (table, email) == 0) {
+ g_hash_table_insert (table, (gchar*)email, GINT_TO_POINTER(1));
+ iter = g_slist_next (iter);
+ } else {
+ GSList *tmp = g_slist_next (iter);
+ new_list = g_slist_delete_link (new_list, iter);
+ iter = tmp;
+ }
+ }
+
+ g_hash_table_unref (table);
+
+ return new_list;
+}