[gmime] Replaced GMimeRecipientType with GMimeAddressType and simplified code



commit 54cbad4da136d03fdecdc2ea521c50640ac6b86c
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date:   Sat Feb 4 22:11:38 2017 -0500

    Replaced GMimeRecipientType with GMimeAddressType and simplified code

 gmime/gmime-message.c |  302 ++++++++++++++++++++++++++-----------------------
 gmime/gmime-message.h |   40 ++++---
 tests/test-headers.c  |    2 +-
 tests/test-mbox.c     |    2 +-
 tests/test-pgpmime.c  |    4 +-
 tests/test-smime.c    |    4 +-
 6 files changed, 190 insertions(+), 164 deletions(-)
---
diff --git a/gmime/gmime-message.c b/gmime/gmime-message.c
index b61852e..178ccda 100644
--- a/gmime/gmime-message.c
+++ b/gmime/gmime-message.c
@@ -84,9 +84,10 @@ static ssize_t write_received (GMimeStream *stream, const char *name, const char
 static ssize_t write_subject (GMimeStream *stream, const char *name, const char *value);
 static ssize_t write_msgid (GMimeStream *stream, const char *name, const char *value);
 
-static void reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
+
 static void sender_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void from_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
+static void reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void to_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void cc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
 static void bcc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message);
@@ -94,17 +95,19 @@ static void bcc_list_changed (InternetAddressList *list, gpointer args, GMimeMes
 
 static GMimeObjectClass *parent_class = NULL;
 
-
 static struct {
        const char *name;
        GMimeEventCallback changed_cb;
-} recipient_types[] = {
-       { "To",  (GMimeEventCallback) to_list_changed  },
-       { "Cc",  (GMimeEventCallback) cc_list_changed  },
-       { "Bcc", (GMimeEventCallback) bcc_list_changed }
+} address_types[] = {
+       { "Sender",   (GMimeEventCallback) sender_changed   },
+       { "From",     (GMimeEventCallback) from_changed     },
+       { "Reply-To", (GMimeEventCallback) reply_to_changed },
+       { "To",       (GMimeEventCallback) to_list_changed  },
+       { "Cc",       (GMimeEventCallback) cc_list_changed  },
+       { "Bcc",      (GMimeEventCallback) bcc_list_changed }
 };
 
-#define N_RECIPIENT_TYPES G_N_ELEMENTS (recipient_types)
+#define N_ADDRESS_TYPES G_N_ELEMENTS (address_types)
 
 static char *rfc822_headers[] = {
        "Return-Path",
@@ -165,43 +168,43 @@ g_mime_message_class_init (GMimeMessageClass *klass)
 }
 
 static void
-connect_changed_event (GMimeMessage *message, GMimeRecipientType type)
+connect_changed_event (GMimeMessage *message, GMimeAddressType type)
 {
-       InternetAddressList *list;
+       InternetAddressList *addrlist;
        
-       list = message->recipients[type];
+       addrlist = message->addrlists[type];
        
-       g_mime_event_add (list->priv, recipient_types[type].changed_cb, message);
+       g_mime_event_add (addrlist->priv, address_types[type].changed_cb, message);
 }
 
 static void
-disconnect_changed_event (GMimeMessage *message, GMimeRecipientType type)
+disconnect_changed_event (GMimeMessage *message, GMimeAddressType type)
 {
-       InternetAddressList *list;
+       InternetAddressList *addrlist;
        
-       list = message->recipients[type];
+       addrlist = message->addrlists[type];
        
-       g_mime_event_remove (list->priv, recipient_types[type].changed_cb, message);
+       g_mime_event_remove (addrlist->priv, address_types[type].changed_cb, message);
 }
 
 static void
-block_changed_event (GMimeMessage *message, GMimeRecipientType type)
+block_changed_event (GMimeMessage *message, GMimeAddressType type)
 {
-       InternetAddressList *list;
+       InternetAddressList *addrlist;
        
-       list = message->recipients[type];
+       addrlist = message->addrlists[type];
        
-       g_mime_event_block (list->priv, recipient_types[type].changed_cb, message);
+       g_mime_event_block (addrlist->priv, address_types[type].changed_cb, message);
 }
 
 static void
-unblock_changed_event (GMimeMessage *message, GMimeRecipientType type)
+unblock_changed_event (GMimeMessage *message, GMimeAddressType type)
 {
-       InternetAddressList *list;
+       InternetAddressList *addrlist;
        
-       list = message->recipients[type];
+       addrlist = message->addrlists[type];
        
-       g_mime_event_unblock (list->priv, recipient_types[type].changed_cb, message);
+       g_mime_event_unblock (addrlist->priv, address_types[type].changed_cb, message);
 }
 
 static void
@@ -210,23 +213,16 @@ g_mime_message_init (GMimeMessage *message, GMimeMessageClass *klass)
        GMimeHeaderList *headers = ((GMimeObject *) message)->headers;
        guint i;
        
-       message->recipients = g_new (InternetAddressList *, N_RECIPIENT_TYPES);
-       message->reply_to = internet_address_list_new ();
-       message->sender = internet_address_list_new ();
-       message->from = internet_address_list_new ();
+       message->addrlists = g_new (InternetAddressList *, N_ADDRESS_TYPES);
        message->message_id = NULL;
        message->mime_part = NULL;
        message->subject = NULL;
        message->tz_offset = 0;
        message->date = 0;
        
-       g_mime_event_add (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
-       g_mime_event_add (message->sender->priv, (GMimeEventCallback) sender_changed, message);
-       g_mime_event_add (message->from->priv, (GMimeEventCallback) from_changed, message);
-       
        /* initialize recipient lists */
-       for (i = 0; i < N_RECIPIENT_TYPES; i++) {
-               message->recipients[i] = internet_address_list_new ();
+       for (i = 0; i < N_ADDRESS_TYPES; i++) {
+               message->addrlists[i] = internet_address_list_new ();
                connect_changed_event (message, i);
        }
        
@@ -256,21 +252,13 @@ g_mime_message_finalize (GObject *object)
        GMimeMessage *message = (GMimeMessage *) object;
        guint i;
        
-       g_mime_event_remove (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
-       g_mime_event_remove (message->sender->priv, (GMimeEventCallback) sender_changed, message);
-       g_mime_event_remove (message->from->priv, (GMimeEventCallback) from_changed, message);
-       
-       g_object_unref (message->reply_to);
-       g_object_unref (message->sender);
-       g_object_unref (message->from);
-       
        /* disconnect changed handlers */
-       for (i = 0; i < N_RECIPIENT_TYPES; i++) {
+       for (i = 0; i < N_ADDRESS_TYPES; i++) {
                disconnect_changed_event (message, i);
-               g_object_unref (message->recipients[i]);
+               g_object_unref (message->addrlists[i]);
        }
        
-       g_free (message->recipients);
+       g_free (message->addrlists);
        g_free (message->message_id);
        g_free (message->subject);
        
@@ -751,22 +739,22 @@ enum {
 };
 
 static void
-message_add_recipients_from_string (GMimeMessage *message, int action, GMimeRecipientType type, const char 
*str)
+message_add_addresses_from_string (GMimeMessage *message, int action, GMimeAddressType type, const char *str)
 {
-       InternetAddressList *recipients, *addrlist;
+       InternetAddressList *addrlist, *list;
        
-       recipients = g_mime_message_get_recipients (message, type);
+       addrlist = message->addrlists[type];
        
        if (action == SET)
-               internet_address_list_clear (recipients);
+               internet_address_list_clear (addrlist);
        
-       if ((addrlist = internet_address_list_parse_string (str))) {
+       if ((list = internet_address_list_parse_string (str))) {
                if (action == PREPEND)
-                       internet_address_list_prepend (recipients, addrlist);
+                       internet_address_list_prepend (addrlist, list);
                else
-                       internet_address_list_append (recipients, addrlist);
+                       internet_address_list_append (addrlist, list);
                
-               g_object_unref (addrlist);
+               g_object_unref (list);
        }
 }
 
@@ -786,46 +774,34 @@ process_header (GMimeObject *object, int action, const char *header, const char
        
        switch (i) {
        case HEADER_SENDER:
-               g_mime_event_block (message->sender->priv, (GMimeEventCallback) sender_changed, message);
-               internet_address_list_clear (message->sender);
-               if ((addrlist = internet_address_list_parse_string (value))) {
-                       internet_address_list_append (message->sender, addrlist);
-                       g_object_unref (addrlist);
-               }
-               g_mime_event_unblock (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_SENDER);
+               message_add_addresses_from_string (message, SET, GMIME_ADDRESS_TYPE_SENDER, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_SENDER);
                break;
        case HEADER_FROM:
-               g_mime_event_block (message->from->priv, (GMimeEventCallback) from_changed, message);
-               internet_address_list_clear (message->from);
-               if ((addrlist = internet_address_list_parse_string (value))) {
-                       internet_address_list_append (message->from, addrlist);
-                       g_object_unref (addrlist);
-               }
-               g_mime_event_unblock (message->from->priv, (GMimeEventCallback) from_changed, message);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_FROM);
+               message_add_addresses_from_string (message, SET, GMIME_ADDRESS_TYPE_FROM, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_FROM);
                break;
        case HEADER_REPLY_TO:
-               g_mime_event_block (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
-               internet_address_list_clear (message->reply_to);
-               if ((addrlist = internet_address_list_parse_string (value))) {
-                       internet_address_list_append (message->reply_to, addrlist);
-                       g_object_unref (addrlist);
-               }
-               g_mime_event_unblock (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, 
message);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_REPLY_TO);
+               message_add_addresses_from_string (message, SET, GMIME_ADDRESS_TYPE_REPLY_TO, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_REPLY_TO);
                break;
        case HEADER_TO:
-               block_changed_event (message, GMIME_RECIPIENT_TYPE_TO);
-               message_add_recipients_from_string (message, action, GMIME_RECIPIENT_TYPE_TO, value);
-               unblock_changed_event (message, GMIME_RECIPIENT_TYPE_TO);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_TO);
+               message_add_addresses_from_string (message, action, GMIME_ADDRESS_TYPE_TO, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_TO);
                break;
        case HEADER_CC:
-               block_changed_event (message, GMIME_RECIPIENT_TYPE_CC);
-               message_add_recipients_from_string (message, action, GMIME_RECIPIENT_TYPE_CC, value);
-               unblock_changed_event (message, GMIME_RECIPIENT_TYPE_CC);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_CC);
+               message_add_addresses_from_string (message, action, GMIME_ADDRESS_TYPE_CC, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_CC);
                break;
        case HEADER_BCC:
-               block_changed_event (message, GMIME_RECIPIENT_TYPE_BCC);
-               message_add_recipients_from_string (message, action, GMIME_RECIPIENT_TYPE_BCC, value);
-               unblock_changed_event (message, GMIME_RECIPIENT_TYPE_BCC);
+               block_changed_event (message, GMIME_ADDRESS_TYPE_BCC);
+               message_add_addresses_from_string (message, action, GMIME_ADDRESS_TYPE_BCC, value);
+               unblock_changed_event (message, GMIME_ADDRESS_TYPE_BCC);
                break;
        case HEADER_SUBJECT:
                g_free (message->subject);
@@ -925,12 +901,21 @@ message_get_header (GMimeObject *object, const char *header)
        return NULL;
 }
 
+static void
+remove_address_header (GMimeMessage *message, GMimeAddressType type)
+{
+       InternetAddressList *addrlist;
+       
+       block_changed_event (message, type);
+       addrlist = message->addrlists[type];
+       internet_address_list_clear (addrlist);
+       unblock_changed_event (message, type);
+}
+
 static gboolean
 message_remove_header (GMimeObject *object, const char *header)
 {
        GMimeMessage *message = (GMimeMessage *) object;
-       InternetAddressList *addrlist;
-       GMimeRecipientType type;
        guint i;
        
        /* Content-* headers don't belong on the message, they belong on the part. */
@@ -948,40 +933,22 @@ message_remove_header (GMimeObject *object, const char *header)
        
        switch (i) {
        case HEADER_SENDER:
-               g_mime_event_block (message->sender->priv, (GMimeEventCallback) sender_changed, message);
-               internet_address_list_clear (message->sender);
-               g_mime_event_unblock (message->sender->priv, (GMimeEventCallback) sender_changed, message);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_SENDER);
                break;
        case HEADER_FROM:
-               g_mime_event_block (message->from->priv, (GMimeEventCallback) from_changed, message);
-               internet_address_list_clear (message->from);
-               g_mime_event_unblock (message->from->priv, (GMimeEventCallback) from_changed, message);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_FROM);
                break;
        case HEADER_REPLY_TO:
-               g_mime_event_block (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, message);
-               internet_address_list_clear (message->reply_to);
-               g_mime_event_unblock (message->reply_to->priv, (GMimeEventCallback) reply_to_changed, 
message);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_REPLY_TO);
                break;
        case HEADER_TO:
-               type = GMIME_RECIPIENT_TYPE_TO;
-               block_changed_event (message, type);
-               addrlist = message->recipients[type];
-               internet_address_list_clear (addrlist);
-               unblock_changed_event (message, type);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_TO);
                break;
        case HEADER_CC:
-               type = GMIME_RECIPIENT_TYPE_CC;
-               block_changed_event (message, type);
-               addrlist = message->recipients[type];
-               internet_address_list_clear (addrlist);
-               unblock_changed_event (message, type);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_CC);
                break;
        case HEADER_BCC:
-               type = GMIME_RECIPIENT_TYPE_BCC;
-               block_changed_event (message, type);
-               addrlist = message->recipients[type];
-               internet_address_list_clear (addrlist);
-               unblock_changed_event (message, type);
+               remove_address_header (message, GMIME_ADDRESS_TYPE_BCC);
                break;
        case HEADER_SUBJECT:
                g_free (message->subject);
@@ -1171,7 +1138,7 @@ g_mime_message_get_sender (GMimeMessage *message)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       return message->sender;
+       return message->addrlists[GMIME_ADDRESS_TYPE_SENDER];
 }
 
 
@@ -1188,7 +1155,7 @@ g_mime_message_get_from (GMimeMessage *message)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       return message->from;
+       return message->addrlists[GMIME_ADDRESS_TYPE_FROM];
 }
 
 
@@ -1205,7 +1172,58 @@ g_mime_message_get_reply_to (GMimeMessage *message)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       return message->reply_to;
+       return message->addrlists[GMIME_ADDRESS_TYPE_REPLY_TO];
+}
+
+
+/**
+ * g_mime_message_get_to:
+ * @message: A #GMimeMessage
+ *
+ * Gets combined list of parsed addresses in the To header(s).
+ *
+ * Returns: the parsed list of addresses in the To header(s).
+ **/
+InternetAddressList *
+g_mime_message_get_to (GMimeMessage *message)
+{
+       g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
+       
+       return message->addrlists[GMIME_ADDRESS_TYPE_TO];
+}
+
+
+/**
+ * g_mime_message_get_cc:
+ * @message: A #GMimeMessage
+ *
+ * Gets combined list of parsed addresses in the Cc header(s).
+ *
+ * Returns: the parsed list of addresses in the Cc header(s).
+ **/
+InternetAddressList *
+g_mime_message_get_cc (GMimeMessage *message)
+{
+       g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
+       
+       return message->addrlists[GMIME_ADDRESS_TYPE_CC];
+}
+
+
+/**
+ * g_mime_message_get_bcc:
+ * @message: A #GMimeMessage
+ *
+ * Gets combined list of parsed addresses in the Bcc header(s).
+ *
+ * Returns: the parsed list of addresses in the Bcc header(s).
+ **/
+InternetAddressList *
+g_mime_message_get_bcc (GMimeMessage *message)
+{
+       g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
+       
+       return message->addrlists[GMIME_ADDRESS_TYPE_BCC];
 }
 
 
@@ -1221,96 +1239,96 @@ sync_internet_address_list (InternetAddressList *list, GMimeMessage *message, co
 }
 
 static void
-reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
+sync_address_header (GMimeMessage *message, GMimeAddressType type)
 {
-       sync_internet_address_list (list, message, "Reply-To");
+       InternetAddressList *list = message->addrlists[type];
+       const char *name = address_types[type].name;
+       
+       sync_internet_address_list (list, message, name);
 }
 
 static void
 sender_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       sync_internet_address_list (list, message, "Sender");
+       sync_address_header (message, GMIME_ADDRESS_TYPE_SENDER);
 }
 
 static void
 from_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       sync_internet_address_list (list, message, "From");
+       sync_address_header (message, GMIME_ADDRESS_TYPE_FROM);
 }
 
 static void
-sync_recipient_header (GMimeMessage *message, GMimeRecipientType type)
+reply_to_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       InternetAddressList *list = message->recipients[type];
-       const char *name = recipient_types[type].name;
-       
-       sync_internet_address_list (list, message, name);
+       sync_address_header (message, GMIME_ADDRESS_TYPE_REPLY_TO);
 }
 
 static void
 to_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       sync_recipient_header (message, GMIME_RECIPIENT_TYPE_TO);
+       sync_address_header (message, GMIME_ADDRESS_TYPE_TO);
 }
 
 static void
 cc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       sync_recipient_header (message, GMIME_RECIPIENT_TYPE_CC);
+       sync_address_header (message, GMIME_ADDRESS_TYPE_CC);
 }
 
 static void
 bcc_list_changed (InternetAddressList *list, gpointer args, GMimeMessage *message)
 {
-       sync_recipient_header (message, GMIME_RECIPIENT_TYPE_BCC);
+       sync_address_header (message, GMIME_ADDRESS_TYPE_BCC);
 }
 
 
 /**
- * g_mime_message_add_recipient:
+ * g_mime_message_add_mailbox:
  * @message: A #GMimeMessage
- * @type: A #GMimeRecipientType
- * @name: The recipient's name (or %NULL)
- * @addr: The recipient's address
+ * @type: A #GMimeAddressType
+ * @name: The name of the mailbox (or %NULL)
+ * @addr: The address of the mailbox
  *
- * Add a recipient of a chosen type to the MIME message.
+ * Add a mailbox of a chosen type to the MIME message.
  *
  * Note: The @name (and @addr) strings should be in UTF-8.
  **/
 void
-g_mime_message_add_recipient (GMimeMessage *message, GMimeRecipientType type, const char *name, const char 
*addr)
+g_mime_message_add_mailbox (GMimeMessage *message, GMimeAddressType type, const char *name, const char *addr)
 {
-       InternetAddressList *recipients;
+       InternetAddressList *addrlist;
        InternetAddress *ia;
        
        g_return_if_fail (GMIME_IS_MESSAGE (message));
-       g_return_if_fail (type < N_RECIPIENT_TYPES);
+       g_return_if_fail (type < N_ADDRESS_TYPES);
        g_return_if_fail (addr != NULL);
        
-       recipients = message->recipients[type];
+       addrlist = message->addrlists[type];
        ia = internet_address_mailbox_new (name, addr);
-       internet_address_list_add (recipients, ia);
+       internet_address_list_add (addrlist, ia);
        g_object_unref (ia);
 }
 
 
 /**
- * g_mime_message_get_recipients:
+ * g_mime_message_get_addresses:
  * @message: A #GMimeMessage
- * @type: A #GMimeRecipientType
+ * @type: A #GMimeAddressType
  *
- * Gets a list of recipients of the specified @type from the @message.
+ * Gets a list of addresses of the specified @type from the @message.
  *
- * Returns: (transfer none): a list of recipients of the specified
+ * Returns: (transfer none): a list of addresses of the specified
  * @type from the @message.
  **/
 InternetAddressList *
-g_mime_message_get_recipients (GMimeMessage *message, GMimeRecipientType type)
+g_mime_message_get_addresses (GMimeMessage *message, GMimeAddressType type)
 {
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
-       g_return_val_if_fail (type < N_RECIPIENT_TYPES, NULL);
+       g_return_val_if_fail (type < N_ADDRESS_TYPES, NULL);
        
-       return message->recipients[type];
+       return message->addrlists[type];
 }
 
 
@@ -1332,8 +1350,8 @@ g_mime_message_get_all_recipients (GMimeMessage *message)
        
        g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
        
-       for (i = 0; i < N_RECIPIENT_TYPES; i++) {
-               recipients = message->recipients[i];
+       for (i = GMIME_ADDRESS_TYPE_TO; i <= GMIME_ADDRESS_TYPE_BCC; i++) {
+               recipients = message->addrlists[i];
                
                if (internet_address_list_length (recipients) == 0)
                        continue;
diff --git a/gmime/gmime-message.h b/gmime/gmime-message.h
index 7923d58..4157124 100644
--- a/gmime/gmime-message.h
+++ b/gmime/gmime-message.h
@@ -45,25 +45,31 @@ typedef struct _GMimeMessageClass GMimeMessageClass;
 
 
 /**
- * GMimeRecipientType:
- * @GMIME_RECIPIENT_TYPE_TO: Represents the recipients in the To: header.
- * @GMIME_RECIPIENT_TYPE_CC: Represents the recipients in the Cc: header.
- * @GMIME_RECIPIENT_TYPE_BCC: Represents the recipients in the Bcc: header.
+ * GMimeAddressType:
+ * @GMIME_ADDRESS_TYPE_SENDER:
+ * @GMIME_ADDRESS_TYPE_FROM:
+ * @GMIME_ADDRESS_TYPE_REPLY_TO:
+ * @GMIME_ADDRESS_TYPE_TO: Represents the recipients in the To: header.
+ * @GMIME_ADDRESS_TYPE_CC: Represents the recipients in the Cc: header.
+ * @GMIME_ADDRESS_TYPE_BCC: Represents the recipients in the Bcc: header.
  *
- * A message recipient type.
+ * An address type.
  **/
-typedef enum _GMimeRecipientType {
-       GMIME_RECIPIENT_TYPE_TO,
-       GMIME_RECIPIENT_TYPE_CC,
-       GMIME_RECIPIENT_TYPE_BCC
-} GMimeRecipientType;
+typedef enum _GMimeAddressType {
+       GMIME_ADDRESS_TYPE_SENDER,
+       GMIME_ADDRESS_TYPE_FROM,
+       GMIME_ADDRESS_TYPE_REPLY_TO,
+       GMIME_ADDRESS_TYPE_TO,
+       GMIME_ADDRESS_TYPE_CC,
+       GMIME_ADDRESS_TYPE_BCC
+} GMimeAddressType;
 
 
 /**
  * GMimeMessage:
  * @parent_object: parent #GMimeObject
  * @mime_part: toplevel MIME part
- * @recipients: hash table of recipients using recipient header name as the hash key
+ * @addrlists: a table of address lists
  * @message_id: Message-Id string
  * @reply_to: Reply-To string
  * @subject: Subject string
@@ -76,10 +82,7 @@ typedef enum _GMimeRecipientType {
 struct _GMimeMessage {
        GMimeObject parent_object;
        
-       InternetAddressList **recipients;
-       InternetAddressList *reply_to;
-       InternetAddressList *sender;
-       InternetAddressList *from;
+       InternetAddressList **addrlists;
        GMimeObject *mime_part;
        char *message_id;
        char *subject;
@@ -101,7 +104,12 @@ GMimeMessage *g_mime_message_new (gboolean pretty_headers);
 InternetAddressList *g_mime_message_get_from (GMimeMessage *message);
 InternetAddressList *g_mime_message_get_sender (GMimeMessage *message);
 InternetAddressList *g_mime_message_get_reply_to (GMimeMessage *message);
-InternetAddressList *g_mime_message_get_recipients (GMimeMessage *message, GMimeRecipientType type);
+InternetAddressList *g_mime_message_get_to (GMimeMessage *message);
+InternetAddressList *g_mime_message_get_cc (GMimeMessage *message);
+InternetAddressList *g_mime_message_get_bcc (GMimeMessage *message);
+
+void g_mime_message_add_mailbox (GMimeMessage *message, GMimeAddressType type, const char *name, const char 
*addr);
+InternetAddressList *g_mime_message_get_addresses (GMimeMessage *message, GMimeAddressType type);
 InternetAddressList *g_mime_message_get_all_recipients (GMimeMessage *message);
 
 void g_mime_message_set_subject (GMimeMessage *message, const char *subject);
diff --git a/tests/test-headers.c b/tests/test-headers.c
index 4736359..513f64e 100644
--- a/tests/test-headers.c
+++ b/tests/test-headers.c
@@ -259,7 +259,7 @@ test_header_sync (void)
        g_object_unref (part);
        
        message = g_mime_message_new (TRUE);
-       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
        object = (GMimeObject *) message;
        
        testsuite_check ("address header synchronization");
diff --git a/tests/test-mbox.c b/tests/test-mbox.c
index 628ec7c..04a7df6 100644
--- a/tests/test-mbox.c
+++ b/tests/test-mbox.c
@@ -123,7 +123,7 @@ test_parser (GMimeParser *parser, GMimeStream *mbox, GMimeStream *summary)
                        g_free (buf);
                }
                
-               if ((list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO)) != NULL &&
+               if ((list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO)) != NULL &&
                    internet_address_list_length (list) > 0) {
                        buf = internet_address_list_to_string (list, FALSE);
                        g_mime_stream_printf (summary, "To: %s\n", buf);
diff --git a/tests/test-pgpmime.c b/tests/test-pgpmime.c
index 189b391..fdf65bb 100644
--- a/tests/test-pgpmime.c
+++ b/tests/test-pgpmime.c
@@ -228,7 +228,7 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        g_object_unref (mailbox);
        
        mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
-       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
        internet_address_list_add (list, mailbox);
        g_object_unref (mailbox);
        
@@ -338,7 +338,7 @@ create_encrypted_message (GMimeCryptoContext *ctx, gboolean sign,
        g_object_unref (mailbox);
        
        mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
-       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
        internet_address_list_add (list, mailbox);
        g_object_unref (mailbox);
        
diff --git a/tests/test-smime.c b/tests/test-smime.c
index 10d48ed..07a1c34 100644
--- a/tests/test-smime.c
+++ b/tests/test-smime.c
@@ -229,7 +229,7 @@ test_multipart_signed (GMimeCryptoContext *ctx)
        g_object_unref (mailbox);
        
        mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
-       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
        internet_address_list_add (list, mailbox);
        g_object_unref (mailbox);
        
@@ -342,7 +342,7 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
        g_object_unref (mailbox);
        
        mailbox = internet_address_mailbox_new ("Federico Mena-Quintero", "federico helixcode com");
-       list = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
+       list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
        internet_address_list_add (list, mailbox);
        g_object_unref (mailbox);
        


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