]> spindle.queued.net Git - midori/commitdiff
Implement new libsoup cache for >= WebKitGTK+ 1.3.11
authorChristian Dywan <christian@twotoasts.de>
Sun, 1 May 2011 04:59:00 +0000 (06:59 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 1 May 2011 04:59:00 +0000 (06:59 +0200)
The web cache extension is automatically hidden/ disabled if
WebKitGTK+ is new enough, the new cache is a core feature.

By default 100 MB of pages can be cached on disk.

The 'Applications' preference tab is resurrected.

The same folder ~/.cache/midori/web is used for old and new cache.

extensions/web-cache.c
midori/main.c
midori/midori-preferences.c
midori/midori-view.c
midori/midori-websettings.c

index 53ff88954f9f72c2ebfbc3869efadec7ed7aaf6a..1f8753cc41c3911cff3ea1f3f14207e3c4dcf9ad 100644 (file)
@@ -21,6 +21,8 @@
     #include <unistd.h>
 #endif
 
+#if !WEBKIT_CHECK_VERSION (1, 3, 11)
+
 #define MAXLENGTH 1024 * 1024
 
 static gchar*
@@ -464,10 +466,14 @@ web_cache_clear_cache_cb (void)
 {
     sokoke_remove_path (web_cache_get_cache_dir (), TRUE);
 }
+#endif
 
 MidoriExtension*
 extension_init (void)
 {
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    return NULL;
+    #else
     MidoriExtension* extension = g_object_new (MIDORI_TYPE_EXTENSION,
         "name", _("Web Cache"),
         "description", _("Cache HTTP communication on disk"),
@@ -482,4 +488,5 @@ extension_init (void)
         G_CALLBACK (web_cache_clear_cache_cb));
 
     return extension;
+    #endif
 }
index c486587498496879b35a6348835509a72de7ba2d..db06f3f61a9b69dbc54d76bede6d0c2d19be92c1 100644 (file)
 #include <webkit/webkit.h>
 #include <sqlite3.h>
 
+#if WEBKIT_CHECK_VERSION (1, 3, 11)
+    #define LIBSOUP_USE_UNSTABLE_REQUEST_API
+    #include <libsoup/soup-cache.h>
+#endif
+
 #if ENABLE_NLS
     #include <libintl.h>
     #include <locale.h>
@@ -1236,6 +1241,17 @@ midori_load_soup_session_full (gpointer settings)
     soup_session_add_feature (session, feature);
     g_object_unref (feature);
 
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    config_file = g_build_filename (g_get_user_cache_dir (),
+                                    PACKAGE_NAME, "web", NULL);
+    feature = SOUP_SESSION_FEATURE (soup_cache_new (config_file, 0));
+    g_free (config_file);
+    soup_session_add_feature (session, feature);
+    soup_cache_set_max_size (SOUP_CACHE (feature),
+        katze_object_get_int (settings, "maximum-cache-size") * 1024 * 1024);
+    soup_cache_load (SOUP_CACHE (feature));
+    #endif
+
     return FALSE;
 }
 
@@ -1315,6 +1331,10 @@ midori_load_extensions (gpointer data)
 
                 if (!extension)
                 {
+                    /* No extension, no error: not available, not shown */
+                    if (g_module_error () == NULL)
+                        continue;
+
                     extension = g_object_new (MIDORI_TYPE_EXTENSION,
                                               "name", filename,
                                               "description", g_module_error (),
@@ -1887,6 +1907,21 @@ midori_clear_html5_databases_cb (void)
     webkit_remove_all_web_databases ();
 }
 #endif
+
+#if WEBKIT_CHECK_VERSION (1, 3, 11)
+static void
+midori_clear_web_cache_cb (void)
+{
+    SoupSession* session = webkit_get_default_session ();
+    SoupSessionFeature* feature = soup_session_get_feature (session, SOUP_TYPE_CACHE);
+    gchar* path = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, "web", NULL);
+    soup_cache_clear (SOUP_CACHE (feature));
+    soup_cache_flush (SOUP_CACHE (feature));
+    sokoke_remove_path (path, TRUE);
+    g_free (path);
+}
+#endif
+
 #if WEBKIT_CHECK_VERSION (1, 3, 13)
 static void
 midori_clear_offline_appcache_cb (void)
@@ -2155,6 +2190,10 @@ main (int    argc,
     sokoke_register_privacy_item ("html5-databases", _("HTML5 _Databases"),
         G_CALLBACK (midori_clear_html5_databases_cb));
     #endif
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    sokoke_register_privacy_item ("web-cache", _("Web Cache"),
+        G_CALLBACK (midori_clear_web_cache_cb));
+    #endif
     #if WEBKIT_CHECK_VERSION (1, 3, 13)
     sokoke_register_privacy_item ("offline-appcache", _("Offline Application Cache"),
         G_CALLBACK (midori_clear_offline_appcache_cb));
index c62a75bf05d6371e33fb6bbb3b1a38090954ffc4..e51b2d3b7a9be050b16de14d219a80648bb93ca6 100644 (file)
@@ -435,11 +435,19 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
     INDENTED_ADD (button);
     button = katze_property_proxy (settings, "open-tabs-in-the-background", NULL);
     SPANNED_ADD (button);
+
+    /* Page "Applications" */
     #if !HAVE_HILDON
+    PAGE_NEW (GTK_STOCK_CONVERT, _("Applications"));
+    FRAME_NEW (_("External applications"));
     label = katze_property_label (settings, "text-editor");
     INDENTED_ADD (label);
     entry = katze_property_proxy (settings, "text-editor", "application-text/plain");
     SPANNED_ADD (entry);
+    label = katze_property_label (settings, "news-aggregator");
+    INDENTED_ADD (label);
+    entry = katze_property_proxy (settings, "news-aggregator", "application-News");
+    SPANNED_ADD (entry);
     #endif
 
     /* Page "Network" */
@@ -458,14 +466,16 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
         G_CALLBACK (midori_preferences_notify_proxy_type_cb), entry);
     midori_preferences_notify_proxy_type_cb (settings, NULL, entry);
     #endif
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    label = katze_property_label (settings, "maximum-cache-size");
+    INDENTED_ADD (label);
+    button = katze_property_proxy (settings, "maximum-cache-size", NULL);
+    SPANNED_ADD (button);
+    label = gtk_label_new (_("MB"));
+    SPANNED_ADD (label);
+    #endif
     label = katze_property_label (settings, "identify-as");
     INDENTED_ADD (label);
     button = katze_property_proxy (settings, "identify-as", "custom-user-agent");
     SPANNED_ADD (button);
-    #if !HAVE_HILDON
-    label = katze_property_label (settings, "news-aggregator");
-    INDENTED_ADD (label);
-    entry = katze_property_proxy (settings, "news-aggregator", "application-News");
-    SPANNED_ADD (entry);
-    #endif
 }
index ad84e4904c1e60edc717151c287c994d75919b8a..b96377ed1d8e336bf8c1d6a131236a3a683986d8 100644 (file)
@@ -89,7 +89,6 @@ struct _MidoriView
     GtkWidget* thumb_view;
     KatzeArray* news_feeds;
 
-    gchar* news_aggregator;
     gboolean middle_click_opens_selection;
     gboolean open_tabs_in_the_background;
     gboolean close_buttons_on_tabs;
@@ -3292,7 +3291,6 @@ midori_view_init (MidoriView* view)
     view->scrollh = view->scrollv = -2;
     view->back_forward_set = FALSE;
 
-    view->news_aggregator = NULL;
     view->web_view = NULL;
     /* Adjustments are not created initially, but overwritten later */
     view->scrolled_window = katze_scrolled_new (NULL, NULL);
@@ -3348,8 +3346,6 @@ midori_view_finalize (GObject* object)
     katze_object_assign (view->settings, NULL);
     katze_object_assign (view->item, NULL);
 
-    katze_assign (view->news_aggregator, NULL);
-
     G_OBJECT_CLASS (midori_view_parent_class)->finalize (object);
 }
 
@@ -3491,10 +3487,7 @@ _midori_view_set_settings (MidoriView*        view,
 
     g_object_set (view->web_view, "settings", settings, NULL);
 
-    g_free (view->news_aggregator);
-
     g_object_get (view->settings,
-        "news-aggregator", &view->news_aggregator,
         "zoom-text-and-images", &zoom_text_and_images,
         "kinetic-scrolling", &kinetic_scrolling,
         "close-buttons-on-tabs", &view->close_buttons_on_tabs,
@@ -3549,9 +3542,7 @@ midori_view_settings_notify_cb (MidoriWebSettings* settings,
     g_value_init (&value, pspec->value_type);
     g_object_get_property (G_OBJECT (view->settings), name, &value);
 
-    if (name == g_intern_string ("news-aggregator"))
-        katze_assign (view->news_aggregator, g_value_dup_string (&value));
-    else if (name == g_intern_string ("zoom-text-and-images"))
+    if (name == g_intern_string ("zoom-text-and-images"))
     {
         if (view->web_view)
             g_object_set (view->web_view, "full-content-zoom",
index b2bce0f3edbccf25334fcfa42bc728591cbc90b8..a0cc5ca4548d7c8719601e3fe56dabe8b862cd4f 100644 (file)
@@ -81,6 +81,9 @@ struct _MidoriWebSettings
     gchar* news_aggregator;
     gchar* location_entry_search;
     gchar* http_proxy;
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    gint maximum_cache_size;
+    #endif
     gchar* http_accept_language;
     gchar* ident_string;
 
@@ -167,6 +170,7 @@ enum
 
     PROP_PROXY_TYPE,
     PROP_HTTP_PROXY,
+    PROP_MAXIMUM_CACHE_SIZE,
     PROP_IDENTIFY_AS,
     PROP_USER_AGENT,
     PROP_PREFERRED_LANGUAGES,
@@ -1038,6 +1042,24 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
                                      NULL,
                                      flags));
 
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    /**
+     * MidoriWebSettings:maximum-cache-size:
+     *
+     * The maximum size of cached pages on disk.
+     *
+     * Since: 0.3.4
+     */
+    g_object_class_install_property (gobject_class,
+                                     PROP_MAXIMUM_CACHE_SIZE,
+                                     g_param_spec_int (
+                                     "maximum-cache-size",
+                                     _("Web Cache"),
+                                     _("The maximum size of cached pages on disk"),
+                                     0, G_MAXINT, 100,
+                                     flags));
+    #endif
+
     /**
     * MidoriWebSettings:identify-as:
     *
@@ -1538,6 +1560,11 @@ midori_web_settings_set_property (GObject*      object,
     case PROP_HTTP_PROXY:
         katze_assign (web_settings->http_proxy, g_value_dup_string (value));
         break;
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    case PROP_MAXIMUM_CACHE_SIZE:
+        web_settings->maximum_cache_size = g_value_get_int (value);
+        break;
+    #endif
     case PROP_IDENTIFY_AS:
         web_settings->identify_as = g_value_get_enum (value);
         if (web_settings->identify_as != MIDORI_IDENT_CUSTOM)
@@ -1791,6 +1818,11 @@ midori_web_settings_get_property (GObject*    object,
     case PROP_HTTP_PROXY:
         g_value_set_string (value, web_settings->http_proxy);
         break;
+    #if WEBKIT_CHECK_VERSION (1, 3, 11)
+    case PROP_MAXIMUM_CACHE_SIZE:
+        g_value_set_int (value, web_settings->maximum_cache_size);
+        break;
+    #endif
     case PROP_IDENTIFY_AS:
         g_value_set_enum (value, web_settings->identify_as);
         break;