]> spindle.queued.net Git - midori/commitdiff
Don't cache local adblock filters, and remove disabled filter files
authorAlexander Butenko <a.butenka@gmail.com>
Wed, 3 Feb 2010 17:26:44 +0000 (18:26 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 3 Feb 2010 17:26:44 +0000 (18:26 +0100)
extensions/adblock.c

index cdfc5ad087c5f24139178c5d93c78c0772462db6..c04a8ce88f3dc611469c458d71ecfb2709b1a4be 100644 (file)
@@ -97,12 +97,37 @@ adblock_download_notify_status_cb (WebKitDownload* download,
     /* g_object_unref (download); */
 }
 
+static gchar*
+adblock_get_filename_for_uri (const gchar* uri)
+{
+    gchar* filename;
+    gchar* folder;
+    gchar* path;
+
+    if (strchr (uri + 4,'-'))
+        return NULL;
+
+    if (!strncmp (uri, "file", 4))
+        return g_strndup (uri + 7, strlen (uri) - 7);
+
+    folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
+                               "adblock", NULL);
+    katze_mkdir_with_parents (folder, 0700);
+
+    filename = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
+    path = g_build_filename (folder, filename, NULL);
+
+    g_free (filename);
+    g_free (folder);
+    return path;
+}
+
 static void
 adblock_reload_rules (MidoriExtension* extension,
                       gboolean         custom_only)
 {
+    gchar* path;
     gchar* custom_list;
-    gchar* folder;
     gchar** filters;
     guint i = 0;
 
@@ -116,21 +141,22 @@ adblock_reload_rules (MidoriExtension* extension,
     filters = midori_extension_get_string_list (extension, "filters", NULL);
     if (!custom_only && filters && *filters)
     {
-        folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
-                                   "adblock", NULL);
-        katze_mkdir_with_parents (folder, 0700);
-        while (filters[i++] != NULL)
+        while (filters[i] != NULL)
         {
-            gchar* filename = g_compute_checksum_for_string (G_CHECKSUM_MD5,
-                                                             filters[i - 1], -1);
-            gchar* path = g_build_filename (folder, filename, NULL);
+            path = adblock_get_filename_for_uri (filters[i]);
+            if (!path)
+            {
+                i++;
+                continue;
+            }
+
             if (!adblock_parse_file (path))
             {
                 WebKitNetworkRequest* request;
                 WebKitDownload* download;
                 gchar* destination = g_filename_to_uri (path, NULL, NULL);
 
-                request = webkit_network_request_new (filters[i -1]);
+                request = webkit_network_request_new (filters[i]);
                 download = webkit_download_new (request);
                 g_object_unref (request);
                 webkit_download_set_destination_uri (download, destination);
@@ -141,9 +167,8 @@ adblock_reload_rules (MidoriExtension* extension,
             }
             else
                 g_free (path);
-            g_free (filename);
+            i++;
         }
-        g_free (folder);
     }
     g_strfreev (filters);
 
@@ -186,9 +211,9 @@ adblock_preferences_renderer_text_edited_cb (GtkCellRenderer* renderer,
 }
 
 static void
-adblock_preferences_renderer_toggle_toggled_cb (GtkTreeViewColumn* column,
-                                                const gchar*       path,
-                                                GtkTreeModel*      model)
+adblock_preferences_renderer_toggle_toggled_cb (GtkCellRendererToggle* renderer,
+                                                const gchar*           path,
+                                                GtkTreeModel*          model)
 {
     GtkTreeIter iter;
 
@@ -200,7 +225,17 @@ adblock_preferences_renderer_toggle_toggled_cb (GtkTreeViewColumn* column,
 
         if (ADBLOCK_FILTER_VALID (filter))
         {
-            filter[4] = filter[4] != '-' ? '-' : ':';
+            filter[4] = ':';
+            if (gtk_cell_renderer_toggle_get_active (renderer))
+            {
+                if (!strncmp (filter, "http", 4))
+                {
+                    gchar* filename = adblock_get_filename_for_uri (filter);
+                    g_unlink (filename);
+                    g_free (filename);
+                }
+                filter[4] = '-';
+            }
 
             gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, filter, -1);