diff options
Diffstat (limited to 'addressbook/backend/ebook/e-destination.c')
-rw-r--r-- | addressbook/backend/ebook/e-destination.c | 575 |
1 files changed, 272 insertions, 303 deletions
diff --git a/addressbook/backend/ebook/e-destination.c b/addressbook/backend/ebook/e-destination.c index 5cb5fa859f..b82e616601 100644 --- a/addressbook/backend/ebook/e-destination.c +++ b/addressbook/backend/ebook/e-destination.c @@ -41,8 +41,6 @@ #include <gnome-xml/xmlmemory.h> #include <camel/camel-internet-address.h> -#define d(x) x - enum { CHANGED, CARDIFIED, @@ -52,6 +50,7 @@ enum { guint e_destination_signals[LAST_SIGNAL] = { 0 }; struct _EDestinationPrivate { + gchar *raw; gchar *book_uri; @@ -78,7 +77,6 @@ struct _EDestinationPrivate { guint has_been_cardified : 1; guint allow_cardify : 1; guint cannot_cardify : 1; - guint auto_recipient : 1; guint pending_cardification; guint pending_change : 1; @@ -149,7 +147,6 @@ e_destination_init (EDestination *dest) dest->priv->allow_cardify = TRUE; dest->priv->cannot_cardify = FALSE; - dest->priv->auto_recipient = FALSE; dest->priv->pending_cardification = 0; } @@ -186,8 +183,7 @@ e_destination_freeze (EDestination *dest) { g_return_if_fail (E_IS_DESTINATION (dest)); g_return_if_fail (dest->priv->freeze_count >= 0); - - dest->priv->freeze_count++; + ++dest->priv->freeze_count; } static void @@ -195,8 +191,7 @@ e_destination_thaw (EDestination *dest) { g_return_if_fail (E_IS_DESTINATION (dest)); g_return_if_fail (dest->priv->freeze_count > 0); - - dest->priv->freeze_count--; + --dest->priv->freeze_count; if (dest->priv->freeze_count == 0 && dest->priv->pending_change) e_destination_changed (dest); } @@ -256,33 +251,34 @@ static void e_destination_clear_card (EDestination *dest) { if (dest->priv->card) { + if (dest->priv->old_card) gtk_object_unref (GTK_OBJECT (dest->priv->old_card)); - + dest->priv->old_card = dest->priv->card; dest->priv->old_card_email_num = dest->priv->card_email_num; - + g_free (dest->priv->old_textrep); dest->priv->old_textrep = g_strdup (e_destination_get_textrep (dest)); } - + g_free (dest->priv->book_uri); dest->priv->book_uri = NULL; g_free (dest->priv->card_uid); dest->priv->card_uid = NULL; - + dest->priv->card = NULL; dest->priv->card_email_num = -1; - + g_list_foreach (dest->priv->list_dests, (GFunc) gtk_object_unref, NULL); g_list_free (dest->priv->list_dests); dest->priv->list_dests = NULL; - + dest->priv->allow_cardify = TRUE; dest->priv->cannot_cardify = FALSE; - + e_destination_cancel_cardify (dest); - + e_destination_changed (dest); } @@ -291,19 +287,19 @@ e_destination_clear_strings (EDestination *dest) { g_free (dest->priv->raw); dest->priv->raw = NULL; - + g_free (dest->priv->name); dest->priv->name = NULL; - + g_free (dest->priv->email); dest->priv->email = NULL; - + g_free (dest->priv->addr); dest->priv->addr = NULL; - + g_free (dest->priv->textrep); dest->priv->textrep = NULL; - + e_destination_changed (dest); } @@ -311,12 +307,12 @@ void e_destination_clear (EDestination *dest) { g_return_if_fail (dest && E_IS_DESTINATION (dest)); - + e_destination_freeze (dest); - + e_destination_clear_card (dest); e_destination_clear_strings (dest); - + e_destination_thaw (dest); } @@ -326,7 +322,7 @@ nonempty (const gchar *s) gunichar c; while (*s) { c = g_utf8_get_char (s); - if (!g_unichar_isspace (c)) + if (! g_unichar_isspace (c)) return TRUE; s = g_utf8_next_char (s); } @@ -338,9 +334,7 @@ e_destination_is_empty (const EDestination *dest) { struct _EDestinationPrivate *p; - g_return_val_if_fail (E_IS_DESTINATION (dest), TRUE); - p = dest->priv; return !(p->card != NULL @@ -356,19 +350,14 @@ e_destination_is_empty (const EDestination *dest) gboolean e_destination_is_valid (const EDestination *dest) { - const char *email; - + const gchar *email; + g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); - + if (e_destination_from_card (dest)) return TRUE; - + email = e_destination_get_email (dest); - - /* FIXME: if we really wanted to get fancy here, we could - check to make sure that the address was valid according to - rfc822's addr-spec grammar. */ - return email && *email && strchr (email, '@'); } @@ -376,25 +365,25 @@ gboolean e_destination_equal (const EDestination *a, const EDestination *b) { const struct _EDestinationPrivate *pa, *pb; - const char *na, *nb; - + const gchar *na, *nb; + g_return_val_if_fail (E_IS_DESTINATION (a), FALSE); g_return_val_if_fail (E_IS_DESTINATION (b), FALSE); - + if (a == b) return TRUE; - + pa = a->priv; pb = b->priv; - + /* Check equality of cards. */ if (pa->card || pb->card) { if (! (pa->card && pb->card)) return FALSE; - + if (pa->card == pb->card || !strcmp (e_card_get_id (pa->card), e_card_get_id (pb->card))) return TRUE; - + return FALSE; } @@ -415,19 +404,20 @@ e_destination_set_card (EDestination *dest, ECard *card, gint email_num) { g_return_if_fail (dest && E_IS_DESTINATION (dest)); g_return_if_fail (card && E_IS_CARD (card)); - + if (dest->priv->card != card || dest->priv->card_email_num != email_num) { + /* We have to freeze/thaw around these operations so that the 'changed' signals don't cause the EDestination's internal state to be altered before we can finish setting ->card && ->card_email_num. */ e_destination_freeze (dest); e_destination_clear (dest); - + dest->priv->card = card; gtk_object_ref (GTK_OBJECT (dest->priv->card)); - + dest->priv->card_email_num = email_num; - + e_destination_changed (dest); e_destination_thaw (dest); } @@ -438,11 +428,13 @@ e_destination_set_book_uri (EDestination *dest, const gchar *uri) { g_return_if_fail (dest && E_IS_DESTINATION (dest)); g_return_if_fail (uri != NULL); + + if (dest->priv->book_uri == NULL + || strcmp (dest->priv->book_uri, uri)) { - if (dest->priv->book_uri == NULL || strcmp (dest->priv->book_uri, uri)) { g_free (dest->priv->book_uri); dest->priv->book_uri = g_strdup (uri); - + /* If we already have a card, remove it unless it's uri matches the one we just set. */ if (dest->priv->card) { @@ -452,7 +444,7 @@ e_destination_set_book_uri (EDestination *dest, const gchar *uri) dest->priv->card = NULL; } } - + e_destination_changed (dest); } } @@ -462,22 +454,22 @@ e_destination_set_card_uid (EDestination *dest, const gchar *uid, gint email_num { g_return_if_fail (dest && E_IS_DESTINATION (dest)); g_return_if_fail (uid != NULL); - + if (dest->priv->card_uid == NULL || strcmp (dest->priv->card_uid, uid) || dest->priv->card_email_num != email_num) { - + g_free (dest->priv->card_uid); dest->priv->card_uid = g_strdup (uid); dest->priv->card_email_num = email_num; - + /* If we already have a card, remove it unless it's uri matches the one we just set. */ if (dest->priv->card && strcmp (uid, e_card_get_id (dest->priv->card))) { gtk_object_unref (GTK_OBJECT (dest->priv->card)); dest->priv->card = NULL; } - + e_destination_changed (dest); } } @@ -486,9 +478,9 @@ void e_destination_set_name (EDestination *dest, const gchar *name) { gboolean changed = FALSE; - + g_return_if_fail (E_IS_DESTINATION (dest)); - + if (name == NULL) { if (dest->priv->name != NULL) { g_free (dest->priv->name); @@ -500,7 +492,7 @@ e_destination_set_name (EDestination *dest, const gchar *name) dest->priv->name = g_strdup (name); changed = TRUE; } - + if (changed) { g_free (dest->priv->addr); dest->priv->addr = NULL; @@ -514,20 +506,22 @@ void e_destination_set_email (EDestination *dest, const gchar *email) { gboolean changed = FALSE; - + g_return_if_fail (E_IS_DESTINATION (dest)); - + if (email == NULL) { if (dest->priv->email != NULL) { g_free (dest->priv->addr); dest->priv->addr = NULL; changed = TRUE; } - } else if (dest->priv->email == NULL || strcmp (dest->priv->email, email)) { + } else if (dest->priv->email == NULL || strcmp (dest->priv->email, email)) { + g_free (dest->priv->email); dest->priv->email = g_strdup (email); changed = TRUE; } + if (changed) { g_free (dest->priv->addr); @@ -564,21 +558,6 @@ e_destination_from_card (const EDestination *dest) return dest->priv->card != NULL || dest->priv->book_uri != NULL || dest->priv->card_uid != NULL; } -gboolean -e_destination_is_auto_recipient (const EDestination *dest) -{ - g_return_val_if_fail (dest && E_IS_DESTINATION (dest), FALSE); - - return dest->priv->auto_recipient; -} - -void -e_destination_set_auto_recipient (EDestination *dest, gboolean value) -{ - g_return_if_fail (dest && E_IS_DESTINATION (dest)); - - dest->priv->auto_recipient = value; -} typedef struct _UseCard UseCard; struct _UseCard { @@ -591,17 +570,19 @@ static void use_card_cb (ECard *card, gpointer closure) { UseCard *uc = (UseCard *) closure; - + if (card != NULL && uc->dest->priv->card == NULL) { + uc->dest->priv->card = card; gtk_object_ref (GTK_OBJECT (uc->dest->priv->card)); e_destination_changed (uc->dest); + } - + if (uc->cb) { uc->cb (uc->dest, uc->dest->priv->card, uc->closure); } - + /* We held a copy of the destination during the callback. */ gtk_object_unref (GTK_OBJECT (uc->dest)); g_free (uc); @@ -611,13 +592,13 @@ void e_destination_use_card (EDestination *dest, EDestinationCardCallback cb, gpointer closure) { g_return_if_fail (dest && E_IS_DESTINATION (dest)); - + if (dest->priv->card != NULL) { if (cb) cb (dest, dest->priv->card, closure); } else if (dest->priv->book_uri != NULL && dest->priv->card_uid != NULL) { + UseCard *uc = g_new (UseCard, 1); - uc->dest = dest; /* Hold a reference to the destination during the callback. */ gtk_object_ref (GTK_OBJECT (uc->dest)); @@ -634,7 +615,7 @@ ECard * e_destination_get_card (const EDestination *dest) { g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + return dest->priv->card; } @@ -648,7 +629,7 @@ e_destination_get_card_uid (const EDestination *dest) if (dest->priv->card) return e_card_get_id (dest->priv->card); - + return NULL; } @@ -662,12 +643,11 @@ e_destination_get_book_uri (const EDestination *dest) if (dest->priv->card) { EBook *book = e_card_get_book (dest->priv->card); - if (book) { return e_book_get_uri (book); } } - + return NULL; } @@ -675,10 +655,10 @@ gint e_destination_get_email_num (const EDestination *dest) { g_return_val_if_fail (dest && E_IS_DESTINATION (dest), -1); - + if (dest->priv->card == NULL && (dest->priv->book_uri == NULL || dest->priv->card_uid == NULL)) return -1; - + return dest->priv->card_email_num; } @@ -686,34 +666,36 @@ const gchar * e_destination_get_name (const EDestination *dest) { struct _EDestinationPrivate *priv; - g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + priv = (struct _EDestinationPrivate *)dest->priv; /* cast out const */ if (priv->name == NULL) { + if (priv->card != NULL) { + priv->name = e_card_name_to_string (priv->card->name); - + if (priv->name == NULL || *priv->name == '\0') { g_free (priv->name); priv->name = g_strdup (priv->card->file_as); } - + if (priv->name == NULL || *priv->name == '\0') { g_free (priv->name); priv->name = g_strdup (e_destination_get_email (dest)); } + } else if (priv->raw != NULL) { + CamelInternetAddress *addr = camel_internet_address_new (); - + if (camel_address_unformat (CAMEL_ADDRESS (addr), priv->raw)) { - const char *camel_name = NULL; - + const gchar *camel_name = NULL; camel_internet_address_get (addr, 0, &camel_name, NULL); priv->name = g_strdup (camel_name); } - + camel_object_unref (CAMEL_OBJECT (addr)); } } @@ -726,33 +708,37 @@ const gchar * e_destination_get_email (const EDestination *dest) { struct _EDestinationPrivate *priv; - + g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + priv = (struct _EDestinationPrivate *)dest->priv; /* cast out const */ if (priv->email == NULL) { - if (priv->card != NULL) { - /* Pull the address out of the card. */ + + if (priv->card != NULL) { /* Pull the address out of the card. */ + if (priv->card->email) { EIterator *iter = e_list_get_iterator (priv->card->email); - int n = priv->card_email_num; - + gint n = priv->card_email_num; + if (n >= 0) { while (n > 0) { e_iterator_next (iter); - n--; + --n; } - + if (e_iterator_is_valid (iter)) { gconstpointer ptr = e_iterator_get (iter); - priv->email = g_strdup ((char *) ptr); + priv->email = g_strdup ((gchar *) ptr); } } + } + } else if (priv->raw != NULL) { + CamelInternetAddress *addr = camel_internet_address_new (); - + if (camel_address_unformat (CAMEL_ADDRESS (addr), priv->raw)) { const gchar *camel_email = NULL; camel_internet_address_get (addr, 0, NULL, &camel_email); @@ -767,7 +753,7 @@ e_destination_get_email (const EDestination *dest) priv->email = g_strdup (""); } } - + return priv->email; } @@ -779,16 +765,15 @@ e_destination_get_address (const EDestination *dest) g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); priv = (struct _EDestinationPrivate *)dest->priv; /* cast out const */ - + if (priv->addr == NULL) { CamelInternetAddress *addr = camel_internet_address_new (); - + if (e_destination_is_evolution_list (dest)) { GList *iter = dest->priv->list_dests; while (iter) { EDestination *list_dest = E_DESTINATION (iter->data); - if (!e_destination_is_empty (list_dest)) { camel_internet_address_add (addr, e_destination_get_name (list_dest), @@ -798,22 +783,25 @@ e_destination_get_address (const EDestination *dest) } priv->addr = camel_address_encode (CAMEL_ADDRESS (addr)); + } else if (priv->raw) { if (camel_address_unformat (CAMEL_ADDRESS (addr), priv->raw)) { priv->addr = camel_address_encode (CAMEL_ADDRESS (addr)); } + } else { + camel_internet_address_add (addr, e_destination_get_name (dest), e_destination_get_email (dest)); - + priv->addr = camel_address_encode (CAMEL_ADDRESS (addr)); } - + camel_object_unref (CAMEL_OBJECT (addr)); } - + return priv->addr; } @@ -822,14 +810,15 @@ e_destination_set_raw (EDestination *dest, const gchar *raw) { g_return_if_fail (E_IS_DESTINATION (dest)); g_return_if_fail (raw != NULL); - + if (dest->priv->raw == NULL || strcmp (dest->priv->raw, raw)) { + e_destination_freeze (dest); - + e_destination_clear (dest); dest->priv->raw = g_strdup (raw); e_destination_changed (dest); - + e_destination_thaw (dest); } } @@ -837,35 +826,34 @@ e_destination_set_raw (EDestination *dest, const gchar *raw) const gchar * e_destination_get_textrep (const EDestination *dest) { - const char *name, *email; - + const gchar *name, *email; + g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + if (dest->priv->raw) return dest->priv->raw; - + name = e_destination_get_name (dest); email = e_destination_get_email (dest); - + if (e_destination_from_card (dest) && name != NULL) return name; - + /* Make sure that our address gets quoted properly */ if (name && email && dest->priv->textrep == NULL) { CamelInternetAddress *addr = camel_internet_address_new (); - camel_internet_address_add (addr, name, email); g_free (dest->priv->textrep); dest->priv->textrep = camel_address_format (CAMEL_ADDRESS (addr)); camel_object_unref (CAMEL_OBJECT (addr)); } - + if (dest->priv->textrep != NULL) return dest->priv->textrep; if (email) return email; - + return ""; } @@ -873,25 +861,23 @@ gboolean e_destination_is_evolution_list (const EDestination *dest) { g_return_val_if_fail (dest && E_IS_DESTINATION (dest), FALSE); - + if (dest->priv->list_dests == NULL && dest->priv->card != NULL && dest->priv->card->email != NULL && e_card_evolution_list (dest->priv->card)) { - + EIterator *iter = e_list_get_iterator (dest->priv->card->email); - e_iterator_reset (iter); while (e_iterator_is_valid (iter)) { - const char *dest_xml = (const char *) e_iterator_get (iter); + const gchar *dest_xml = (const gchar *) e_iterator_get (iter); EDestination *list_dest = e_destination_import (dest_xml); - if (list_dest) dest->priv->list_dests = g_list_append (dest->priv->list_dests, list_dest); e_iterator_next (iter); } } - + return dest->priv->list_dests != NULL; } @@ -899,10 +885,10 @@ gboolean e_destination_list_show_addresses (const EDestination *dest) { g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); - + if (dest->priv->card != NULL) return e_card_evolution_list_show_addresses (dest->priv->card); - + return dest->priv->show_addresses; } @@ -910,10 +896,10 @@ gboolean e_destination_get_html_mail_pref (const EDestination *dest) { g_return_val_if_fail (dest && E_IS_DESTINATION (dest), FALSE); - + if (dest->priv->html_mail_override || dest->priv->card == NULL) return dest->priv->wants_html_mail; - + return dest->priv->card->wants_html; } @@ -921,7 +907,7 @@ gboolean e_destination_allow_cardification (const EDestination *dest) { g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); - + return dest->priv->allow_cardify; } @@ -941,7 +927,7 @@ set_cardify_book (EDestination *dest, EBook *book) } dest->priv->cardify_book = book; - + if (book) gtk_object_ref (GTK_OBJECT (book)); } @@ -950,32 +936,32 @@ static void name_and_email_simple_query_cb (EBook *book, EBookSimpleQueryStatus status, const GList *cards, gpointer closure) { EDestination *dest = E_DESTINATION (closure); - + if (status == E_BOOK_SIMPLE_QUERY_STATUS_SUCCESS && g_list_length ((GList *) cards) == 1) { ECard *card = E_CARD (cards->data); - const char *email = e_destination_get_email (dest); - int email_num = 0; - + const gchar *email = e_destination_get_email (dest); + gint email_num = 0; + if (e_destination_is_valid (dest) && email && *email) { email_num = e_card_email_find_number (card, e_destination_get_email (dest)); } - + if (email_num >= 0) { const char *book_uri; - + book_uri = e_book_get_uri (book); - + dest->priv->has_been_cardified = TRUE; e_destination_set_card (dest, card, email_num); e_destination_set_book_uri (dest, book_uri); gtk_signal_emit (GTK_OBJECT (dest), e_destination_signals[CARDIFIED]); } } - + if (!dest->priv->has_been_cardified) { dest->priv->cannot_cardify = TRUE; } - + gtk_object_unref (GTK_OBJECT (dest)); /* drop the reference held by the query */ } @@ -984,13 +970,14 @@ static void nickname_simple_query_cb (EBook *book, EBookSimpleQueryStatus status, const GList *cards, gpointer closure) { EDestination *dest = E_DESTINATION (closure); - + if (status == E_BOOK_SIMPLE_QUERY_STATUS_SUCCESS) { + if (g_list_length ((GList *) cards) == 1) { const char *book_uri; - + book_uri = e_book_get_uri (book); - + dest->priv->has_been_cardified = TRUE; e_destination_set_card (dest, E_CARD (cards->data), 0); /* Uses primary e-mail by default. */ e_destination_set_book_uri (dest, book_uri); @@ -999,9 +986,10 @@ nickname_simple_query_cb (EBook *book, EBookSimpleQueryStatus status, const GLis gtk_object_unref (GTK_OBJECT (dest)); /* drop the reference held by the query */ } else { + /* We can only end up here if we don't look at all like an e-mail address, so we do a name-only query on the textrep */ - + e_book_name_and_email_query (book, e_destination_get_textrep (dest), NULL, @@ -1018,6 +1006,7 @@ static void launch_cardify_query (EDestination *dest) { if (! e_destination_is_valid (dest)) { + /* If it doesn't look like an e-mail address, see if it is a nickname. */ e_book_nickname_query (dest->priv->cardify_book, e_destination_get_textrep (dest), @@ -1025,6 +1014,7 @@ launch_cardify_query (EDestination *dest) dest); } else { + e_book_name_and_email_query (dest->priv->cardify_book, e_destination_get_name (dest), e_destination_get_email (dest), @@ -1041,7 +1031,7 @@ use_local_book_cb (EBook *book, gpointer closure) dest->priv->cardify_book = book; gtk_object_ref (GTK_OBJECT (book)); } - + launch_cardify_query (dest); } @@ -1049,21 +1039,21 @@ use_local_book_cb (EBook *book, gpointer closure) static gboolean e_destination_reverting_is_a_good_idea (EDestination *dest) { - const char *textrep; - int len, old_len; - + const gchar *textrep; + gint len, old_len; + g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); if (dest->priv->old_textrep == NULL) return FALSE; - + textrep = e_destination_get_textrep (dest); - + len = g_utf8_strlen (textrep, -1); old_len = g_utf8_strlen (dest->priv->old_textrep, -1); - + if (len <= old_len/2) return FALSE; - + return TRUE; } @@ -1072,30 +1062,30 @@ e_destination_cardify (EDestination *dest, EBook *book) { g_return_if_fail (E_IS_DESTINATION (dest)); g_return_if_fail (book == NULL || E_IS_BOOK (book)); - + if (e_destination_is_evolution_list (dest)) return; - + if (e_destination_contains_card (dest)) return; - + if (!dest->priv->allow_cardify) return; - + if (dest->priv->cannot_cardify) return; - + e_destination_cancel_cardify (dest); - + /* In some cases, we can revert to the previous card. */ if (!e_destination_is_valid (dest) && e_destination_reverting_is_a_good_idea (dest) && e_destination_revert (dest)) { return; } - + set_cardify_book (dest, book); - + /* Handle the case of an EDestination containing a card URL */ if (e_destination_contains_card (dest)) { e_destination_use_card (dest, NULL, NULL); @@ -1112,11 +1102,10 @@ e_destination_cardify (EDestination *dest, EBook *book) } } -static int +static gint do_cardify_delayed (gpointer ptr) { EDestination *dest = E_DESTINATION (ptr); - e_destination_cardify (dest, dest->priv->cardify_book); return FALSE; } @@ -1126,14 +1115,14 @@ e_destination_cardify_delayed (EDestination *dest, EBook *book, gint delay) { g_return_if_fail (E_IS_DESTINATION (dest)); g_return_if_fail (book == NULL || E_IS_BOOK (book)); - + if (delay < 0) delay = 500; - + e_destination_cancel_cardify (dest); - + set_cardify_book (dest, book); - + dest->priv->pending_cardification = gtk_timeout_add (delay, do_cardify_delayed, dest); } @@ -1141,7 +1130,7 @@ void e_destination_cancel_cardify (EDestination *dest) { g_return_if_fail (E_IS_DESTINATION (dest)); - + if (dest->priv->pending_cardification) { gtk_timeout_remove (dest->priv->pending_cardification); dest->priv->pending_cardification = 0; @@ -1151,24 +1140,24 @@ e_destination_cancel_cardify (EDestination *dest) gboolean e_destination_uncardify (EDestination *dest) { - char *email; - + gchar *email; + g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); - - if (!e_destination_contains_card (dest)) + + if (! e_destination_contains_card (dest)) return FALSE; - + email = g_strdup (e_destination_get_email (dest)); - + if (email == NULL) return FALSE; - + e_destination_freeze (dest); e_destination_clear (dest); e_destination_set_raw (dest, email); g_free (email); e_destination_thaw (dest); - + return TRUE; } @@ -1176,26 +1165,26 @@ gboolean e_destination_revert (EDestination *dest) { g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); - + if (dest->priv->old_card) { ECard *card; - int card_email_num; - + gint card_email_num; + card = dest->priv->old_card; card_email_num = dest->priv->old_card_email_num; - + dest->priv->old_card = NULL; g_free (dest->priv->old_textrep); dest->priv->old_textrep = NULL; - + e_destination_freeze (dest); e_destination_clear (dest); e_destination_set_card (dest, card, card_email_num); e_destination_thaw (dest); - + return TRUE; } - + return FALSE; } @@ -1206,29 +1195,29 @@ e_destination_revert (EDestination *dest) gchar * e_destination_get_address_textv (EDestination **destv) { - int i, j, len = 0; - char **strv; - char *str; + gint i, j, len = 0; + gchar **strv; + gchar *str; g_return_val_if_fail (destv, NULL); - + /* Q: Please tell me this is only for assertion reasons. If this is considered to be ok behavior then you shouldn't use g_return's. Just a reminder ;-) - + A: Yes, this is just an assertion. (Though it does find the length of the vector in the process...) */ while (destv[len]) { g_return_val_if_fail (E_IS_DESTINATION (destv[len]), NULL); - len++; + ++len; } - strv = g_new0 (char *, len + 1); + strv = g_new0 (gchar *, len+1); for (i = 0, j = 0; destv[i]; i++) { if (!e_destination_is_empty (destv[i])) { - const char *addr = e_destination_get_address (destv[i]); - strv[j++] = addr ? (char *) addr : ""; + const gchar *addr = e_destination_get_address (destv[i]); + strv[j++] = addr ? (gchar *) addr : ""; } } @@ -1243,17 +1232,17 @@ xmlNodePtr e_destination_xml_encode (const EDestination *dest) { xmlNodePtr dest_node; - const char *str; - + const gchar *str; + g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + dest_node = xmlNewNode (NULL, "destination"); - + str = e_destination_get_name (dest); if (str) xmlNewTextChild (dest_node, NULL, "name", str); - - if (!e_destination_is_evolution_list (dest)) { + + if (! e_destination_is_evolution_list (dest)) { str = e_destination_get_email (dest); if (str) xmlNewTextChild (dest_node, NULL, "email", str); @@ -1271,48 +1260,44 @@ e_destination_xml_encode (const EDestination *dest) str = e_destination_get_email (list_dest); if (str) xmlNewTextChild (list_node, NULL, "email", str); - + xmlAddChild (dest_node, list_node); iter = g_list_next (iter); } - + xmlNewProp (dest_node, "is_list", "yes"); xmlNewProp (dest_node, "show_addresses", e_destination_list_show_addresses (dest) ? "yes" : "no"); } - + str = e_destination_get_book_uri (dest); if (str) { xmlNewTextChild (dest_node, NULL, "book_uri", str); } - + str = e_destination_get_card_uid (dest); if (str) { - char buf[16]; - + gchar buf[16]; xmlNodePtr uri_node = xmlNewTextChild (dest_node, NULL, "card_uid", str); g_snprintf (buf, 16, "%d", e_destination_get_email_num (dest)); xmlNewProp (uri_node, "email_num", buf); } - + xmlNewProp (dest_node, "html_mail", e_destination_get_html_mail_pref (dest) ? "yes" : "no"); - - xmlNewProp (dest_node, "auto_recipient", - e_destination_is_auto_recipient (dest) ? "yes" : "no"); - + return dest_node; } gboolean e_destination_xml_decode (EDestination *dest, xmlNodePtr node) { - char *name = NULL, *email = NULL, *book_uri = NULL, *card_uid = NULL; - gboolean is_list = FALSE, show_addr = FALSE, auto_recip = FALSE; + gchar *name = NULL, *email = NULL, *book_uri = NULL, *card_uid = NULL; + gint email_num = -1; gboolean html_mail = FALSE; + gboolean is_list = FALSE, show_addr = FALSE; + gchar *tmp; GList *list_dests = NULL; - int email_num = -1; - char *tmp; g_return_val_if_fail (dest && E_IS_DESTINATION (dest), FALSE); g_return_val_if_fail (node != NULL, FALSE); @@ -1338,12 +1323,6 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) xmlFree (tmp); } - tmp = xmlGetProp (node, "auto_recipient"); - if (tmp) { - auto_recip = !strcmp (tmp, "yes"); - xmlFree (tmp); - } - node = node->xmlChildrenNode; while (node) { if (!strcmp (node->name, "name")) { @@ -1358,7 +1337,7 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) xmlFree (tmp); } else if (is_list && !strcmp (node->name, "list_entry")) { xmlNodePtr subnode = node->xmlChildrenNode; - char *list_name = NULL, *list_email = NULL; + gchar *list_name = NULL, *list_email = NULL; while (subnode) { if (!strcmp (subnode->name, "name")) { @@ -1378,7 +1357,6 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) if (list_name || list_email) { EDestination *list_dest = e_destination_new (); - if (list_name) e_destination_set_name (list_dest, list_name); if (list_email) @@ -1386,7 +1364,7 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) g_free (list_name); g_free (list_email); - + list_dests = g_list_append (list_dests, list_dest); } } else if (!strcmp (node->name, "book_uri")) { @@ -1407,7 +1385,7 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) node = node->next; } - + e_destination_freeze (dest); e_destination_clear (dest); @@ -1430,14 +1408,12 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) } if (list_dests) dest->priv->list_dests = list_dests; - + dest->priv->html_mail_override = TRUE; dest->priv->wants_html_mail = html_mail; - + dest->priv->show_addresses = show_addr; - - dest->priv->auto_recipient = auto_recip; - + e_destination_thaw (dest); return TRUE; @@ -1447,33 +1423,34 @@ e_destination_xml_decode (EDestination *dest, xmlNodePtr node) static gchar * null_terminate_and_remove_extra_whitespace (xmlChar *xml_in, gint size) { + gchar *xml; + gchar *r, *w; gboolean skip_white = FALSE; - char *xml, *r, *w; - + if (xml_in == NULL || size <= 0) return NULL; - + xml = g_strndup (xml_in, size); r = w = xml; - + while (*r) { if (*r == '\n' || *r == '\r') { skip_white = TRUE; } else { gboolean is_space = isspace (*r); - + *w = *r; - - if (!(skip_white && is_space)) - w++; - if (!is_space) + + if (! (skip_white && is_space)) + ++w; + if (! is_space) skip_white = FALSE; } - r++; + ++r; } - + *w = '\0'; - + return xml; } @@ -1481,26 +1458,26 @@ gchar * e_destination_export (const EDestination *dest) { xmlNodePtr dest_node; - xmlDocPtr dest_doc; - xmlChar *buffer = NULL; - int size = -1; - char *str; + xmlDocPtr dest_doc; + xmlChar *buffer = NULL; + gint size = -1; + gchar *str; g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); - + dest_node = e_destination_xml_encode (dest); if (dest_node == NULL) return NULL; - + dest_doc = xmlNewDoc (XML_DEFAULT_VERSION); xmlDocSetRootElement (dest_doc, dest_node); - + xmlDocDumpMemory (dest_doc, &buffer, &size); xmlFreeDoc (dest_doc); - + str = null_terminate_and_remove_extra_whitespace (buffer, size); xmlFree (buffer); - + return str; } @@ -1509,11 +1486,11 @@ e_destination_import (const gchar *str) { EDestination *dest = NULL; xmlDocPtr dest_doc; - - if (!(str && *str)) + + if (! (str && *str)) return NULL; - - dest_doc = xmlParseMemory ((char *) str, strlen (str)); + + dest_doc = xmlParseMemory ((gchar *) str, strlen (str)); if (dest_doc && dest_doc->xmlRootNode) { dest = e_destination_new (); if (! e_destination_xml_decode (dest, dest_doc->xmlRootNode)) { @@ -1522,40 +1499,41 @@ e_destination_import (const gchar *str) } } xmlFreeDoc (dest_doc); - + return dest; } gchar * e_destination_exportv (EDestination **destv) { - xmlDocPtr destv_doc; - xmlNodePtr destv_node; - xmlChar *buffer = NULL; - int i, size = -1; - char *str; - + xmlDocPtr destv_doc; + xmlNodePtr destv_node; + xmlChar *buffer = NULL; + gint size = -1; + gchar *str; + gint i; + if (destv == NULL || *destv == NULL) return NULL; - + destv_doc = xmlNewDoc (XML_DEFAULT_VERSION); destv_node = xmlNewNode (NULL, "destinations"); xmlDocSetRootElement (destv_doc, destv_node); - - for (i = 0; destv[i]; i++) { + + for (i=0; destv[i]; ++i) { if (! e_destination_is_empty (destv[i])) { xmlNodePtr dest_node = e_destination_xml_encode (destv[i]); if (dest_node) xmlAddChild (destv_node, dest_node); } } - + xmlDocDumpMemory (destv_doc, &buffer, &size); xmlFreeDoc (destv_doc); - + str = null_terminate_and_remove_extra_whitespace (buffer, size); xmlFree (buffer); - + return str; } @@ -1570,10 +1548,10 @@ e_destination_importv (const gchar *str) if (!(str && *str)) return NULL; - destv_doc = xmlParseMemory ((char *)str, strlen (str)); + destv_doc = xmlParseMemory ((gchar *)str, strlen (str)); if (destv_doc == NULL) return NULL; - + node = destv_doc->xmlRootNode; if (strcmp (node->name, "destinations")) @@ -1609,40 +1587,32 @@ e_destination_importv (const gchar *str) } EDestination ** -e_destination_list_to_vector_sized (GList *list, int n) +e_destination_list_to_vector (GList *list) { + gint N = g_list_length (list); EDestination **destv; - int i = 0; - - if (n == -1) - n = g_list_length (list); - - if (n == 0) + gint i = 0; + + if (N == 0) return NULL; - destv = g_new (EDestination *, n + 1); - while (list != NULL && i < n) { + destv = g_new (EDestination *, N+1); + while (list != NULL) { destv[i] = E_DESTINATION (list->data); list->data = NULL; - i++; + ++i; list = g_list_next (list); } - destv[i] = NULL; - - return destv; -} + destv[N] = NULL; -EDestination ** -e_destination_list_to_vector (GList *list) -{ - return e_destination_list_to_vector_sized (list, -1); + return destv; } void e_destination_freev (EDestination **destv) { - int i; - + gint i; + if (destv) { for (i = 0; destv[i] != NULL; ++i) { gtk_object_unref (GTK_OBJECT (destv[i])); @@ -1657,7 +1627,7 @@ touch_cb (EBook *book, const gchar *addr, ECard *card, gpointer closure) { if (book != NULL && card != NULL) { e_card_touch (card); - d(g_message ("Use score for \"%s\" is now %f", addr, e_card_get_use_score (card))); + g_message ("Use score for \"%s\" is now %f", addr, e_card_get_use_score (card)); e_book_commit_card (book, card, NULL, NULL); } } @@ -1665,25 +1635,24 @@ touch_cb (EBook *book, const gchar *addr, ECard *card, gpointer closure) void e_destination_touch (EDestination *dest) { - const char *email; - + const gchar *email; + g_return_if_fail (dest && E_IS_DESTINATION (dest)); - - if (!e_destination_is_auto_recipient (dest)) { - email = e_destination_get_email (dest); - - if (email) - e_book_query_address_locally (email, touch_cb, NULL); + + email = e_destination_get_email (dest); + + if (email) { + e_book_query_address_locally (email, touch_cb, NULL); } } void e_destination_touchv (EDestination **destv) { - int i; - + gint i; + g_return_if_fail (destv != NULL); - + for (i = 0; destv[i] != NULL; ++i) { e_destination_touch (destv[i]); } |