[Xfce4-commits] <midori:master> Reuse source of webview instead of redownloading on view source

Christian Dywan noreply at xfce.org
Thu Jun 2 00:52:01 CEST 2011


Updating branch refs/heads/master
         to 3db6445e54ab874163596530beecc5ba859a7f8b (commit)
       from 66475da5a99d918c6b0066ca0a2055ac38de44f5 (commit)

commit 3db6445e54ab874163596530beecc5ba859a7f8b
Author: Alexander Butenko <a.butenka at gmail.com>
Date:   Sat May 28 11:40:20 2011 -0400

    Reuse source of webview instead of redownloading on view source

 midori/midori-browser.c |   98 +++++++++++++++++++++++++++++++---------------
 1 files changed, 66 insertions(+), 32 deletions(-)

diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 1bf2a7e..4d919cf 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -3342,58 +3342,76 @@ midori_browser_get_uri_extension (const gchar* uri)
     return g_strdup (period);
 }
 
-static void
-midori_browser_source_transfer_cb (KatzeNetRequest* request,
-                                   MidoriBrowser*   browser)
+static gchar*
+midori_browser_save_source (const gchar* uri,
+                            const gchar* data,
+                            const size_t len)
 {
     gchar* filename;
     gchar* extension;
     gchar* unique_filename;
-    gchar* text_editor;
     gint fd;
     FILE* fp;
     size_t ret;
 
-    if (request->data)
+    if (!data)
+        return NULL;
+
+    extension = midori_browser_get_uri_extension (uri);
+    filename = g_strdup_printf ("%uXXXXXX%s",
+                                    g_str_hash (uri), extension);
+    g_free (extension);
+    if (((fd = g_file_open_tmp (filename, &unique_filename, NULL)) != -1))
     {
-        extension = midori_browser_get_uri_extension (request->uri);
-        filename = g_strdup_printf ("%uXXXXXX%s",
-                                    g_str_hash (request->uri), extension);
-        g_free (extension);
-        if (((fd = g_file_open_tmp (filename, &unique_filename, NULL)) != -1))
+        if ((fp = fdopen (fd, "w")))
         {
-            if ((fp = fdopen (fd, "w")))
+            ret = fwrite (data, 1, len, fp);
+            fclose (fp);
+            if ((ret - len) != 0)
             {
-                ret = fwrite (request->data, 1, request->length, fp);
-                fclose (fp);
-                if ((ret - request->length) != 0)
-                {
-                    g_warning ("Error writing to file %s "
-                               "in midori_browser_source_transfer_cb()", filename);
-                }
-                g_object_get (browser->settings,
-                    "text-editor", &text_editor, NULL);
-                if (text_editor && *text_editor)
-                    sokoke_spawn_program (text_editor, unique_filename);
-                else
-                    sokoke_show_uri (NULL, unique_filename,
-                                     gtk_get_current_event_time (), NULL);
-
+                g_warning ("Error writing to file %s "
+                           "in midori_browser_source_transfer_cb()", unique_filename);
                 g_free (unique_filename);
-                g_free (text_editor);
             }
-            close (fd);
         }
-        g_free (filename);
+        close (fd);
+    }
+    g_free (filename);
+    return unique_filename;
+}
+
+#if !WEBKIT_CHECK_VERSION (1, 1, 14)
+static void
+midori_browser_source_transfer_cb (KatzeNetRequest* request,
+                                   MidoriBrowser*   browser)
+{
+    gchar* text_editor;
+    gchar* filename;
+
+    filename = midori_browser_save_source (request->uri, request->data, request->length);
+    if (filename)
+    {
+        g_object_get (browser->settings,
+                      "text-editor", &text_editor, NULL);
+        if (text_editor && *text_editor)
+            sokoke_spawn_program (text_editor, filename);
+        else
+            sokoke_show_uri (NULL, filename,
+                             gtk_get_current_event_time (), NULL);
+        g_free (text_editor);
     }
+    g_free (filename);
 }
+#endif
 
 static void
 _action_source_view_activate (GtkAction*     action,
                               MidoriBrowser* browser)
 {
     GtkWidget* view;
+    GtkWidget* web_view;
     gchar* text_editor;
+    gchar* filename = NULL;
     const gchar* uri;
 
     if (!(view = midori_browser_get_current_tab (browser)))
@@ -3436,15 +3454,31 @@ _action_source_view_activate (GtkAction*     action,
     }
 
     if (g_str_has_prefix (uri, "file://"))
+        filename = g_filename_from_uri (uri, NULL, NULL);
+
+    #if WEBKIT_CHECK_VERSION (1, 1, 14)
+    else
+    {
+        WebKitWebDataSource *data_source;
+        WebKitWebFrame *frame;
+        const GString *data;
+
+        web_view = midori_view_get_web_view (MIDORI_VIEW (view));
+        frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
+        data_source = webkit_web_frame_get_data_source (frame);
+        data = webkit_web_data_source_get_data (data_source);
+        filename = midori_browser_save_source (uri, data->str, data->len);
+    }
+
+    if (filename)
     {
-        gchar* filename = g_filename_from_uri (uri, NULL, NULL);
         sokoke_spawn_program (text_editor, filename);
         g_free (filename);
-        g_free (text_editor);
-        return;
     }
+    #else
     katze_net_load_uri (NULL, uri, NULL,
         (KatzeNetTransferCb)midori_browser_source_transfer_cb, browser);
+    #endif
     g_free (text_editor);
 }
 



More information about the Xfce4-commits mailing list