[evolution-ews] Allow e_ews_connection_get_oal_detail() to return more than one type of element



commit 4e38249ec357be4335c5547c1ab613c5d07b8e37
Author: David Woodhouse <David Woodhouse intel com>
Date:   Thu May 16 22:34:17 2013 +0100

    Allow e_ews_connection_get_oal_detail() to return more than one type of element

 src/addressbook/e-book-backend-ews.c |    7 +-----
 src/server/e-ews-connection.c        |   36 ++++++++++++++++++++-------------
 src/server/e-ews-connection.h        |    1 +
 3 files changed, 24 insertions(+), 20 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-ews.c b/src/addressbook/e-book-backend-ews.c
index 471c557..afe9d0c 100644
--- a/src/addressbook/e-book-backend-ews.c
+++ b/src/addressbook/e-book-backend-ews.c
@@ -2452,12 +2452,7 @@ exit:
                g_free (uncompressed_filename);
        }
 
-       if (full_l) {
-               g_free (full->sha);
-               g_free (full->filename);
-               g_free (full);
-               g_slist_free (full_l);
-       }
+       g_slist_free_full (full_l, (GDestroyNotify)ews_oal_details_free);
 
        g_object_unref (oab_cnc);
        return ret;
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index c53ae11..d3471e9 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -1601,6 +1601,7 @@ void
 ews_oal_details_free (EwsOALDetails *details)
 {
        if (details != NULL) {
+               g_free (details->type);
                g_free (details->sha);
                g_free (details->filename);
                g_free (details);
@@ -2592,20 +2593,27 @@ parse_oal_full_details (xmlNode *node,
        GSList *elements = NULL;
 
        for (node = node->children; node; node = node->next) {
-               if (node->type == XML_ELEMENT_NODE && !strcmp ((gchar *) node->name, element)) {
-                       EwsOALDetails *det = g_new0 (EwsOALDetails, 1);
-
-                       det->seq = get_property_as_uint32 (node, "seq");
-                       det->ver = get_property_as_uint32 (node, "ver");
-                       det->size = get_property_as_uint32 (node, "size");
-                       det->uncompressed_size = get_property_as_uint32 (node, "uncompressedsize");
-                       det->sha = get_property (node, "uncompressedsize");
-                       det->filename = g_strstrip (get_content (node));
-
-                       elements = g_slist_prepend (elements, det);
-                       if (!strcmp (element, "Full"))
-                               break;
-               }
+               EwsOALDetails *det;
+               if (node->type != XML_ELEMENT_NODE)
+                       continue;
+               if (element && strcmp ((gchar *) node->name, element))
+                       continue;
+               if (!element && strcmp ((gchar *) node->name, "Full") &&
+                   strcmp((gchar *) node->name, "Diff"))
+                       continue;
+
+               det = g_new0 (EwsOALDetails, 1);
+               det->type = g_strdup((gchar *) node->name);
+               det->seq = get_property_as_uint32 (node, "seq");
+               det->ver = get_property_as_uint32 (node, "ver");
+               det->size = get_property_as_uint32 (node, "size");
+               det->uncompressed_size = get_property_as_uint32 (node, "uncompressedsize");
+               det->sha = get_property (node, "uncompressedsize");
+               det->filename = g_strstrip (get_content (node));
+
+               elements = g_slist_prepend (elements, det);
+               if (element && !strcmp (element, "Full"))
+                       break;
        }
 
        return elements;
diff --git a/src/server/e-ews-connection.h b/src/server/e-ews-connection.h
index 55f4e87..2e13dc7 100644
--- a/src/server/e-ews-connection.h
+++ b/src/server/e-ews-connection.h
@@ -129,6 +129,7 @@ typedef struct {
 } EwsOAL;
 
 typedef struct {
+       gchar *type;
        guint32 seq;
        guint32 ver;
        guint32 size;


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