[evolution/wip/webkit2] WebKitEditor - Fix handling of the inline images



commit db2f9567353eff806182b8730a67f422ca619212
Author: Tomas Popela <tpopela redhat com>
Date:   Thu Jul 7 15:42:00 2016 +0200

    WebKitEditor - Fix handling of the inline images

 modules/webkit-editor/e-webkit-editor.c            |   20 +++++++------
 .../web-extension/e-editor-dom-functions.c         |   30 +++++++++++--------
 .../web-extension/e-editor-dom-functions.h         |    4 +-
 .../web-extension/e-editor-web-extension.c         |    4 +--
 4 files changed, 31 insertions(+), 27 deletions(-)
---
diff --git a/modules/webkit-editor/e-webkit-editor.c b/modules/webkit-editor/e-webkit-editor.c
index 8b39a81..8058cef 100644
--- a/modules/webkit-editor/e-webkit-editor.c
+++ b/modules/webkit-editor/e-webkit-editor.c
@@ -1523,17 +1523,19 @@ webkit_editor_get_parts_for_inline_images (GVariant *images)
        GVariantIter *iter;
        GSList *parts = NULL;
 
-       g_variant_get (images, "asss", &iter);
-       while (g_variant_iter_loop (iter, "&s&s&s", &element_src, &name, &id)) {
-               CamelMimePart *part;
-
-               part = create_part_for_inline_image_from_element_data (
-                       element_src, name, id);
-               parts = g_slist_prepend (parts, part);
+       if (g_variant_check_format_string (images, "a(sss)", FALSE)) {
+               g_variant_get (images, "a(sss)", &iter);
+               while (g_variant_iter_loop (iter, "(&s&s&s)", &element_src, &name, &id)) {
+                       CamelMimePart *part;
+
+                       part = create_part_for_inline_image_from_element_data (
+                               element_src, name, id);
+                       parts = g_slist_prepend (parts, part);
+               }
+               g_variant_iter_free (iter);
        }
-       g_variant_iter_free (iter);
 
-       return g_slist_reverse (parts);
+       return parts ? g_slist_reverse (parts) : NULL;
 }
 
 static gchar *
diff --git a/modules/webkit-editor/web-extension/e-editor-dom-functions.c 
b/modules/webkit-editor/web-extension/e-editor-dom-functions.c
index bd31d75..c4f346f 100644
--- a/modules/webkit-editor/web-extension/e-editor-dom-functions.c
+++ b/modules/webkit-editor/web-extension/e-editor-dom-functions.c
@@ -8266,9 +8266,11 @@ e_editor_dom_restore_images (EEditorPage *editor_page,
 
        document = e_editor_page_get_document (editor_page);
 
-       g_variant_get (inline_images_to_restore, "asss", &iter);
-       while (g_variant_iter_loop (iter, "&s&s&s", &element_src, &name, &id))
+       g_variant_get (inline_images_to_restore, "a(sss)", &iter);
+       while (g_variant_iter_loop (iter, "(&s&s&s)", &element_src, &name, &id))
                restore_image (document, id, element_src);
+
+       g_variant_iter_free (iter);
 }
 
 gchar *
@@ -8640,7 +8642,7 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
 {
        WebKitDOMDocument *document;
        WebKitDOMNodeList *list;
-       GVariant *result;
+       GVariant *result = NULL;
        GVariantBuilder *builder = NULL;
        GHashTable *added = NULL;
        gint length, ii;
@@ -8656,7 +8658,7 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
                goto background;
        }
 
-       builder = g_variant_builder_new (G_VARIANT_TYPE ("asss"));
+       builder = g_variant_builder_new (G_VARIANT_TYPE ("a(sss)"));
 
        added = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
        for (ii = 0; ii < length; ii++) {
@@ -8681,11 +8683,10 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
 
                                new_id = camel_header_msgid_generate (uid_domain);
                                g_variant_builder_add (
-                                       builder, "sss", src, data_name, new_id);
+                                       builder, "(sss)", src, data_name, new_id);
                                cid = g_strdup_printf ("cid:%s", new_id);
 
                                g_hash_table_insert (added, src, new_id);
-                               g_free (new_id);
                        }
                        g_free (data_name);
                }
@@ -8703,7 +8704,9 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
        if (length == 0)
                goto out;
        if (!builder)
-               builder = g_variant_builder_new (G_VARIANT_TYPE ("asss"));
+               builder = g_variant_builder_new (G_VARIANT_TYPE ("a(sss)"));
+       if (!added)
+               added = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
 
        for (ii = 0; ii < length; ii++) {
                const gchar *id;
@@ -8729,11 +8732,10 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
 
                                new_id = camel_header_msgid_generate (uid_domain);
                                g_variant_builder_add (
-                                       builder, "sss", src, data_name, new_id);
+                                       builder, "(sss)", src, data_name, new_id);
                                cid = g_strdup_printf ("cid:%s", new_id);
 
                                g_hash_table_insert (added, src, new_id);
-                               g_free (new_id);
 
                                webkit_dom_element_set_attribute (
                                        WEBKIT_DOM_ELEMENT (node), "background", cid, NULL);
@@ -8748,8 +8750,10 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
        if (added)
                g_hash_table_destroy (added);
 
-       result = g_variant_new ("asss", builder);
-       g_variant_builder_unref (builder);
+       if (builder) {
+               result = g_variant_new ("a(sss)", builder);
+               g_variant_builder_unref (builder);
+       }
 
        return result;
 }
@@ -10915,9 +10919,9 @@ e_editor_dom_move_caret_into_element (EEditorPage *editor_page,
 
 void
 e_editor_dom_insert_base64_image (EEditorPage *editor_page,
+                                 const gchar *base64_content,
                                  const gchar *filename,
-                                 const gchar *uri,
-                                 const gchar *base64_content)
+                                 const gchar *uri)
 {
        WebKitDOMDocument *document;
        WebKitDOMElement *element, *selection_start_marker, *resizable_wrapper;
diff --git a/modules/webkit-editor/web-extension/e-editor-dom-functions.h 
b/modules/webkit-editor/web-extension/e-editor-dom-functions.h
index c65cbef..51ed1d7 100644
--- a/modules/webkit-editor/web-extension/e-editor-dom-functions.h
+++ b/modules/webkit-editor/web-extension/e-editor-dom-functions.h
@@ -230,9 +230,9 @@ void                e_editor_dom_move_caret_into_element
                                                 gboolean to_start);
 void           e_editor_dom_insert_base64_image
                                                (EEditorPage *editor_page,
+                                                const gchar *base64_content,
                                                 const gchar *filename,
-                                                const gchar *uri,
-                                                const gchar *base64_content);
+                                                const gchar *uri);
 void           e_editor_dom_insert_image       (EEditorPage *editor_page,
                                                 const gchar *uri);
 void           e_editor_dom_replace_image_src  (EEditorPage *editor_page,
diff --git a/modules/webkit-editor/web-extension/e-editor-web-extension.c 
b/modules/webkit-editor/web-extension/e-editor-web-extension.c
index fa72c7e..57a8596 100644
--- a/modules/webkit-editor/web-extension/e-editor-web-extension.c
+++ b/modules/webkit-editor/web-extension/e-editor-web-extension.c
@@ -1834,10 +1834,8 @@ handle_method_call (GDBusConnection *connection,
 
                g_free (value);
 
-               if ((flags & E_CONTENT_EDITOR_GET_INLINE_IMAGES) && from_domain && *from_domain && 
inline_images) {
+               if ((flags & E_CONTENT_EDITOR_GET_INLINE_IMAGES) && from_domain && *from_domain && 
inline_images)
                        e_editor_dom_restore_images (editor_page, inline_images);
-                       g_object_unref (inline_images);
-               }
        } else if (g_strcmp0 (method_name, "DOMInsertHTML") == 0) {
                const gchar *html;
 


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