[balsa] rfc 2445: Set a struct as GObject-data



commit c093702395a1ca06e3438c7653a0049ac1e8dc35
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Tue Aug 13 15:33:11 2019 -0400

    rfc 2445: Set a struct as GObject-data
    
    Set a struct as GObject-data instead of setting three separate items.
    
    * libbalsa/rfc2445.c (libbalsa_vcal_attendee_to_str),
      (libbalsa_vcal_attendee_rsvp), (cal_address_2445_to_lbaddress):

 ChangeLog          |  8 ++++++++
 libbalsa/rfc2445.c | 56 +++++++++++++++++++++++++++---------------------------
 2 files changed, 36 insertions(+), 28 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 4a2a9da43..88a0bf950 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-08-13  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       rfc 2445: Set a struct as GObject-data instead of three separate
+       items.
+
+       * libbalsa/rfc2445.c (libbalsa_vcal_attendee_to_str),
+       (libbalsa_vcal_attendee_rsvp), (cal_address_2445_to_lbaddress):
+
 2019-08-12  Peter Bloomfield  <pbloomfield bellsouth net>
 
        mailbox-imap: Store cache-manager in the object instead of
diff --git a/libbalsa/rfc2445.c b/libbalsa/rfc2445.c
index 5f4f7f19a..46dee8855 100644
--- a/libbalsa/rfc2445.c
+++ b/libbalsa/rfc2445.c
@@ -75,9 +75,12 @@ G_DEFINE_TYPE(LibBalsaVEvent, libbalsa_vevent, G_TYPE_OBJECT)
 
 
 /* LibBalsaAddress extra object data */
-#define RFC2445_ROLE            "RFC2445:Role"
-#define RFC2445_PARTSTAT        "RFC2445:PartStat"
-#define RFC2445_RSVP            "RFC2445:RSVP"
+typedef struct {
+    LibBalsaVCalRole role;
+    LibBalsaVCalPartStat part_stat;
+    gboolean rsvp;
+} LibBalsaVCalInfo;
+#define RFC2445_INFO            "RFC2445:Info"
 
 
 static void libbalsa_vcal_finalize(GObject *self);
@@ -100,11 +103,6 @@ static LibBalsaVCalRole vcal_str_to_role(const gchar * role);
 static LibBalsaVCalPartStat vcal_str_to_part_stat(const gchar * pstat);
 
 
-#define LB_ROLE2PTR(r)      GINT_TO_POINTER((gint) (r))
-#define LB_PSTAT2PTR(r)     GINT_TO_POINTER((gint) (r))
-#define LB_PTR2ROLE(p)      ((LibBalsaVCalRole) GPOINTER_TO_INT(p))
-#define LB_PTR2PSTAT(p)     ((LibBalsaVCalPartStat) GPOINTER_TO_INT(p))
-
 static struct {
     gchar *str_2445;
     gchar *hr_text;
@@ -392,27 +390,23 @@ libbalsa_vcal_attendee_to_str(LibBalsaAddress * person)
 {
     GString *retval;
     gchar *str;
-    LibBalsaVCalRole role;
-    LibBalsaVCalPartStat pstat;
+    LibBalsaVCalInfo *info;
 
     g_return_val_if_fail(LIBBALSA_IS_ADDRESS(person), NULL);
 
     retval = g_string_new("");
 
-    role = LB_PTR2ROLE(g_object_get_data(G_OBJECT(person),
-                                         RFC2445_ROLE));
-    if (role != VCAL_ROLE_UNKNOWN)
-       g_string_printf(retval, "%s ", vcal_role_to_str(role));
+    info = g_object_get_data(G_OBJECT(person), RFC2445_INFO);
+    if (info->role != VCAL_ROLE_UNKNOWN)
+       g_string_printf(retval, "%s ", vcal_role_to_str(info->role));
 
     str = libbalsa_address_to_gchar(person, -1);
     retval = g_string_append(retval, str);
     g_free(str);
 
-    pstat = LB_PTR2PSTAT(g_object_get_data(G_OBJECT(person),
-                                           RFC2445_PARTSTAT));
-    if (pstat != VCAL_PSTAT_UNKNOWN)
+    if (info->part_stat != VCAL_PSTAT_UNKNOWN)
        g_string_append_printf(retval, " (%s)",
-                              libbalsa_vcal_part_stat_to_str(pstat));
+                              libbalsa_vcal_part_stat_to_str(info->part_stat));
 
     return g_string_free(retval, FALSE);
 }
@@ -423,9 +417,13 @@ libbalsa_vcal_attendee_to_str(LibBalsaAddress * person)
 gboolean
 libbalsa_vcal_attendee_rsvp(LibBalsaAddress * person)
 {
+    LibBalsaVCalInfo *info;
+
     g_return_val_if_fail(LIBBALSA_IS_ADDRESS(person), FALSE);
-    return (gboolean) 
-       GPOINTER_TO_INT(g_object_get_data(G_OBJECT(person), RFC2445_RSVP));
+
+    info = g_object_get_data(G_OBJECT(person), RFC2445_INFO);
+
+    return info->rsvp;
 }
 
 
@@ -721,6 +719,7 @@ cal_address_2445_to_lbaddress(const gchar * uri, gchar ** attributes,
                              gboolean is_organizer)
 {
     LibBalsaAddress *retval;
+    LibBalsaVCalInfo *info;
 
     /* must be a mailto: uri */
     if (g_ascii_strncasecmp("mailto:";, uri, 7))
@@ -728,9 +727,12 @@ cal_address_2445_to_lbaddress(const gchar * uri, gchar ** attributes,
 
     retval = libbalsa_address_new();
     libbalsa_address_append_addr(retval, uri + 7);
+
+    info = g_new0(LibBalsaVCalInfo, 1);
+    g_object_set_data_full(G_OBJECT(retval), RFC2445_INFO, info, g_free);
+
     if (!is_organizer)
-       g_object_set_data(G_OBJECT(retval), RFC2445_ROLE,
-                         LB_ROLE2PTR(VCAL_ROLE_REQ_PART));
+        info->role = VCAL_ROLE_REQ_PART;
 
     if (attributes) {
        int n;
@@ -741,16 +743,14 @@ cal_address_2445_to_lbaddress(const gchar * uri, gchar ** attributes,
            if (!g_ascii_strncasecmp(the_attr, "CN=", 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)));
+               info->role = vcal_str_to_role(the_attr + 5);
            else if (!g_ascii_strncasecmp(the_attr, "PARTSTAT=", 9))
-               g_object_set_data(G_OBJECT(retval), RFC2445_PARTSTAT,
-                                 LB_PSTAT2PTR(vcal_str_to_part_stat(the_attr + 9)));
+               info->part_stat = vcal_str_to_part_stat(the_attr + 9);
            else if (!g_ascii_strncasecmp(the_attr, "RSVP=", 5))
-               g_object_set_data(G_OBJECT(retval), RFC2445_RSVP,
-                                 GINT_TO_POINTER(! g_ascii_strcasecmp(the_attr + 5, "TRUE")));
+               info->rsvp = g_ascii_strcasecmp(the_attr + 5, "TRUE") == 0;
        }
     }
+
     return retval;
 }
 


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