[balsa/wip/gtk4: 181/351] address: Declare it final
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 181/351] address: Declare it final
- Date: Wed, 23 May 2018 21:32:10 +0000 (UTC)
commit 4362a430fa4e61619c7b72e26b305b154bf249f1
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Sat Feb 17 18:34:10 2018 -0500
address: Declare it final
G_DECLARE_FINAL_TYPE for LibBalsaAddress, take all members
private, and provide getters and setters.
libbalsa/abook-completion.c | 9 --
libbalsa/abook-completion.h | 1 -
libbalsa/address-book-extern.c | 16 +--
libbalsa/address-book-gpe.c | 156 ++++++++++++++--------
libbalsa/address-book-ldap.c | 194 +++++++++++++++++-----------
libbalsa/address-book-ldif.c | 100 ++++++++++-----
libbalsa/address-book-osmo.c | 32 +++--
libbalsa/address-book-rubrica.c | 86 ++++++++-----
libbalsa/address-book-text.c | 47 ++++---
libbalsa/address-book-vcard.c | 84 +++++++-----
libbalsa/address-book.c | 11 --
libbalsa/address-book.h | 2 -
libbalsa/address.c | 261 +++++++++++++++++++++++++++----------
libbalsa/address.h | 94 ++++++-------
libbalsa/rfc2445.c | 14 +-
libbalsa/rfc6350.c | 36 ++----
src/ab-main.c | 13 ++-
src/ab-window.c | 20 ++-
src/balsa-mime-widget-text.c | 27 ++--
src/balsa-mime-widget-vcalendar.c | 5 +-
src/balsa-print-object-text.c | 24 ++--
src/store-address.c | 27 ++--
22 files changed, 762 insertions(+), 497 deletions(-)
---
diff --git a/libbalsa/abook-completion.c b/libbalsa/abook-completion.c
index 3b975cf..3d63592 100644
--- a/libbalsa/abook-completion.c
+++ b/libbalsa/abook-completion.c
@@ -92,15 +92,6 @@ completion_data_extract(CompletionData * data)
return data->string;
}
-gint
-address_compare(LibBalsaAddress *a, LibBalsaAddress *b)
-{
- g_return_val_if_fail(a != NULL, -1);
- g_return_val_if_fail(b != NULL, 1);
-
- return g_ascii_strcasecmp(a->full_name, b->full_name);
-}
-
/*
* A LibBalsaCompletionStrncmpFunc for matching words instead of the
* whole string.
diff --git a/libbalsa/abook-completion.h b/libbalsa/abook-completion.h
index 20d0de4..dc01697 100644
--- a/libbalsa/abook-completion.h
+++ b/libbalsa/abook-completion.h
@@ -37,7 +37,6 @@ CompletionData *completion_data_new(InternetAddress * ia,
const gchar * nick_name);
void completion_data_free(CompletionData * data);
gchar *completion_data_extract(CompletionData * data);
-gint address_compare(LibBalsaAddress *a, LibBalsaAddress *b);
gint strncmp_word(const gchar * s1, const gchar * s2, gsize n);
#endif
diff --git a/libbalsa/address-book-extern.c b/libbalsa/address-book-extern.c
index 36737b2..328d4ee 100644
--- a/libbalsa/address-book-extern.c
+++ b/libbalsa/address-book-extern.c
@@ -195,12 +195,9 @@ lbe_load_cb(const gchar *email, const gchar *name, void *data)
LibBalsaAddress *address = libbalsa_address_new();
/* The extern database doesn't support Id's, sorry! */
- address->nick_name = g_strdup(_("No-Id"));
- address->address_list = g_list_append(address->address_list,
- g_strdup(email));
-
- if (name) address->full_name = g_strdup(name);
- else address->full_name = g_strdup(_("No-Name"));
+ libbalsa_address_set_nick_name(address, _("No-Id"));
+ libbalsa_address_add_addr(address, email);
+ libbalsa_address_set_full_name(address, name != NULL ? name : _("No-Name"));
d->callback(d->ab, address, d->closure);
g_object_unref(G_OBJECT(address));
}
@@ -285,10 +282,11 @@ libbalsa_address_book_externq_add_address(LibBalsaAddressBook * ab,
ex = LIBBALSA_ADDRESS_BOOK_EXTERN(ab);
if(ex->save) {
+ const gchar *addr = libbalsa_address_get_addr(new_address);
g_snprintf(command, sizeof(command), "%s \"%s\" \"%s\" \"%s\"",
- ex->save,
- (gchar *) new_address->address_list->data,
- new_address->full_name, "TODO");
+ ex->save,
+ addr,
+ libbalsa_address_get_full_name(new_address), "TODO");
if( (gc = popen(command, "r")) == NULL)
return LBABERR_CANNOT_WRITE;
diff --git a/libbalsa/address-book-gpe.c b/libbalsa/address-book-gpe.c
index e33b3e4..a11abd2 100644
--- a/libbalsa/address-book-gpe.c
+++ b/libbalsa/address-book-gpe.c
@@ -239,23 +239,30 @@ libbalsa_address_book_gpe_open_db(LibBalsaAddressBookGpe * ab_gpe)
static int
gpe_read_attr(void *arg, int argc, char **argv, char **names)
{
- LibBalsaAddress * a= arg;
+ LibBalsaAddress *address = arg;
/* follow read_entry_data/db_set_multi_data */
if(g_ascii_strcasecmp(argv[0], "NAME") == 0 &&
- !a->full_name) a->full_name = g_strdup(argv[1]);
- else if(g_ascii_strcasecmp(argv[0], "GIVEN_NAME") == 0 &&
- !a->first_name) a->first_name = g_strdup(argv[1]);
- else if(g_ascii_strcasecmp(argv[0], "FAMILY_NAME") == 0 &&
- !a->last_name) a->last_name = g_strdup(argv[1]);
- else if(g_ascii_strcasecmp(argv[0], "NICKNAME") == 0 &&
- !a->nick_name) a->nick_name = g_strdup(argv[1]);
- else if(g_ascii_strcasecmp(argv[0], "WORK.ORGANIZATION") == 0 &&
- !a->organization) a->organization = g_strdup(argv[1]);
- else if(g_ascii_strcasecmp(argv[0], "HOME.EMAIL") == 0)
- a->address_list = g_list_prepend(a->address_list, g_strdup(argv[1]));
- else if(g_ascii_strcasecmp(argv[0], "WORK.EMAIL") == 0)
- a->address_list = g_list_prepend(a->address_list, g_strdup(argv[1]));
+ libbalsa_address_get_full_name(address) == NULL) {
+ libbalsa_address_set_full_name(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "GIVEN_NAME") == 0 &&
+ libbalsa_address_get_first_name(address) == NULL) {
+ libbalsa_address_set_first_name(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "FAMILY_NAME") == 0 &&
+ libbalsa_address_get_last_name(address) == NULL) {
+ libbalsa_address_set_last_name(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "NICKNAME") == 0 &&
+ libbalsa_address_get_nick_name(address) == NULL) {
+ libbalsa_address_set_nick_name(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "WORK.ORGANIZATION") == 0 &&
+ libbalsa_address_get_organization(address) == NULL) {
+ libbalsa_address_set_organization(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "HOME.EMAIL") == 0) {
+ libbalsa_address_add_addr(address, argv[1]);
+ } else if(g_ascii_strcasecmp(argv[0], "WORK.EMAIL") == 0) {
+ libbalsa_address_add_addr(address, argv[1]);
+ }
+
return 0;
}
@@ -269,7 +276,7 @@ gpe_read_attr(void *arg, int argc, char **argv, char **names)
* NULL on failure (both first and last names invalid.
*/
static gchar *
-create_name(gchar * first, gchar * last)
+create_name(const gchar * first, const gchar * last)
{
if ((first == NULL) && (last == NULL))
return NULL;
@@ -291,7 +298,7 @@ static int
gpe_read_address(void *arg, int argc, char **argv, char **names)
{
struct gpe_closure *gc = arg;
- LibBalsaAddress * a= libbalsa_address_new();
+ LibBalsaAddress *address = libbalsa_address_new();
guint uid = atoi(argv[0]);
/* follow read_entry_data. FIXME: error reporting */
@@ -299,21 +306,31 @@ gpe_read_address(void *arg, int argc, char **argv, char **names)
gchar *sql =
sqlite3_mprintf("select tag,value from contacts where urn=%d",
uid);
- sqlite3_exec(gc->gpe->db, sql, gpe_read_attr, a, NULL);
+ sqlite3_exec(gc->gpe->db, sql, gpe_read_attr, address, NULL);
sqlite3_free(sql);
#else /* HAVE_SQLITE3 */
sqlite_exec_printf (gc->gpe->db,
"select tag,value from contacts where urn=%d",
gpe_read_attr, a, NULL, uid);
#endif /* HAVE_SQLITE3 */
- if(!a->address_list) { /* entry without address: ignore! */
- g_object_unref(a);
+ if(libbalsa_address_get_addr_list(address) == NULL) {
+ /* entry without address: ignore! */
+ g_object_unref(address);
return 0;
}
- if(!a->full_name)
- a->full_name = create_name(a->first_name, a->last_name);
- g_object_set_data(G_OBJECT(a), "urn", GUINT_TO_POINTER(uid));
- gc->callback(LIBBALSA_ADDRESS_BOOK(gc->gpe), a, gc->closure);
+ if (libbalsa_address_get_full_name(address) == NULL) {
+ const gchar *first_name;
+ const gchar *last_name;
+ gchar *full_name;
+
+ first_name = libbalsa_address_get_first_name(address);
+ last_name = libbalsa_address_get_last_name(address);
+ full_name = create_name(first_name, last_name);
+ libbalsa_address_set_full_name(address, full_name);
+ g_free(full_name);
+ }
+ g_object_set_data(G_OBJECT(address), "urn", GUINT_TO_POINTER(uid));
+ gc->callback(LIBBALSA_ADDRESS_BOOK(gc->gpe), address, gc->closure);
return 0;
}
@@ -420,6 +437,7 @@ libbalsa_address_book_gpe_add_address(LibBalsaAddressBook *ab,
LibBalsaAddress *address)
{
LibBalsaAddressBookGpe *ab_gpe = LIBBALSA_ADDRESS_BOOK_GPE(ab);
+ const gchar *addr;
int r;
guint id;
char *err = NULL;
@@ -427,8 +445,9 @@ libbalsa_address_book_gpe_add_address(LibBalsaAddressBook *ab,
gchar *sql;
#endif /* HAVE_SQLITE3 */
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
+ addr = libbalsa_address_get_addr(address);
+ g_return_val_if_fail(addr != NULL, LBABERR_CANNOT_WRITE);
if (ab_gpe->db == NULL) {
if(!libbalsa_address_book_gpe_open_db(ab_gpe))
@@ -456,13 +475,17 @@ libbalsa_address_book_gpe_add_address(LibBalsaAddressBook *ab,
#else /* HAVE_SQLITE3 */
id = sqlite_last_insert_rowid(ab_gpe->db);
#endif /* HAVE_SQLITE3 */
- INSERT_ATTR(ab_gpe->db,id, "NAME", address->full_name);
- INSERT_ATTR(ab_gpe->db,id, "GIVEN_NAME", address->first_name);
- INSERT_ATTR(ab_gpe->db,id, "FAMILY_NAME", address->last_name);
- INSERT_ATTR(ab_gpe->db,id, "NICKNAME", address->nick_name);
- INSERT_ATTR(ab_gpe->db,id, "WORK.ORGANIZATION", address->organization);
- INSERT_ATTR(ab_gpe->db,id, "WORK.EMAIL",
- (char*)address->address_list->data);
+ INSERT_ATTR(ab_gpe->db,id, "NAME",
+ libbalsa_address_get_full_name(address));
+ INSERT_ATTR(ab_gpe->db,id, "GIVEN_NAME",
+ libbalsa_address_get_first_name(address));
+ INSERT_ATTR(ab_gpe->db,id, "FAMILY_NAME",
+ libbalsa_address_get_last_name(address));
+ INSERT_ATTR(ab_gpe->db,id, "NICKNAME",
+ libbalsa_address_get_nick_name(address));
+ INSERT_ATTR(ab_gpe->db,id, "WORK.ORGANIZATION",
+ libbalsa_address_get_organization(address));
+ INSERT_ATTR(ab_gpe->db,id, "WORK.EMAIL", addr);
#ifdef HAVE_SQLITE3
sql = sqlite3_mprintf("insert into contacts values "
"('%d', 'MODIFIED', %d)",
@@ -542,8 +565,8 @@ libbalsa_address_book_gpe_remove_address(LibBalsaAddressBook *ab,
LibBalsaAddressBookGpe *ab_gpe = LIBBALSA_ADDRESS_BOOK_GPE(ab);
guint uid;
char *err;
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
+
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
if (ab_gpe->db == NULL) {
if( !libbalsa_address_book_gpe_open_db(ab_gpe))
@@ -552,7 +575,7 @@ libbalsa_address_book_gpe_remove_address(LibBalsaAddressBook *ab,
uid = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(address), "urn"));
if(!uid)/* safety check, perhaps unnecessary */
return LBABERR_CANNOT_WRITE;
-
+
err = db_delete_by_uid(ab_gpe->db, uid);
if(err) {
libbalsa_address_book_set_status(ab, g_strdup(err));
@@ -592,6 +615,7 @@ libbalsa_address_book_gpe_modify_address(LibBalsaAddressBook *ab,
LibBalsaAddress *newval)
{
LibBalsaAddressBookGpe *ab_gpe = LIBBALSA_ADDRESS_BOOK_GPE(ab);
+ const gchar *addr;
guint uid;
int r;
char *err;
@@ -599,9 +623,11 @@ libbalsa_address_book_gpe_modify_address(LibBalsaAddressBook *ab,
gchar *sql;
#endif /* HAVE_SQLITE3 */
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(newval->address_list, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(newval != NULL, LBABERR_CANNOT_WRITE);
+
+ addr = libbalsa_address_get_addr(newval);
+ g_return_val_if_fail(addr != NULL, LBABERR_CANNOT_WRITE);
if (ab_gpe->db == NULL) {
if( !libbalsa_address_book_gpe_open_db(ab_gpe))
@@ -648,13 +674,17 @@ libbalsa_address_book_gpe_modify_address(LibBalsaAddressBook *ab,
NULL, NULL, &err, uid)) != SQLITE_OK)
goto rollback;
#endif /* HAVE_SQLITE3 */
- INSERT_ATTR_R(ab_gpe->db,uid, "NAME", newval->full_name);
- INSERT_ATTR_R(ab_gpe->db,uid, "GIVEN_NAME", newval->first_name);
- INSERT_ATTR_R(ab_gpe->db,uid, "FAMILY_NAME", newval->last_name);
- INSERT_ATTR_R(ab_gpe->db,uid, "NICKNAME", newval->nick_name);
- INSERT_ATTR_R(ab_gpe->db,uid, "WORK.ORGANIZATION", newval->organization);
- INSERT_ATTR_R(ab_gpe->db,uid, "WORK.EMAIL",
- (char*)newval->address_list->data);
+ INSERT_ATTR_R(ab_gpe->db,uid, "NAME",
+ libbalsa_address_get_full_name(newval));
+ INSERT_ATTR_R(ab_gpe->db,uid, "GIVEN_NAME",
+ libbalsa_address_get_first_name(newval));
+ INSERT_ATTR_R(ab_gpe->db,uid, "FAMILY_NAME",
+ libbalsa_address_get_last_name(newval));
+ INSERT_ATTR_R(ab_gpe->db,uid, "NICKNAME",
+ libbalsa_address_get_nick_name(newval));
+ INSERT_ATTR_R(ab_gpe->db,uid, "WORK.ORGANIZATION",
+ libbalsa_address_get_organization(newval));
+ INSERT_ATTR_R(ab_gpe->db,uid, "WORK.EMAIL", addr);
#ifdef HAVE_SQLITE3
sql = sqlite3_mprintf("insert into contacts values "
"('%d', 'MODIFIED', %d)", uid, time(NULL));
@@ -703,8 +733,9 @@ static int
gpe_read_completion(void *arg, int argc, char **argv, char **names)
{
struct gpe_completion_closure *gc = arg;
- LibBalsaAddress * a= libbalsa_address_new();
+ LibBalsaAddress *address = libbalsa_address_new();
InternetAddress *ia;
+ GList *addr_list;
GList *l;
guint uid = atoi(argv[0]);
#ifdef HAVE_SQLITE3
@@ -713,7 +744,7 @@ gpe_read_completion(void *arg, int argc, char **argv, char **names)
/* follow read_entry_data. FIXME: error reporting */
sql = sqlite3_mprintf("select tag,value from contacts where urn=%d",
uid);
- sqlite3_exec(gc->db, sql, gpe_read_attr, a, NULL);
+ sqlite3_exec(gc->db, sql, gpe_read_attr, address, NULL);
sqlite3_free(sql);
#else /* HAVE_SQLITE3 */
@@ -722,17 +753,34 @@ gpe_read_completion(void *arg, int argc, char **argv, char **names)
"select tag,value from contacts where urn=%d",
gpe_read_attr, a, NULL, uid);
#endif /* HAVE_SQLITE3 */
- if(!a->address_list) { /* entry without address: ignore! */
- g_object_unref(a);
+
+ addr_list = libbalsa_address_get_addr_list(address);
+ if (addr_list == NULL) {
+ /* entry without address: ignore! */
+ g_object_unref(address);
return 0;
}
- if(!a->full_name)
- a->full_name = create_name(a->first_name, a->last_name);
- for(l=a->address_list; l; l = l->next) {
- ia = internet_address_mailbox_new(a->full_name, l->data);
+
+ if (libbalsa_address_get_full_name(address) == NULL) {
+ const gchar *first_name;
+ const gchar *last_name;
+ gchar *full_name;
+
+ first_name = libbalsa_address_get_first_name(address);
+ last_name = libbalsa_address_get_last_name(address);
+ full_name = create_name(first_name, last_name);
+ libbalsa_address_set_full_name(address, full_name);
+ g_free(full_name);
+ }
+
+ for (l = addr_list; l != NULL; l = l->next) {
+ const gchar *full_name = libbalsa_address_get_full_name(address);
+ ia = internet_address_mailbox_new(full_name, (gchar *) l->data);
gc->res = g_list_prepend(gc->res, ia);
}
- g_object_unref(G_OBJECT(a));
+
+ g_object_unref(address);
+
return 0;
}
diff --git a/libbalsa/address-book-ldap.c b/libbalsa/address-book-ldap.c
index b9af368..b5a5705 100644
--- a/libbalsa/address-book-ldap.c
+++ b/libbalsa/address-book-ldap.c
@@ -454,18 +454,25 @@ libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
*/
if ((vals=ldap_get_values_len(ab_ldap->directory, e, attr)) != NULL) {
for (i = 0; vals[i] != NULL; i++) {
- if ((g_ascii_strcasecmp(attr, "sn") == 0) && (!last))
- last = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
- if ((g_ascii_strcasecmp(attr, "cn") == 0) && (!cn))
- cn = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
- if ((g_ascii_strcasecmp(attr, "givenName") == 0) && (!first))
- first = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
- if ((g_ascii_strcasecmp(attr, "o") == 0) && (!org))
- org = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
- if ((g_ascii_strcasecmp(attr, "uid") == 0) && (!uid))
- uid = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
- if ((g_ascii_strcasecmp(attr, "mail") == 0) && (!email))
- email = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ if (g_ascii_strcasecmp(attr, "sn") == 0) {
+ if (last == NULL)
+ last = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ } else if (g_ascii_strcasecmp(attr, "cn") == 0) {
+ if (cn == NULL)
+ cn = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ } else if (g_ascii_strcasecmp(attr, "givenName") == 0) {
+ if (first == NULL)
+ first = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ } else if (g_ascii_strcasecmp(attr, "o") == 0) {
+ if (org == NULL)
+ org = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ } else if (g_ascii_strcasecmp(attr, "uid") == 0) {
+ if (uid == NULL)
+ uid = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ } else if (g_ascii_strcasecmp(attr, "mail") == 0) {
+ if (email == NULL)
+ email = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
+ }
}
ldap_value_free_len(vals);
}
@@ -475,21 +482,33 @@ libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
* Record will have e-mail (searched)
*/
if(email == NULL) email = g_strdup("none");
- g_return_val_if_fail(email != NULL, NULL);
address = libbalsa_address_new();
- if (cn)
- address->full_name = cn;
- else {
- address->full_name = create_name(first, last);
- if(!address->full_name)
- address->full_name = g_strdup(_("No-Name"));
+ if (cn != NULL) {
+ libbalsa_address_set_full_name(address, cn);
+ g_free(cn);
+ } else {
+ gchar *full_name = create_name(first, last);
+
+ if (full_name != NULL) {
+ libbalsa_address_set_full_name(address, full_name);
+ g_free(full_name);
+ } else {
+ libbalsa_address_set_full_name(address, _("No-Name"));
+ }
}
- address->first_name = first;
- address->last_name = last;
- address->nick_name = uid;
- address->organization = org;
- address->address_list = g_list_prepend(address->address_list, email);
+
+ libbalsa_address_set_first_name(address, first);
+ libbalsa_address_set_last_name(address, last);
+ libbalsa_address_set_nick_name(address, uid);
+ libbalsa_address_set_organization(address, org);
+ libbalsa_address_add_addr(address, email);
+
+ g_free(first);
+ g_free(last);
+ g_free(uid);
+ g_free(org);
+ g_free(email);
return address;
}
@@ -562,7 +581,7 @@ create_name(gchar * first, gchar * last)
#define SETMOD(mods,modarr,op,attr,strv,val) \
do { (mods) = &(modarr); (modarr).mod_type=attr; (modarr).mod_op=op;\
- (strv)[0]=(val); (modarr).mod_values=strv; \
+ (strv)[0]=(char*)(val); (modarr).mod_values=strv; \
} while(0)
static LibBalsaABErr
@@ -581,9 +600,12 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
char *sn[] = {NULL, NULL};
char *mail[] = {NULL, NULL};
LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+ const gchar *addr;
+ const gchar *item;
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
+ addr = libbalsa_address_get_addr(address);
+ g_return_val_if_fail(addr != NULL, LBABERR_CANNOT_WRITE);
if (ab_ldap->directory == NULL) {
if(libbalsa_address_book_ldap_open_connection(ab_ldap) != LDAP_SUCCESS)
@@ -594,10 +616,10 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
libbalsa_address_book_set_status
(ab, _("Undefined location of user address book"));
return LBABERR_CANNOT_WRITE;
- }
+ }
dn = g_strdup_printf("mail=%s,%s",
- (char*)address->address_list->data,
+ addr,
ab_ldap->priv_book_dn);
mods[0] = &modarr[0];
modarr[0].mod_op = LDAP_MOD_ADD;
@@ -605,27 +627,33 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
modarr[0].mod_values = object_class_values;
cnt = 1;
- if(address->full_name) {
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"cn",cn,address->full_name);
+ item = libbalsa_address_get_full_name(address);
+ if (item != NULL) {
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"cn",cn,item);
cnt++;
}
- if(address->first_name) {
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"givenName",gn,
- address->first_name);
+
+ item = libbalsa_address_get_first_name(address);
+ if (item != NULL) {
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"givenName",gn, item);
cnt++;
}
- if(address->last_name) {
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"sn",sn,address->last_name);
+
+ item = libbalsa_address_get_last_name(address);
+ if (item != NULL) {
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"sn",sn,item);
cnt++;
}
- if(address->organization) {
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"o",org,
- address->organization);
+
+ item = libbalsa_address_get_organization(address);
+ if (item != NULL) {
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"o",org, item);
cnt++;
}
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"mail",mail,
- (char*)address->address_list->data);
+
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_ADD,"mail",mail, addr);
cnt++;
+
mods[cnt] = NULL;
cnt = 0;
@@ -633,7 +661,7 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
int rc = ldap_add_ext_s(ab_ldap->directory, dn, mods, NULL, NULL);
switch(rc) {
case LDAP_SUCCESS: g_free(dn); return LBABERR_OK;
- case LDAP_ALREADY_EXISTS:
+ case LDAP_ALREADY_EXISTS:
g_free(dn);
libbalsa_address_book_set_status(ab,
g_strdup(ldap_err2string(rc)));
@@ -661,11 +689,13 @@ libbalsa_address_book_ldap_remove_address(LibBalsaAddressBook *ab,
LibBalsaAddress *address)
{
LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+ const gchar *addr;
gchar *dn;
int cnt, rc;
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
+ addr = libbalsa_address_get_addr(address);
+ g_return_val_if_fail(addr != NULL, LBABERR_CANNOT_WRITE);
if (ab_ldap->directory == NULL) {
if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
@@ -674,7 +704,7 @@ libbalsa_address_book_ldap_remove_address(LibBalsaAddressBook *ab,
}
dn = g_strdup_printf("mail=%s,%s",
- (char*)address->address_list->data,
+ addr,
ab_ldap->priv_book_dn);
cnt = 0;
do {
@@ -719,20 +749,28 @@ libbalsa_address_book_ldap_modify_address(LibBalsaAddressBook *ab,
char *org[] = {NULL, NULL};
char *sn[] = {NULL, NULL};
LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+ const gchar *addr;
+ const gchar *new_addr;
+ const gchar *item;
+ const gchar *new_item;
- g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
- g_return_val_if_fail(newval->address_list, LBABERR_CANNOT_WRITE);
+ g_return_val_if_fail(address != NULL, LBABERR_CANNOT_WRITE);
+ addr = libbalsa_address_get_addr(address);
+ g_return_val_if_fail(addr != NULL, LBABERR_CANNOT_WRITE);
- if(!STREQ(address->address_list->data,newval->address_list->data)) {
+ g_return_val_if_fail(newval != NULL, LBABERR_CANNOT_WRITE);
+ new_addr = libbalsa_address_get_addr(newval);
+ g_return_val_if_fail(new_addr != NULL, LBABERR_CANNOT_WRITE);
+
+ if(!STREQ(addr, new_addr)) {
/* email address has changed, we have to remove old entry and
* add a new one. */
- if( (rc=libbalsa_address_book_ldap_add_address(ab, newval))
+ if( (rc=libbalsa_address_book_ldap_add_address(ab, newval))
!= LBABERR_OK)
return rc;
return libbalsa_address_book_ldap_remove_address(ab, address);
}
- /* the email address has not changed, continue with changing other
+ /* the email address has not changed, continue with changing other
* attributes. */
if (ab_ldap->directory == NULL) {
if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
@@ -741,46 +779,50 @@ libbalsa_address_book_ldap_modify_address(LibBalsaAddressBook *ab,
}
dn = g_strdup_printf("mail=%s,%s",
- (char*)address->address_list->data,
+ addr,
ab_ldap->priv_book_dn);
cnt = 0;
- if(!STREQ(address->full_name,newval->full_name)) {
- if(newval->full_name)
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"cn",cn,
- newval->full_name);
+ item = libbalsa_address_get_full_name(address);
+ new_item = libbalsa_address_get_full_name(newval);
+ if (!STREQ(item, new_item)) {
+ if (new_item != NULL)
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"cn",cn, new_item);
else
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"cn",cn,
- address->full_name);
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"cn",cn, item);
cnt++;
}
- if(!STREQ(address->first_name,newval->first_name)) {
- if(newval->first_name)
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"givenName",gn,
- newval->first_name);
+
+ item = libbalsa_address_get_first_name(address);
+ new_item = libbalsa_address_get_first_name(newval);
+ if (!STREQ(item, new_item)) {
+ if (new_item != NULL)
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"givenName",gn, new_item);
else
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"givenName",gn,
- address->first_name);
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"givenName",gn, item);
cnt++;
}
- if(!STREQ(address->last_name,newval->last_name)) {
- if(newval->last_name)
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"sn",sn,
- newval->last_name);
+
+ item = libbalsa_address_get_last_name(address);
+ new_item = libbalsa_address_get_last_name(newval);
+ if (!STREQ(item, new_item)) {
+ if (new_item != NULL)
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"sn",sn, new_item);
else
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"sn",sn,
- address->last_name);
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"sn",sn, item);
cnt++;
}
- if(!STREQ(address->organization,newval->organization)) {
- if(newval->organization)
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"o",
- org, newval->organization);
+
+ item = libbalsa_address_get_organization(address);
+ new_item = libbalsa_address_get_organization(newval);
+ if (!STREQ(item, new_item)) {
+ if (new_item != NULL)
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_REPLACE,"o", org, new_item);
else
- SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"o",
- org, address->organization);
+ SETMOD(mods[cnt],modarr[cnt],LDAP_MOD_DELETE,"o", org, item);
cnt++;
}
+
mods[cnt] = NULL;
if(cnt == 0) {
diff --git a/libbalsa/address-book-ldif.c b/libbalsa/address-book-ldif.c
index ea782d0..cb40996 100644
--- a/libbalsa/address-book-ldif.c
+++ b/libbalsa/address-book-ldif.c
@@ -184,7 +184,7 @@ read_line(FILE* f)
Returns a NULL pointer if it couldn't figure out a name.
*/
static gchar *
-build_name(gchar *cn, gchar *givenname, gchar *surname)
+build_name(const gchar *cn, const gchar *givenname, const gchar *surname)
{
gchar *name = NULL;
@@ -208,36 +208,65 @@ address_new_prefill(LibBalsaAddress * address, GList * address_list,
gchar * nickn, gchar * givenn, gchar * surn,
gchar * fulln, gchar * org)
{
- address->address_list = address_list;
-
- address->first_name = givenn ? givenn : g_strdup(nickn ? nickn : "");
- address->last_name = surn ? surn : g_strdup("");
- address->full_name = build_name(fulln, address->first_name, surn);
+ gchar *full_name;
+
+ libbalsa_address_set_addr_list(address, address_list);
+
+ if (givenn != NULL) {
+ libbalsa_address_set_first_name(address, givenn);
+ g_free(givenn);
+ } else {
+ libbalsa_address_set_first_name(address, nickn != NULL ? nickn : "");
+ }
+
+ if (surn != NULL) {
+ libbalsa_address_set_last_name(address, surn);
+ g_free(surn);
+ } else {
+ libbalsa_address_set_last_name(address, "");
+ }
+
+ full_name = build_name(fulln, libbalsa_address_get_first_name(address), surn);
+ libbalsa_address_set_full_name(address, full_name);
g_free(fulln);
- address->organization = org ? org : g_strdup("");
-
- address->nick_name = nickn ? nickn :
- g_strdup(address->full_name ? address->full_name : _("No-Id"));
-
- if (address->full_name == NULL)
- address->full_name = g_strdup(_("No-Name"));
+
+ libbalsa_address_set_organization(address, org ? org : "");
+ g_free(org);
+
+ if (nickn != NULL) {
+ libbalsa_address_set_nick_name(address, nickn);
+ g_free(nickn);
+ } else {
+ libbalsa_address_set_nick_name(address,
+ full_name != NULL ? full_name : _("No-Id"));
+ }
+
+ if (full_name == NULL)
+ libbalsa_address_set_full_name(address, _("No-Name"));
+
+ g_free(full_name);
}
/* Class methods */
-/*
+/*
* Write various lines to the output stream.
*/
static void
lbab_ldif_write_dn(FILE * stream, LibBalsaAddress * address)
{
+ const gchar *full_name = libbalsa_address_get_full_name(address);
gchar *cn = NULL;
+ const gchar *addr;
gchar *value, *value_spec;
- if (address->full_name != NULL && address->full_name[0] != '\0') {
- cn = g_strdup(address->full_name);
+ if (full_name != NULL && full_name[0] != '\0') {
+ cn = g_strdup(full_name);
} else {
- cn = build_name(NULL, address->first_name, address->last_name);
+ const gchar *first_name = libbalsa_address_get_first_name(address);
+ const gchar *last_name = libbalsa_address_get_last_name(address);
+
+ cn = build_name(NULL, first_name, last_name);
if (cn == NULL) {
cn = g_strdup(_("No-Name"));
} else {
@@ -248,10 +277,9 @@ lbab_ldif_write_dn(FILE * stream, LibBalsaAddress * address)
}
}
- if (address->address_list && address->address_list->data) {
- value =
- g_strdup_printf("cn=%s,mail=%s",
- cn, (gchar *) address->address_list->data);
+ addr = libbalsa_address_get_addr(address);
+ if (addr != NULL && addr[0] != '\0') {
+ value = g_strdup_printf("cn=%s,mail=%s", cn, addr);
} else
value = g_strdup_printf("cn=%s", cn);
value_spec = string_to_value_spec(value);
@@ -270,9 +298,11 @@ lbab_ldif_write_addresses(FILE * stream, LibBalsaAddress * address)
{
GList *list;
- for (list = address->address_list; list; list = list->next) {
+ for (list = libbalsa_address_get_addr_list(address);
+ list != NULL; list = list->next) {
const gchar *mail = list->data;
- if (mail && *mail) {
+
+ if (mail != NULL && mail[0] != '\0') {
gchar *value_spec = string_to_value_spec(mail);
fprintf(stream, "mail:%s\n", value_spec);
g_free(value_spec);
@@ -283,8 +313,10 @@ lbab_ldif_write_addresses(FILE * stream, LibBalsaAddress * address)
static void
lbab_ldif_write_surname(FILE * stream, LibBalsaAddress * address)
{
- if (address->last_name && *(address->last_name)) {
- gchar *value_spec = string_to_value_spec(address->last_name);
+ const gchar *last_name = libbalsa_address_get_last_name(address);
+
+ if (last_name != NULL && last_name[0] != '\0') {
+ gchar *value_spec = string_to_value_spec(last_name);
fprintf(stream, "sn:%s\n", value_spec);
g_free(value_spec);
}
@@ -293,8 +325,10 @@ lbab_ldif_write_surname(FILE * stream, LibBalsaAddress * address)
static void
lbab_ldif_write_givenname(FILE * stream, LibBalsaAddress * address)
{
- if (address->first_name && *(address->first_name)) {
- gchar *value_spec = string_to_value_spec(address->first_name);
+ const gchar *first_name = libbalsa_address_get_first_name(address);
+
+ if (first_name != NULL && first_name[0] != '\0') {
+ gchar *value_spec = string_to_value_spec(first_name);
fprintf(stream, "givenname:%s\n", value_spec);
g_free(value_spec);
}
@@ -303,8 +337,10 @@ lbab_ldif_write_givenname(FILE * stream, LibBalsaAddress * address)
static void
lbab_ldif_write_nickname(FILE * stream, LibBalsaAddress * address)
{
- if (address->nick_name) {
- gchar *value_spec = string_to_value_spec(address->nick_name);
+ const gchar *nick_name = libbalsa_address_get_nick_name(address);
+
+ if (nick_name != NULL) {
+ gchar *value_spec = string_to_value_spec(nick_name);
fprintf(stream, "xmozillanickname:%s\n", value_spec);
g_free(value_spec);
}
@@ -313,8 +349,10 @@ lbab_ldif_write_nickname(FILE * stream, LibBalsaAddress * address)
static void
lbab_ldif_write_organization(FILE * stream, LibBalsaAddress * address)
{
- if (address->organization) {
- gchar *value_spec = string_to_value_spec(address->organization);
+ const gchar *organization = libbalsa_address_get_nick_name(address);
+
+ if (organization != NULL) {
+ gchar *value_spec = string_to_value_spec(organization);
fprintf(stream, "o:%s\n", value_spec);
g_free(value_spec);
}
diff --git a/libbalsa/address-book-osmo.c b/libbalsa/address-book-osmo.c
index 95dbb64..caa4943 100644
--- a/libbalsa/address-book-osmo.c
+++ b/libbalsa/address-book-osmo.c
@@ -205,13 +205,13 @@ utf8_strstr(const gchar *haystack, const gchar *utf8_needle)
* LibBalsaAddress::nick_name and LibBalsaAddress::organization.
*/
static inline gboolean
-utf8_lba_strstr(const LibBalsaAddress *address, const gchar *utf8_needle)
+utf8_lba_strstr(LibBalsaAddress *address, const gchar *utf8_needle)
{
- return utf8_strstr(address->full_name, utf8_needle) ||
- utf8_strstr(address->first_name, utf8_needle) ||
- utf8_strstr(address->last_name, utf8_needle) ||
- utf8_strstr(address->nick_name, utf8_needle) ||
- utf8_strstr(address->organization, utf8_needle);
+ return utf8_strstr(libbalsa_address_get_full_name(address), utf8_needle) ||
+ utf8_strstr(libbalsa_address_get_first_name(address), utf8_needle) ||
+ utf8_strstr(libbalsa_address_get_last_name(address), utf8_needle) ||
+ utf8_strstr(libbalsa_address_get_nick_name(address), utf8_needle) ||
+ utf8_strstr(libbalsa_address_get_organization(address), utf8_needle);
}
@@ -249,27 +249,29 @@ libbalsa_address_book_osmo_alias_complete(LibBalsaAddressBook *ab,
gboolean names_match;
names_match = utf8_lba_strstr(this_addr, utf8_filter);
- for (this_mail = this_addr->address_list; this_mail != NULL; this_mail =
this_mail->next) {
+ for (this_mail = libbalsa_address_get_addr_list(this_addr);
+ this_mail != NULL; this_mail = this_mail->next) {
const gchar *mail_addr = (gchar *) this_mail->data;
if (names_match || (strstr(mail_addr, prefix) != NULL)) {
+ const gchar *full_name;
InternetAddress *addr;
- g_debug("%s: found %s <%s>", __func__, this_addr->full_name,
mail_addr);
- addr = internet_address_mailbox_new(this_addr->full_name,
g_strdup(mail_addr));
+ full_name =
+ libbalsa_address_get_full_name(this_addr),
+ g_debug("%s: found %s <%s>", __func__,
+ full_name, mail_addr);
+ addr = internet_address_mailbox_new(full_name,
+ mail_addr);
result = g_list_prepend(result, g_object_ref(addr));
}
}
}
g_free(utf8_filter);
g_list_free_full(addresses, g_object_unref);
-
- if (result != NULL) {
- result = g_list_reverse(result);
- }
}
- return result;
+ return g_list_reverse(result);
}
@@ -332,7 +334,7 @@ osmo_read_addresses(LibBalsaAddressBookOsmo *osmo,
this_addr = rfc6350_parse_from_stream(data, &eos, error);
if (this_addr != NULL) {
- if (this_addr->address_list != NULL) {
+ if (libbalsa_address_get_addr(this_addr) != NULL) {
addresses = g_list_prepend(addresses, this_addr);
} else {
g_object_unref(G_OBJECT(this_addr));
diff --git a/libbalsa/address-book-rubrica.c b/libbalsa/address-book-rubrica.c
index c14d6ca..ceb5292 100644
--- a/libbalsa/address-book-rubrica.c
+++ b/libbalsa/address-book-rubrica.c
@@ -217,8 +217,8 @@ libbalsa_address_book_rubrica_load(LibBalsaAddressBook * ab,
if (callback &&
(!filter_hi ||
- lbab_rubrica_starts_from(address->last_name, filter_hi) ||
- lbab_rubrica_starts_from(address->full_name, filter_hi)))
+ lbab_rubrica_starts_from(libbalsa_address_get_last_name(address), filter_hi) ||
+ lbab_rubrica_starts_from(libbalsa_address_get_full_name(address), filter_hi)))
callback(ab, address, data);
}
if (callback)
@@ -277,7 +277,7 @@ libbalsa_address_book_rubrica_add_address(LibBalsaAddressBook * ab,
/* eject if we already have this address */
if (g_slist_find_custom(ab_rubrica->item_list, new_address,
- (GCompareFunc) address_compare)) {
+ (GCompareFunc) libbalsa_address_compare)) {
xmlFreeDoc(doc);
return LBABERR_DUPLICATE;
}
@@ -366,7 +366,7 @@ libbalsa_address_book_rubrica_modify_address(LibBalsaAddressBook * ab,
gchar *full_name = xml_node_get_attr(card, CXMLCHARP("name"));
if (full_name) {
- found = !g_ascii_strcasecmp(address->full_name, full_name);
+ found = !g_ascii_strcasecmp(libbalsa_address_get_full_name(address), full_name);
g_free(full_name);
}
}
@@ -415,8 +415,8 @@ static LibBalsaABErr
lbab_rubrica_load_xml(LibBalsaAddressBookRubrica * ab_rubrica,
xmlDocPtr * docptr)
{
- LibBalsaAddressBookText *ab_text =
- LIBBALSA_ADDRESS_BOOK_TEXT(ab_rubrica);
+ LibBalsaAddressBook *ab = LIBBALSA_ADDRESS_BOOK(ab_rubrica);
+ LibBalsaAddressBookText *ab_text = LIBBALSA_ADDRESS_BOOK_TEXT(ab_rubrica);
struct stat stat_buf;
const gchar *path;
int fd;
@@ -475,34 +475,36 @@ lbab_rubrica_load_xml(LibBalsaAddressBookRubrica * ab_rubrica,
for (list = ab_rubrica->item_list; list; list = list->next) {
LibBalsaAddress *address = LIBBALSA_ADDRESS(list->data);
GList *l;
+ GList *addr_list;
if (!address)
continue;
- if (address->address_list->next
- && libbalsa_address_book_get_dist_list_mode(LIBBALSA_ADDRESS_BOOK(ab_rubrica))) {
+ addr_list = libbalsa_address_get_addr_list(address);
+ if (libbalsa_address_book_get_dist_list_mode(ab)
+ && addr_list != NULL && addr_list->next != NULL) {
/* Create a group address. */
InternetAddress *ia =
- internet_address_group_new(address->full_name);
+ internet_address_group_new(libbalsa_address_get_full_name(address));
InternetAddressGroup *group = (InternetAddressGroup *) ia;
- for (l = address->address_list; l; l = l->next) {
+ for (l = addr_list; l != NULL; l = l->next) {
InternetAddress *member =
internet_address_mailbox_new(NULL, l->data);
internet_address_group_add_member(group, member);
g_object_unref(member);
}
- cmp_data = completion_data_new(ia, address->nick_name);
+ cmp_data = completion_data_new(ia, libbalsa_address_get_nick_name(address));
completion_list = g_list_prepend(completion_list, cmp_data);
g_object_unref(ia);
} else {
/* Create name addresses. */
GList *l;
- for (l = address->address_list; l; l = l->next) {
+ for (l = addr_list; l != NULL; l = l->next) {
InternetAddress *ia =
- internet_address_mailbox_new(address->full_name, l->data);
- cmp_data = completion_data_new(ia, address->nick_name);
+ internet_address_mailbox_new(libbalsa_address_get_full_name(address), l->data);
+ cmp_data = completion_data_new(ia, libbalsa_address_get_nick_name(address));
completion_list =
g_list_prepend(completion_list, cmp_data);
g_object_unref(ia);
@@ -527,25 +529,25 @@ lbab_insert_address_node(const LibBalsaAddress * address,
/* create a new card */
new_addr = xmlNewChild(parent, NULL, CXMLCHARP("Card"), NULL);
- xmlNewProp(new_addr, CXMLCHARP("name"), CXMLCHARP(address->full_name));
+ xmlNewProp(new_addr, CXMLCHARP("name"), CXMLCHARP(libbalsa_address_get_full_name(address)));
/* create the Data section of the card */
new_data = xmlNewChild(new_addr, NULL, CXMLCHARP("Data"), NULL);
xmlNewChild(new_data, NULL, CXMLCHARP("FirstName"),
- CXMLCHARP(address->first_name));
+ CXMLCHARP(libbalsa_address_get_first_name(address)));
xmlNewChild(new_data, NULL, CXMLCHARP("LastName"),
- CXMLCHARP(address->last_name));
+ CXMLCHARP(libbalsa_address_get_last_name(address)));
xmlNewChild(new_data, NULL, CXMLCHARP("NickName"),
- CXMLCHARP(address->nick_name));
+ CXMLCHARP(libbalsa_address_get_nick_name(address)));
/* create the Work section of the card */
new_data = xmlNewChild(new_addr, NULL, CXMLCHARP("Work"), NULL);
xmlNewChild(new_data, NULL, CXMLCHARP("Organization"),
- CXMLCHARP(address->organization));
+ CXMLCHARP(libbalsa_address_get_organization(address)));
/* create the Net section of the card */
new_data = xmlNewChild(new_addr, NULL, CXMLCHARP("Net"), NULL);
- for (l = address->address_list; l != NULL; l = l->next) {
+ for (l = libbalsa_address_get_addr_list(address); l != NULL; l = l->next) {
xmlNodePtr new_mail =
xmlNewChild(new_data, NULL, CXMLCHARP("Uri"),
CXMLCHARP(l->data));
@@ -581,25 +583,45 @@ extract_cards(xmlNodePtr card)
if (!xmlStrcmp(card->name, CXMLCHARP("Card"))) {
LibBalsaAddress *address = libbalsa_address_new();
xmlNodePtr children;
+ gchar *full_name;
+ GList *address_list = NULL;
+
+ full_name = xml_node_get_attr(card, CXMLCHARP("name"));
+ libbalsa_address_set_full_name(address, full_name);
+ g_free(full_name);
- address->full_name =
- xml_node_get_attr(card, CXMLCHARP("name"));
children = card->children;
while (children) {
- if (!xmlStrcmp(children->name, CXMLCHARP("Data")))
- extract_data(children->children, &address->first_name,
- &address->last_name, &address->nick_name);
- else if (!xmlStrcmp(children->name, CXMLCHARP("Work")))
- extract_work(children->children,
- &address->organization);
- else if (!xmlStrcmp(children->name, CXMLCHARP("Net")))
- extract_net(children->children,
- &address->address_list);
+ if (!xmlStrcmp(children->name, CXMLCHARP("Data"))) {
+ gchar *first_name;
+ gchar *last_name = NULL;
+ gchar *nick_name = NULL;
+
+ extract_data(children->children,
+ &first_name, &last_name, &nick_name);
+
+ libbalsa_address_set_first_name(address, first_name);
+ libbalsa_address_set_last_name(address, last_name);
+ libbalsa_address_set_nick_name(address, nick_name);
+
+ g_free(first_name);
+ g_free(last_name);
+ g_free(nick_name);
+ } else if (!xmlStrcmp(children->name, CXMLCHARP("Work"))) {
+ gchar *organization = NULL;
+
+ extract_work(children->children, &organization);
+ libbalsa_address_set_organization(address, organization);
+ g_free(organization);
+ } else if (!xmlStrcmp(children->name, CXMLCHARP("Net"))) {
+ extract_net(children->children, &address_list);
+ libbalsa_address_set_addr_list(address, address_list);
+ }
children = children->next;
}
- if (address->address_list)
+ if (address_list != NULL)
addrlist = g_slist_prepend(addrlist, address);
else
g_object_unref(address);
diff --git a/libbalsa/address-book-text.c b/libbalsa/address-book-text.c
index 0d714b0..3d06fe2 100644
--- a/libbalsa/address-book-text.c
+++ b/libbalsa/address-book-text.c
@@ -233,10 +233,10 @@ lbab_text_group_address(const gchar * group_name,
GList *mailbox;
LibBalsaAddress *address = LIBBALSA_ADDRESS(l->data);
- for (mailbox = address->address_list; mailbox;
+ for (mailbox = libbalsa_address_get_addr_list(address); mailbox;
mailbox = mailbox->next) {
InternetAddress *member =
- internet_address_mailbox_new(address->full_name,
+ internet_address_mailbox_new(libbalsa_address_get_full_name(address),
mailbox->data);
internet_address_group_add_member((InternetAddressGroup *)ia, member);
g_object_unref(member);
@@ -258,13 +258,13 @@ lbab_text_item_compare(LibBalsaAddressBookTextItem * a,
g_return_val_if_fail(a != NULL, -1);
g_return_val_if_fail(b != NULL, 1);
- if (!a->address)
+ if (a->address == NULL)
return -1;
- if (!b->address)
+ if (b->address == NULL)
return 1;
- return g_ascii_strcasecmp(a->address->full_name,
- b->address->full_name);
+ return g_ascii_strcasecmp(libbalsa_address_get_full_name(a->address),
+ libbalsa_address_get_full_name(b->address));
}
/* Load the book from the stream */
@@ -273,6 +273,7 @@ lbab_text_load_file(LibBalsaAddressBookText * ab_text, FILE * stream)
{
LibBalsaAddressBookTextPrivate *priv =
libbalsa_address_book_text_get_instance_private(ab_text);
+ LibBalsaAddressBook *ab = ( LibBalsaAddressBook *) ab_text;
LibBalsaABErr(*parse_address) (FILE * stream_in,
LibBalsaAddress * address,
FILE * stream_out,
@@ -322,33 +323,38 @@ lbab_text_load_file(LibBalsaAddressBookText * ab_text, FILE * stream)
#if MAKE_GROUP_BY_ORGANIZATION
gchar **groups, **group;
#endif /* MAKE_GROUP_BY_ORGANIZATION */
+ GList *addr_list;
+
if (!address)
continue;
- if (address->address_list->next
- && libbalsa_address_book_get_dist_list_mode(LIBBALSA_ADDRESS_BOOK(ab_text))) {
+ addr_list = libbalsa_address_get_addr_list(address);
+ if (libbalsa_address_book_get_dist_list_mode(ab)
+ && addr_list != NULL && addr_list->next != NULL) {
/* Create a group address. */
InternetAddress *ia =
- internet_address_group_new(address->full_name);
+ internet_address_group_new(libbalsa_address_get_full_name(address));
GList *l;
- for (l = address->address_list; l; l = l->next) {
+ for (l = addr_list; l; l = l->next) {
InternetAddress *member =
internet_address_mailbox_new(NULL, l->data);
internet_address_group_add_member((InternetAddressGroup *)ia, member);
g_object_unref(member);
}
- cmp_data = completion_data_new(ia, address->nick_name);
+ cmp_data = completion_data_new(ia, libbalsa_address_get_nick_name(address));
completion_list = g_list_prepend(completion_list, cmp_data);
g_object_unref(ia);
} else {
/* Create name addresses. */
GList *l;
- for (l = address->address_list; l; l = l->next) {
+ for (l = addr_list; l; l = l->next) {
InternetAddress *ia =
- internet_address_mailbox_new(address->full_name, l->data);
- cmp_data = completion_data_new(ia, address->nick_name);
+ internet_address_mailbox_new(libbalsa_address_get_full_name(address),
+ l->data);
+ cmp_data =
+ completion_data_new(ia, libbalsa_address_get_nick_name(address));
completion_list =
g_list_prepend(completion_list, cmp_data);
g_object_unref(ia);
@@ -530,11 +536,14 @@ libbalsa_address_book_text_load(LibBalsaAddressBook * ab,
if (!address)
continue;
- if (callback && (!filter_hi
- || lbab_text_starts_from(address->last_name,
- filter_hi)
- || lbab_text_starts_from(address->full_name,
- filter_hi)))
+ if (callback
+ && (!filter_hi
+ ||
+ lbab_text_starts_from(libbalsa_address_get_last_name
+ (address), filter_hi)
+ ||
+ lbab_text_starts_from(libbalsa_address_get_full_name
+ (address), filter_hi)))
callback(ab, address, data);
}
if (callback)
diff --git a/libbalsa/address-book-vcard.c b/libbalsa/address-book-vcard.c
index 5b2ec15..270d97f 100644
--- a/libbalsa/address-book-vcard.c
+++ b/libbalsa/address-book-vcard.c
@@ -128,21 +128,25 @@ lbab_vcard_write_begin(FILE * stream)
static void
lbab_vcard_write_fn(FILE * stream, LibBalsaAddress * address)
{
- if (address->full_name && *address->full_name != '\0')
- fprintf(stream, "FN:%s\n", address->full_name);
+ const gchar *full_name = libbalsa_address_get_full_name(address);
+
+ if (full_name && *full_name != '\0')
+ fprintf(stream, "FN:%s\n", full_name);
}
static void
lbab_vcard_write_n(FILE * stream, LibBalsaAddress * address)
{
- if (address->first_name && *address->first_name != '\0') {
- if (address->last_name && *address->last_name != '\0') {
- fprintf(stream, "N:%s;%s\n", address->last_name,
- address->first_name);
+ const gchar *first_name = libbalsa_address_get_first_name(address);
+ const gchar *last_name = libbalsa_address_get_last_name(address);
+
+ if (first_name && *first_name != '\0') {
+ if (last_name && *last_name != '\0') {
+ fprintf(stream, "N:%s;%s\n", last_name, first_name);
} else
- fprintf(stream, "N:;%s\n", address->first_name);
- } else if (address->last_name && *address->last_name != '\0') {
- fprintf(stream, "N:%s\n", address->last_name);
+ fprintf(stream, "N:;%s\n", first_name);
+ } else if (last_name && *last_name != '\0') {
+ fprintf(stream, "N:%s\n", last_name);
} else
fprintf(stream, "N:%s\n", _("No-Name"));
}
@@ -150,15 +154,19 @@ lbab_vcard_write_n(FILE * stream, LibBalsaAddress * address)
static void
lbab_vcard_write_nickname(FILE * stream, LibBalsaAddress * address)
{
- if (address->nick_name && *address->nick_name != '\0')
- fprintf(stream, "NICKNAME:%s\n", address->nick_name);
+ const gchar *nick_name = libbalsa_address_get_nick_name(address);
+
+ if (nick_name && *nick_name != '\0')
+ fprintf(stream, "NICKNAME:%s\n", nick_name);
}
static void
lbab_vcard_write_org(FILE * stream, LibBalsaAddress * address)
{
- if (address->organization && *address->organization != '\0')
- fprintf(stream, "ORG:%s\n", address->organization);
+ const gchar *organization = libbalsa_address_get_organization(address);
+
+ if (organization && *organization != '\0')
+ fprintf(stream, "ORG:%s\n", organization);
}
static void
@@ -166,7 +174,8 @@ lbab_vcard_write_addresses(FILE * stream, LibBalsaAddress * address)
{
GList *list;
- for (list = address->address_list; list; list = list->next)
+ for (list = libbalsa_address_get_addr_list(address);
+ list != NULL; list = list->next)
fprintf(stream, "EMAIL;INTERNET:%s\n", (gchar *) list->data);
}
@@ -201,7 +210,7 @@ libbalsa_address_book_vcard_parse_address(FILE * stream,
gchar *name = NULL, *nick_name = NULL, *org = NULL;
gchar *full_name = NULL, *last_name = NULL, *first_name = NULL;
gint in_vcard = FALSE;
- GList *address_list = NULL;
+ GList *addr_list = NULL;
guint wrote = 0;
while (fgets(string, sizeof(string), stream)) {
@@ -220,7 +229,7 @@ libbalsa_address_book_vcard_parse_address(FILE * stream,
/*
* We are done loading a card.
*/
- if (address_list) {
+ if (addr_list) {
if (stream_out) {
if (!(wrote & (1 << FULL_NAME)))
lbab_vcard_write_fn(stream_out, address_out);
@@ -234,25 +243,33 @@ libbalsa_address_book_vcard_parse_address(FILE * stream,
res = lbab_vcard_write_end(stream_out);
}
if (address) {
- if (full_name) {
- address->full_name = full_name;
- g_free(name);
- } else if (name)
- address->full_name = name;
+ if (full_name)
+ libbalsa_address_set_full_name(address, full_name);
+ else if (name)
+ libbalsa_address_set_full_name(address, name);
else if (nick_name)
- address->full_name = g_strdup(nick_name);
+ libbalsa_address_set_full_name(address, nick_name);
else
- address->full_name = g_strdup(_("No-Name"));
-
- address->last_name = last_name;
- address->first_name = first_name;
- address->nick_name = nick_name;
- address->organization = org;
- address->address_list = g_list_reverse(address_list);
-
- return LBABERR_OK;
+ libbalsa_address_set_full_name(address, _("No-Name"));
+
+ libbalsa_address_set_last_name(address, last_name);
+ libbalsa_address_set_first_name(address, first_name);
+ libbalsa_address_set_nick_name(address, nick_name);
+ libbalsa_address_set_organization(address, org);
+ libbalsa_address_set_addr_list(address,
+ g_list_reverse(addr_list));
+
+ res = LBABERR_OK;
+ g_free(full_name);
+ g_free(name);
+ g_free(last_name);
+ g_free(first_name);
+ g_free(nick_name);
+ g_free(org);
+
+ return res;
}
- g_list_free_full(address_list, g_free);
+ g_list_free_full(addr_list, g_free);
}
/* Record without e-mail address, or we're not creating
* addresses: free memory. */
@@ -320,8 +337,7 @@ libbalsa_address_book_vcard_parse_address(FILE * stream,
if (g_ascii_strncasecmp(string, "EMAIL", 5) == 0) {
gchar *ptr = strchr(string + 5, ':');
if (ptr) {
- address_list =
- g_list_prepend(address_list, g_strdup(ptr + 1));
+ addr_list = g_list_prepend(addr_list, g_strdup(ptr + 1));
}
continue;
}
diff --git a/libbalsa/address-book.c b/libbalsa/address-book.c
index 5408649..70e446c 100644
--- a/libbalsa/address-book.c
+++ b/libbalsa/address-book.c
@@ -243,17 +243,6 @@ libbalsa_address_book_alias_complete(LibBalsaAddressBook * ab,
}
-gboolean libbalsa_address_is_dist_list(const LibBalsaAddressBook *ab,
- const LibBalsaAddress *address)
-{
- LibBalsaAddressBookPrivate *priv =
- libbalsa_address_book_get_instance_private((LibBalsaAddressBook *) ab);
-
- return (priv->dist_list_mode && g_list_length(address->address_list)>1);
-}
-
-
-
static void
libbalsa_address_book_real_save_config(LibBalsaAddressBook * ab,
const gchar * group)
diff --git a/libbalsa/address-book.h b/libbalsa/address-book.h
index cf9c966..df75d80 100644
--- a/libbalsa/address-book.h
+++ b/libbalsa/address-book.h
@@ -118,8 +118,6 @@ const gchar* libbalsa_address_book_strerror(LibBalsaAddressBook * ab,
*/
GList *libbalsa_address_book_alias_complete(LibBalsaAddressBook * ab,
const gchar *prefix);
-gboolean libbalsa_address_is_dist_list(const LibBalsaAddressBook *ab,
- const LibBalsaAddress *address);
/*
* Getters
diff --git a/libbalsa/address.c b/libbalsa/address.c
index e70cd46..c3e6a0f 100644
--- a/libbalsa/address.c
+++ b/libbalsa/address.c
@@ -29,47 +29,55 @@
#include "misc.h"
#include <glib/gi18n.h>
-static GObjectClass *parent_class;
-
static void libbalsa_address_class_init(LibBalsaAddressClass * klass);
static void libbalsa_address_init(LibBalsaAddress * ab);
static void libbalsa_address_finalize(GObject * object);
static gchar ** vcard_strsplit(const gchar * string);
-GType libbalsa_address_get_type(void)
-{
- static GType address_type = 0;
-
- if (!address_type) {
- static const GTypeInfo address_info = {
- sizeof(LibBalsaAddressClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) libbalsa_address_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(LibBalsaAddress),
- 0, /* n_preallocs */
- (GInstanceInitFunc) libbalsa_address_init
- };
-
- address_type =
- g_type_register_static(G_TYPE_OBJECT,
- "LibBalsaAddress",
- &address_info, 0);
- }
+/* General address structure to be used with address books.
+*/
+struct _LibBalsaAddress {
+ GObject parent;
+
+ /*
+ * ID
+ * VCard FN: Field
+ * LDAP/LDIF: xmozillanickname
+ */
+ gchar *nick_name;
+
+ /* First and last names
+ * VCard: parsed from N: field
+ * LDAP/LDIF: cn, givenName, surName.
+ */
+ gchar *full_name;
+ gchar *first_name;
+ gchar *last_name;
+
+ /* Organisation
+ * VCard: ORG: field
+ * ldif: o: attribute.
+ */
+ gchar *organization;
+
+ /* Email addresses
+ * A list of mailboxes, ie. user@domain.
+ */
+ GList *addr_list;
+};
- return address_type;
-}
+struct _LibBalsaAddressClass {
+ GObjectClass parent_class;
+};
+
+G_DEFINE_TYPE(LibBalsaAddress, libbalsa_address, G_TYPE_OBJECT)
static void
libbalsa_address_class_init(LibBalsaAddressClass * klass)
{
GObjectClass *object_class;
- parent_class = g_type_class_peek_parent(klass);
-
object_class = G_OBJECT_CLASS(klass);
object_class->finalize = libbalsa_address_finalize;
}
@@ -82,7 +90,7 @@ libbalsa_address_init(LibBalsaAddress * addr)
addr->first_name = NULL;
addr->last_name = NULL;
addr->organization = NULL;
- addr->address_list = NULL;
+ addr->addr_list = NULL;
}
static void
@@ -100,9 +108,9 @@ libbalsa_address_finalize(GObject * object)
g_free(addr->last_name);
g_free(addr->organization);
- g_list_free_full(addr->address_list, g_free);
+ g_list_free_full(addr->addr_list, g_free);
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(libbalsa_address_parent_class)->finalize(object);
}
LibBalsaAddress *
@@ -327,7 +335,7 @@ libbalsa_address_new_from_vcard(const gchar *str, const gchar *charset)
gchar *name = NULL, *nick_name = NULL, *org = NULL;
gchar *full_name = NULL, *last_name = NULL, *first_name = NULL;
gint in_vcard = FALSE;
- GList *address_list = NULL;
+ GList *addr_list = NULL;
const gchar *string, *next_line;
gchar * vcard;
@@ -386,7 +394,7 @@ libbalsa_address_new_from_vcard(const gchar *str, const gchar *charset)
*/
LibBalsaAddress *address;
- if (!address_list)
+ if (!addr_list)
break;
address = g_object_new(LIBBALSA_TYPE_ADDRESS, NULL);
@@ -405,7 +413,7 @@ libbalsa_address_new_from_vcard(const gchar *str, const gchar *charset)
address->first_name = first_name;
address->nick_name = nick_name;
address->organization = org;
- address->address_list = g_list_reverse(address_list);
+ address->addr_list = g_list_reverse(addr_list);
return address;
}
@@ -498,8 +506,8 @@ libbalsa_address_new_from_vcard(const gchar *str, const gchar *charset)
} else if (g_ascii_strncasecmp(line, "EMAIL:", 6) == 0) {
- address_list =
- g_list_prepend(address_list, g_strdup(line + 6));
+ addr_list =
+ g_list_prepend(addr_list, g_strdup(line + 6));
}
g_free(line);
}
@@ -511,7 +519,7 @@ libbalsa_address_new_from_vcard(const gchar *str, const gchar *charset)
g_free(first_name);
g_free(nick_name);
g_free(org);
- g_list_free_full(address_list, g_free);
+ g_list_free_full(addr_list, g_free);
return NULL;
}
@@ -534,12 +542,12 @@ libbalsa_address_set_copy(LibBalsaAddress * dest, LibBalsaAddress * src)
dest->last_name = g_strdup(src->last_name);
g_free(dest->organization);
dest->organization = g_strdup(src->organization);
- g_list_free_full(dest->address_list, g_free);
+ g_list_free_full(dest->addr_list, g_free);
dst_al = NULL;
- for (src_al = src->address_list; src_al; src_al = src_al->next)
+ for (src_al = src->addr_list; src_al; src_al = src_al->next)
dst_al = g_list_prepend(dst_al, g_strdup(src_al->data));
- dest->address_list = g_list_reverse(dst_al);
+ dest->addr_list = g_list_reverse(dst_al);
}
static gchar *
@@ -588,16 +596,16 @@ libbalsa_address_to_gchar(LibBalsaAddress * address, gint n)
g_return_val_if_fail(LIBBALSA_IS_ADDRESS(address), NULL);
- if(!address->address_list)
+ if (address->addr_list == NULL)
return NULL;
- if(n==-1) {
- if(address->address_list->next)
- retc = rfc2822_group(address->full_name, address->address_list);
+ if (n == -1) {
+ if (address->addr_list->next != NULL)
+ retc = rfc2822_group(address->full_name, address->addr_list);
else
retc = rfc2822_mailbox(address->full_name,
- address->address_list->data);
+ address->addr_list->data);
} else {
- const gchar *mailbox = g_list_nth_data(address->address_list, n);
+ const gchar *mailbox = g_list_nth_data(address->addr_list, n);
g_return_val_if_fail(mailbox != NULL, NULL);
retc = rfc2822_mailbox(address->full_name, mailbox);
@@ -608,19 +616,19 @@ libbalsa_address_to_gchar(LibBalsaAddress * address, gint n)
/* Helper */
static const gchar *
-lba_get_name_or_mailbox(InternetAddressList * address_list,
+lba_get_name_or_mailbox(InternetAddressList * addr_list,
gboolean get_name, gboolean in_group)
{
const gchar *retval = NULL;
InternetAddress *ia;
gint i, len;
- if (address_list == NULL)
+ if (addr_list == NULL)
return NULL;
- len = internet_address_list_length(address_list);
+ len = internet_address_list_length(addr_list);
for (i = 0; i < len; i++) {
- ia = internet_address_list_get_address (address_list, i);
+ ia = internet_address_list_get_address (addr_list, i);
if (get_name && ia->name && *ia->name)
return ia->name;
@@ -643,30 +651,30 @@ lba_get_name_or_mailbox(InternetAddressList * address_list,
/* Get either a name or a mailbox from an InternetAddressList. */
const gchar *
-libbalsa_address_get_name_from_list(InternetAddressList *address_list)
+libbalsa_address_get_name_from_list(InternetAddressList *addr_list)
{
- return lba_get_name_or_mailbox(address_list, TRUE, FALSE);
+ return lba_get_name_or_mailbox(addr_list, TRUE, FALSE);
}
/* Get a mailbox from an InternetAddressList. */
const gchar *
-libbalsa_address_get_mailbox_from_list(InternetAddressList *address_list)
+libbalsa_address_get_mailbox_from_list(InternetAddressList *addr_list)
{
- return lba_get_name_or_mailbox(address_list, FALSE, FALSE);
+ return lba_get_name_or_mailbox(addr_list, FALSE, FALSE);
}
/* Number of individual mailboxes in an InternetAddressList. */
gint
-libbalsa_address_n_mailboxes_in_list(InternetAddressList * address_list)
+libbalsa_address_n_mailboxes_in_list(InternetAddressList * addr_list)
{
gint i, len, n_mailboxes = 0;
- g_return_val_if_fail(IS_INTERNET_ADDRESS_LIST(address_list), -1);
+ g_return_val_if_fail(IS_INTERNET_ADDRESS_LIST(addr_list), -1);
- len = internet_address_list_length(address_list);
+ len = internet_address_list_length(addr_list);
for (i = 0; i < len; i++) {
const InternetAddress *ia =
- internet_address_list_get_address(address_list, i);
+ internet_address_list_get_address(addr_list, i);
if (INTERNET_ADDRESS_IS_MAILBOX(ia))
++n_mailboxes;
@@ -701,9 +709,9 @@ libbalsa_address_set_edit_entries(const LibBalsaAddress * address,
GtkTreeIter iter;
new_email = g_strdup(address
- && address->address_list
- && address->address_list->data ?
- address->address_list->data : "");
+ && address->addr_list
+ && address->addr_list->data ?
+ address->addr_list->data : "");
/* initialize the organization... */
if (!address || address->organization == NULL)
new_organization = g_strdup("");
@@ -765,7 +773,7 @@ libbalsa_address_set_edit_entries(const LibBalsaAddress * address,
if (address) {
GList *list;
- for (list = address->address_list; list; list = list->next) {
+ for (list = address->addr_list; list; list = list->next) {
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, list->data, -1);
}
@@ -816,7 +824,7 @@ lba_cell_edited(GtkCellRendererText * cell, const gchar * path_string,
}
static GtkWidget *
-lba_address_list_widget(GCallback changed_cb, gpointer changed_data)
+lba_addr_list_widget(GCallback changed_cb, gpointer changed_data)
{
GtkListStore *store;
GtkWidget *tree_view;
@@ -886,12 +894,12 @@ addrlist_drag_received_cb(GtkWidget * widget,
if (target == g_intern_static_string("x-application/x-addr")) {
addr = *(LibBalsaAddress **) gtk_selection_data_get_data(selection_data);
- if (addr != NULL && addr->address_list != NULL) {
- g_print ("string: %s\n", (gchar*) addr->address_list->data);
+ if (addr != NULL && addr->addr_list != NULL) {
+ g_print ("string: %s\n", (gchar*) addr->addr_list->data);
gtk_list_store_insert_with_values(GTK_LIST_STORE(model),
&iter, 99999,
0,
- addr->address_list->data,
+ addr->addr_list->data,
-1);
dnd_success = TRUE;
}
@@ -983,7 +991,7 @@ libbalsa_address_get_edit_widget(const LibBalsaAddress *address,
GtkWidget *but = gtk_button_new_with_mnemonic(_("A_dd"));
GdkContentFormats *formats;
- entries[cnt] = lba_address_list_widget(changed_cb,
+ entries[cnt] = lba_addr_list_widget(changed_cb,
changed_data);
gtk_box_pack_start(GTK_BOX(box), label);
gtk_box_pack_start(GTK_BOX(box), but);
@@ -1084,7 +1092,124 @@ libbalsa_address_new_from_edit_entries(GtkWidget ** entries)
if (email && *email)
list = g_list_prepend(list, email);
}
- address->address_list = g_list_reverse(list);
+ address->addr_list = g_list_reverse(list);
return address;
}
+
+/*
+ * Comparison func
+ */
+
+gint
+libbalsa_address_compare(LibBalsaAddress *a, LibBalsaAddress *b)
+{
+ g_return_val_if_fail(a != NULL, -1);
+ g_return_val_if_fail(b != NULL, 1);
+
+ return g_ascii_strcasecmp(a->full_name, b->full_name);
+}
+
+/*
+ * Getters
+ */
+
+const gchar *
+libbalsa_address_get_full_name(const LibBalsaAddress * address)
+{
+ return address->full_name;
+}
+
+const gchar *
+libbalsa_address_get_first_name(const LibBalsaAddress * address)
+{
+ return address->first_name;
+}
+
+const gchar *
+libbalsa_address_get_last_name(const LibBalsaAddress * address)
+{
+ return address->last_name;
+}
+
+const gchar *
+libbalsa_address_get_nick_name(const LibBalsaAddress * address)
+{
+ return address->nick_name;
+}
+
+const gchar *
+libbalsa_address_get_organization(const LibBalsaAddress * address)
+{
+ return address->organization;
+}
+
+const gchar *
+libbalsa_address_get_addr(const LibBalsaAddress * address)
+{
+ return address->addr_list != NULL ? address->addr_list->data : NULL;
+}
+
+GList *
+libbalsa_address_get_addr_list(const LibBalsaAddress * address)
+{
+ return address->addr_list;
+}
+
+/*
+ * Setters
+ */
+
+void
+libbalsa_address_set_full_name(LibBalsaAddress * address,
+ const gchar * full_name)
+{
+ g_free(address->full_name);
+ address->full_name = g_strdup(full_name);
+}
+
+void
+libbalsa_address_set_first_name(LibBalsaAddress * address,
+ const gchar * first_name)
+{
+ g_free(address->first_name);
+ address->first_name = g_strdup(first_name);
+}
+
+void
+libbalsa_address_set_last_name(LibBalsaAddress * address,
+ const gchar * last_name)
+{
+ g_free(address->last_name);
+ address->last_name = g_strdup(last_name);
+}
+
+void
+libbalsa_address_set_nick_name(LibBalsaAddress * address,
+ const gchar * nick_name)
+{
+ g_free(address->nick_name);
+ address->nick_name = g_strdup(nick_name);
+}
+
+void
+libbalsa_address_set_organization(LibBalsaAddress * address,
+ const gchar * organization)
+{
+ g_free(address->organization);
+ address->organization = g_strdup(organization);
+}
+
+void
+libbalsa_address_set_addr_list(LibBalsaAddress * address,
+ GList * addr_list)
+{
+ g_list_free_full(address->addr_list, g_free);
+ address->addr_list = addr_list;
+}
+
+void libbalsa_address_add_addr(LibBalsaAddress * address,
+ const gchar * addr)
+{
+ address->addr_list = g_list_prepend(address->addr_list, g_strdup(addr));
+}
diff --git a/libbalsa/address.h b/libbalsa/address.h
index e88a462..f92c1ed 100644
--- a/libbalsa/address.h
+++ b/libbalsa/address.h
@@ -21,17 +21,11 @@
#ifndef __LIBBALSA_ADDRESS_H__
#define __LIBBALSA_ADDRESS_H__
-#include <gtk/gtk.h>
#include <gmime/gmime.h>
+#include <gtk/gtk.h>
-#define LIBBALSA_TYPE_ADDRESS (libbalsa_address_get_type())
-#define LIBBALSA_ADDRESS(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj,
LIBBALSA_TYPE_ADDRESS, LibBalsaAddress))
-#define LIBBALSA_ADDRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass,
LIBBALSA_TYPE_ADDRESS, LibBalsaAddressClass))
-#define LIBBALSA_IS_ADDRESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj,
LIBBALSA_TYPE_ADDRESS))
-#define LIBBALSA_IS_ADDRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (klass,
LIBBALSA_TYPE_ADDRESS))
-
-typedef struct _LibBalsaAddress LibBalsaAddress;
-typedef struct _LibBalsaAddressClass LibBalsaAddressClass;
+#define LIBBALSA_TYPE_ADDRESS (libbalsa_address_get_type())
+G_DECLARE_FINAL_TYPE(LibBalsaAddress, libbalsa_address, LIBBALSA, ADDRESS, GObject)
typedef enum _LibBalsaAddressField LibBalsaAddressField;
@@ -45,44 +39,6 @@ enum _LibBalsaAddressField {
NUM_FIELDS
};
-/* General address structure to be used with address books.
-*/
-struct _LibBalsaAddress {
- GObject parent;
-
- /*
- * ID
- * VCard FN: Field
- * LDAP/LDIF: xmozillanickname
- */
- gchar *nick_name;
-
- /* First and last names
- * VCard: parsed from N: field
- * LDAP/LDIF: cn, givenName, surName.
- */
- gchar *full_name;
- gchar *first_name;
- gchar *last_name;
-
- /* Organisation
- * VCard: ORG: field
- * ldif: o: attribute.
- */
- gchar *organization;
-
- /* Email addresses
- * A list of mailboxes, ie. user@domain.
- */
- GList *address_list;
-};
-
-struct _LibBalsaAddressClass {
- GObjectClass parent_class;
-};
-
-GType libbalsa_address_get_type(void);
-
LibBalsaAddress *libbalsa_address_new(void);
LibBalsaAddress *libbalsa_address_new_from_vcard(const gchar *str,
const gchar *charset);
@@ -94,11 +50,11 @@ void libbalsa_address_set_copy(LibBalsaAddress *dest, LibBalsaAddress *src);
gchar *libbalsa_address_to_gchar(LibBalsaAddress * address, gint n);
const gchar *libbalsa_address_get_name_from_list(InternetAddressList
- * address_list);
+ * addr_list);
const gchar *libbalsa_address_get_mailbox_from_list(InternetAddressList *
- address_list);
+ addr_list);
gint libbalsa_address_n_mailboxes_in_list(InternetAddressList *
- address_list);
+ addr_list);
/* =================================================================== */
/* UI PART */
@@ -129,4 +85,42 @@ GtkWidget *libbalsa_address_get_edit_widget(const LibBalsaAddress *addr,
GCallback changed_cb,
gpointer changed_data);
LibBalsaAddress *libbalsa_address_new_from_edit_entries(GtkWidget **widget);
+
+/*
+ * Comparison func
+ */
+gint libbalsa_address_compare(LibBalsaAddress *a,
+ LibBalsaAddress *b);
+
+/*
+ * Getters
+ */
+
+const gchar * libbalsa_address_get_full_name (const LibBalsaAddress * address);
+const gchar * libbalsa_address_get_first_name (const LibBalsaAddress * address);
+const gchar * libbalsa_address_get_last_name (const LibBalsaAddress * address);
+const gchar * libbalsa_address_get_nick_name (const LibBalsaAddress * address);
+const gchar * libbalsa_address_get_organization(const LibBalsaAddress * address);
+const gchar * libbalsa_address_get_addr (const LibBalsaAddress * address);
+GList * libbalsa_address_get_addr_list (const LibBalsaAddress * address);
+
+/*
+ * Setters
+ */
+
+void libbalsa_address_set_full_name (LibBalsaAddress * address,
+ const gchar * full_name);
+void libbalsa_address_set_first_name (LibBalsaAddress * address,
+ const gchar * first_name);
+void libbalsa_address_set_last_name (LibBalsaAddress * address,
+ const gchar * last_name);
+void libbalsa_address_set_nick_name (LibBalsaAddress * address,
+ const gchar * nick_name);
+void libbalsa_address_set_organization(LibBalsaAddress * address,
+ const gchar * organization);
+void libbalsa_address_set_addr_list (LibBalsaAddress * address,
+ GList * addr_list);
+void libbalsa_address_add_addr (LibBalsaAddress * address,
+ const gchar * addr);
+
#endif /* __LIBBALSA_ADDRESS_H__ */
diff --git a/libbalsa/rfc2445.c b/libbalsa/rfc2445.c
index ce2009a..e2af541 100644
--- a/libbalsa/rfc2445.c
+++ b/libbalsa/rfc2445.c
@@ -485,10 +485,12 @@ libbalsa_vevent_reply(const LibBalsaVEvent * event, const gchar * sender,
pstats[(int) new_stat].str_2445, sender);
if (event->uid)
g_string_append_printf(retval, "UID:%s\n", event->uid);
- if (event->organizer && event->organizer->address_list)
- g_string_append_printf(retval, "ORGANIZER:mailto:%s\n",
- (gchar *) event->organizer->address_list->
- data);
+ if (event->organizer != NULL) {
+ const gchar *addr = libbalsa_address_get_addr(event->organizer);
+
+ if (addr != NULL)
+ g_string_append_printf(retval, "ORGANIZER:mailto:%s\n", addr);
+ }
if (event->summary) {
buf = text_2445_escape(event->summary);
g_string_append_printf(retval, "SUMMARY:%s\n", buf);
@@ -630,7 +632,7 @@ cal_address_2445_to_lbaddress(const gchar * uri, gchar ** attributes,
return NULL;
retval = libbalsa_address_new();
- retval->address_list = g_list_prepend(NULL, g_strdup(uri + 7));
+ libbalsa_address_add_addr(retval, uri + 7);
if (!is_organizer)
g_object_set_data(G_OBJECT(retval), RFC2445_ROLE,
LB_ROLE2PTR(VCAL_ROLE_REQ_PART));
@@ -642,7 +644,7 @@ cal_address_2445_to_lbaddress(const gchar * uri, gchar ** attributes,
/* scan attributes for extra information */
for (n = 0; (the_attr = attributes[n]); n++) {
if (!g_ascii_strncasecmp(the_attr, "CN=", 3))
- retval->full_name = g_strdup(the_attr + 3);
+ libbalsa_address_set_full_name(retval, the_attr + 3);
else if (!g_ascii_strncasecmp(the_attr, "ROLE=", 5))
g_object_set_data(G_OBJECT(retval), RFC2445_ROLE,
LB_ROLE2PTR(vcal_str_to_role(the_attr + 5)));
diff --git a/libbalsa/rfc6350.c b/libbalsa/rfc6350.c
index 81574d9..c6652e5 100644
--- a/libbalsa/rfc6350.c
+++ b/libbalsa/rfc6350.c
@@ -103,10 +103,10 @@ rfc6350_parse_from_stream(GDataInputStream *stream,
/* ignore items without an Email address, fill empty full name if necessary */
if (result != NULL) {
- if (result->address_list == NULL) {
+ if (libbalsa_address_get_addr_list(result) == NULL) {
g_clear_object(&result);
- } else if (result->full_name == NULL) {
- result->full_name = g_strdup(_("No-Name"));
+ } else if (libbalsa_address_get_full_name(result) == NULL) {
+ libbalsa_address_set_full_name(result, _("No-Name"));
}
}
@@ -269,42 +269,30 @@ rfc6350_eval_line(gchar *line,
g_debug("%s: line='%s' name='%s', value='%s'", __func__, line, name, value);
if (g_ascii_strcasecmp(name, "FN") == 0) {
rfc6350_unescape(value);
- g_free(address->full_name);
- address->full_name = g_strdup(value);
+ libbalsa_address_set_full_name(address, value);
} else if (g_ascii_strcasecmp(name, "N") == 0) {
gchar **n_items;
n_items = rfc6350_strsplit(value, 5U);
- g_free(address->first_name);
- g_free(address->last_name);
- if (n_items[1] != NULL) {
- address->first_name = g_strdup(n_items[1]);
- } else {
- address->first_name = NULL;
- }
- if (n_items[0] != NULL) {
- address->last_name = g_strdup(n_items[0]);
- } else {
- address->last_name = NULL;
- }
- if (address->full_name == NULL) {
- address->full_name = rfc6350_fn_from_n(n_items);
+ libbalsa_address_set_first_name(address, n_items[1]);
+ libbalsa_address_set_last_name(address, n_items[0]);
+ if (libbalsa_address_get_full_name(address) == NULL) {
+ libbalsa_address_set_full_name
+ (address, rfc6350_fn_from_n(n_items));
}
g_strfreev(n_items);
} else if (g_ascii_strcasecmp(name, "NICKNAME") == 0) {
rfc6350_unescape(value);
- g_free(address->nick_name);
- address->nick_name = g_strdup(value);
+ libbalsa_address_set_nick_name(address, value);
} else if (g_ascii_strcasecmp(name, "ORG") == 0) {
gchar **n_items;
n_items = rfc6350_strsplit(value, 2U);
- g_free(address->organization);
- address->organization = g_strdup(n_items[0]);
+ libbalsa_address_set_organization(address, n_items[0]);
g_strfreev(n_items);
} else if (g_ascii_strcasecmp(name, "EMAIL") == 0) {
rfc6350_unescape(value);
- address->address_list = g_list_prepend(address->address_list,
g_strdup(value));
+ libbalsa_address_add_addr(address, value);
} else {
/* ignore any other items */
}
diff --git a/src/ab-main.c b/src/ab-main.c
index 43d0372..13bd0d8 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -123,19 +123,23 @@ bab_load_cb(LibBalsaAddressBook *libbalsa_ab,
LibBalsaAddress *address, GtkTreeModel *model)
{
GtkTreeIter iter;
+ GList *addr_list;
g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK(libbalsa_ab));
if (address == NULL)
return;
- if (libbalsa_address_is_dist_list(libbalsa_ab, address)) {
+ addr_list = libbalsa_address_get_addr_list(address);
+ if (libbalsa_address_book_get_dist_list_mode(libbalsa_ab)
+ && addr_list != NULL && addr_list->next != NULL) {
gchar *address_string = libbalsa_address_to_gchar(address, -1);
gtk_list_store_prepend(GTK_LIST_STORE(model), &iter);
/* GtkListStore refs address, and unrefs it when cleared */
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
- LIST_COLUMN_NAME, address->full_name,
+ LIST_COLUMN_NAME,
+ libbalsa_address_get_full_name(address),
LIST_COLUMN_ADDRSPEC, address_string,
LIST_COLUMN_ADDRESS, address,
-1);
@@ -144,13 +148,14 @@ bab_load_cb(LibBalsaAddressBook *libbalsa_ab,
} else {
GList *l;
- for (l = address->address_list; l; l = l->next) {
+ for (l = addr_list; l != NULL; l = l->next) {
gtk_list_store_prepend(GTK_LIST_STORE(model), &iter);
/* GtkListStore refs address once for each address in
* the list, and unrefs it the same number of times when
* cleared */
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
- LIST_COLUMN_NAME, address->full_name,
+ LIST_COLUMN_NAME,
+ libbalsa_address_get_full_name(address),
LIST_COLUMN_ADDRSPEC, l->data,
LIST_COLUMN_ADDRESS, address,
-1);
diff --git a/src/ab-window.c b/src/ab-window.c
index a095c47..4fd0884 100644
--- a/src/ab-window.c
+++ b/src/ab-window.c
@@ -758,8 +758,9 @@ balsa_ab_window_load_cb(LibBalsaAddressBook *libbalsa_ab,
{
GtkTreeModel *model;
GtkTreeIter iter;
- GList *address_list;
+ GList *addr_list;
gint count;
+ const gchar *full_name;
g_return_if_fail ( BALSA_IS_AB_WINDOW(ab));
g_return_if_fail ( LIBBALSA_IS_ADDRESS_BOOK(libbalsa_ab) );
@@ -767,14 +768,18 @@ balsa_ab_window_load_cb(LibBalsaAddressBook *libbalsa_ab,
if ( address == NULL )
return;
+ full_name = libbalsa_address_get_full_name(address);
model = gtk_tree_view_get_model(GTK_TREE_VIEW(ab->address_list));
- if ( libbalsa_address_is_dist_list(libbalsa_ab, address) ) {
+
+ addr_list = libbalsa_address_get_addr_list(address);
+ if (libbalsa_address_book_get_dist_list_mode(libbalsa_ab)
+ && addr_list != NULL && addr_list->next != NULL) {
gchar *address_string = libbalsa_address_to_gchar(address, -1);
gtk_list_store_prepend(GTK_LIST_STORE(model), &iter);
/* GtkListStore refs address, and unrefs it when cleared */
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
- LIST_COLUMN_NAME, address->full_name,
+ LIST_COLUMN_NAME, full_name,
LIST_COLUMN_ADDRESS_STRING, address_string,
LIST_COLUMN_ADDRESS, address,
LIST_COLUMN_WHICH, -1,
@@ -782,22 +787,21 @@ balsa_ab_window_load_cb(LibBalsaAddressBook *libbalsa_ab,
g_free(address_string);
} else {
- address_list = address->address_list;
count = 0;
- while ( address_list ) {
+ while (addr_list) {
gtk_list_store_prepend(GTK_LIST_STORE(model), &iter);
/* GtkListStore refs address once for each address in
* the list, and unrefs it the same number of times when
* cleared */
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
- LIST_COLUMN_NAME, address->full_name,
+ LIST_COLUMN_NAME, full_name,
LIST_COLUMN_ADDRESS_STRING,
- address_list->data,
+ addr_list->data,
LIST_COLUMN_ADDRESS, address,
LIST_COLUMN_WHICH, count,
-1);
- address_list = address_list->next;
+ addr_list = addr_list->next;
count++;
}
}
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index efb4598..3be4587 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -1271,16 +1271,16 @@ bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
gchar *ptr, size_t len)
{
BalsaMimeWidget *mw;
- LibBalsaAddress *addr;
+ LibBalsaAddress *address;
GtkWidget *widget;
GtkGrid *grid;
GtkWidget *w;
int row = 1;
- addr =
+ address =
libbalsa_address_new_from_vcard(ptr, mime_body->charset ?
mime_body-> charset : "us-ascii");
- if (!addr)
+ if (address == NULL)
return NULL;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
@@ -1295,18 +1295,15 @@ bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
w = gtk_button_new_with_mnemonic(_("S_tore Address"));
gtk_grid_attach(grid, w, 0, 0, 2, 1);
g_signal_connect_swapped(w, "clicked",
- G_CALLBACK(balsa_store_address), addr);
- g_object_weak_ref(G_OBJECT(mw), (GWeakNotify)g_object_unref, addr);
-
-
- GRID_ATTACH(grid, addr->full_name, _("Full Name:"));
- GRID_ATTACH(grid, addr->nick_name, _("Nick Name:"));
- GRID_ATTACH(grid, addr->first_name, _("First Name:"));
- GRID_ATTACH(grid, addr->last_name, _("Last Name:"));
- GRID_ATTACH(grid, addr->organization, _("Organization:"));
- if(addr->address_list) {
- GRID_ATTACH(grid, addr->address_list->data, _("Email Address:"));
- }
+ G_CALLBACK(balsa_store_address), address);
+ g_object_weak_ref(G_OBJECT(mw), (GWeakNotify)g_object_unref, address);
+
+ GRID_ATTACH(grid, libbalsa_address_get_full_name(address), _("Full Name:"));
+ GRID_ATTACH(grid, libbalsa_address_get_nick_name(address), _("Nick Name:"));
+ GRID_ATTACH(grid, libbalsa_address_get_first_name(address), _("First Name:"));
+ GRID_ATTACH(grid, libbalsa_address_get_last_name(address), _("Last Name:"));
+ GRID_ATTACH(grid, libbalsa_address_get_organization(address), _("Organization:"));
+ GRID_ATTACH(grid, libbalsa_address_get_addr(address), _("Email Address:"));
return mw;
}
diff --git a/src/balsa-mime-widget-vcalendar.c b/src/balsa-mime-widget-vcalendar.c
index d98b52e..ca6f8ea 100644
--- a/src/balsa-mime-widget-vcalendar.c
+++ b/src/balsa-mime-widget-vcalendar.c
@@ -190,9 +190,8 @@ balsa_vevent_widget(LibBalsaVEvent * event, gboolean may_reply,
g_free(this_att);
if (may_reply && libbalsa_vcal_attendee_rsvp(lba)) {
- InternetAddress *ia =
- internet_address_mailbox_new(NULL,
- lba->address_list->data);
+ const gchar *addr = libbalsa_address_get_addr(lba);
+ InternetAddress *ia = internet_address_mailbox_new(NULL, addr);
GList *list;
for (list = balsa_app.identities; list; list = list->next) {
diff --git a/src/balsa-print-object-text.c b/src/balsa-print-object-text.c
index 033e5c1..06b8f3e 100644
--- a/src/balsa-print-object-text.c
+++ b/src/balsa-print-object-text.c
@@ -432,7 +432,7 @@ balsa_print_object_text_vcard(GList * list,
PangoTabArray *tabs;
GString *desc_buf;
gdouble c_max_height;
- LibBalsaAddress * addr = NULL;
+ LibBalsaAddress *address = NULL;
gchar *textbuf;
/* check if we can create an address from the body and fall back to default if
@@ -442,8 +442,8 @@ balsa_print_object_text_vcard(GList * list,
else
libbalsa_message_body_get_content(body, &textbuf, NULL);
if (textbuf)
- addr = libbalsa_address_new_from_vcard(textbuf, body->charset);
- if (!addr) {
+ address = libbalsa_address_new_from_vcard(textbuf, body->charset);
+ if (address == NULL) {
g_free(textbuf);
return balsa_print_object_text(list, context, body, psetup);
}
@@ -483,19 +483,19 @@ balsa_print_object_text_vcard(GList * list,
desc_buf = g_string_new("");
pod->p_label_width = 0;
ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- addr->full_name, _("Full Name"));
+ libbalsa_address_get_full_name(address), _("Full Name"));
ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- addr->nick_name, _("Nick Name"));
+ libbalsa_address_get_nick_name(address), _("Nick Name"));
ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- addr->first_name, _("First Name"));
+ libbalsa_address_get_first_name(address), _("First Name"));
ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- addr->last_name, _("Last Name"));
+ libbalsa_address_get_last_name(address), _("Last Name"));
ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- addr->organization, _("Organization"));
- if (addr->address_list)
- ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
- (const gchar *) addr->address_list->data, _("Email Address"));
- g_object_unref(addr);
+ libbalsa_address_get_organization(address), _("Organization"));
+ ADD_VCARD_FIELD(desc_buf, pod->p_label_width, test_layout,
+ libbalsa_address_get_addr(address), _("Email Address"));
+
+ g_object_unref(address);
/* add a small space between label and value */
pod->p_label_width += C_TO_P(C_LABEL_SEP);
diff --git a/src/store-address.c b/src/store-address.c
index 8e0bf1f..e8c4bb9 100644
--- a/src/store-address.c
+++ b/src/store-address.c
@@ -376,29 +376,24 @@ store_address_add_address(StoreAddressInfo * info,
text = internet_address_to_string(ia, FALSE);
address = libbalsa_address_new();
- address->full_name =
- g_strdup(ia->name ? ia->name : group ? group->name : NULL);
+ libbalsa_address_set_full_name(address,
+ ia->name != NULL ? ia->name :
+ group != NULL ? group->name : NULL);
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));
+ libbalsa_address_add_addr
+ (address, 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));
+ libbalsa_address_add_addr(address, INTERNET_ADDRESS_MAILBOX(ia)->addr);
}
ew = libbalsa_address_get_edit_widget(address, entries, NULL, NULL);
g_object_unref(address);
@@ -419,15 +414,19 @@ store_address_add_lbaddress(StoreAddressInfo * info,
{
gchar *label_text;
GtkWidget **entries, *ew;
+ const gchar *addr;
+ const gchar *full_name;
+
+ addr = libbalsa_address_get_addr(address);
+ g_return_if_fail(addr != NULL);
- g_return_if_fail(address->address_list);
entries = g_new(GtkWidget *, NUM_FIELDS);
info->entries_list = g_list_append(info->entries_list, entries);
ew = libbalsa_address_get_edit_widget(address, entries, NULL, NULL);
- label_text = g_strdup(address->full_name ? address->full_name :
- address->address_list->data);
+ full_name = libbalsa_address_get_full_name(address);
+ label_text = g_strdup(full_name != NULL ? full_name : addr);
if (g_utf8_strlen(label_text, -1) > 15)
/* truncate to an arbitrary length: */
*g_utf8_offset_to_pointer(label_text, 15) = '\0';
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]