Be sure to reload lists as they are added
This commit is contained in:
parent
d5ed3e9b28
commit
a8a0ff625e
1 changed files with 72 additions and 52 deletions
|
@ -25,6 +25,9 @@
|
||||||
static GHashTable* pattern = NULL;
|
static GHashTable* pattern = NULL;
|
||||||
static gchar* blockcss = "";
|
static gchar* blockcss = "";
|
||||||
|
|
||||||
|
static GHashTable*
|
||||||
|
adblock_parse_file (gchar* path);
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
adblock_fixup_regexp (gchar* src)
|
adblock_fixup_regexp (gchar* src)
|
||||||
{
|
{
|
||||||
|
@ -65,6 +68,60 @@ adblock_fixup_regexp (gchar* src)
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
adblock_download_notify_status_cb (WebKitDownload* download,
|
||||||
|
GParamSpec* pspec,
|
||||||
|
gchar* path)
|
||||||
|
{
|
||||||
|
pattern = adblock_parse_file (path);
|
||||||
|
/* g_object_unref (download); */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
adblock_reload_rules(MidoriExtension* extension)
|
||||||
|
{
|
||||||
|
gchar** filters;
|
||||||
|
gchar* folder;
|
||||||
|
guint i = 0;
|
||||||
|
filters = midori_extension_get_string_list (extension, "filters", NULL);
|
||||||
|
folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
|
||||||
|
"adblock", NULL);
|
||||||
|
g_mkdir_with_parents (folder, 0700);
|
||||||
|
|
||||||
|
if (!filters)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pattern = NULL;
|
||||||
|
blockcss = "";
|
||||||
|
|
||||||
|
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);
|
||||||
|
if (!g_file_test (path, G_FILE_TEST_EXISTS))
|
||||||
|
{
|
||||||
|
WebKitNetworkRequest* request;
|
||||||
|
WebKitDownload* download;
|
||||||
|
gchar* destination = g_filename_to_uri (path, NULL, NULL);
|
||||||
|
request = webkit_network_request_new (filters[i -1]);
|
||||||
|
download = webkit_download_new (request);
|
||||||
|
g_object_unref (request);
|
||||||
|
webkit_download_set_destination_uri (download, destination);
|
||||||
|
g_free (destination);
|
||||||
|
g_signal_connect (download, "notify::status",
|
||||||
|
G_CALLBACK (adblock_download_notify_status_cb), path);
|
||||||
|
webkit_download_start (download);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pattern = adblock_parse_file (path);
|
||||||
|
g_free (path);
|
||||||
|
g_free (filename);
|
||||||
|
}
|
||||||
|
g_strfreev (filters);
|
||||||
|
g_free (folder);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_browser_populate_tool_menu_cb (MidoriBrowser* browser,
|
adblock_browser_populate_tool_menu_cb (MidoriBrowser* browser,
|
||||||
GtkWidget* menu,
|
GtkWidget* menu,
|
||||||
|
@ -91,17 +148,25 @@ adblock_preferences_model_row_changed_cb (GtkTreeModel* model,
|
||||||
gsize length = gtk_tree_model_iter_n_children (model, NULL);
|
gsize length = gtk_tree_model_iter_n_children (model, NULL);
|
||||||
gchar** filters = g_new (gchar*, length + 1);
|
gchar** filters = g_new (gchar*, length + 1);
|
||||||
guint i = 0;
|
guint i = 0;
|
||||||
|
gboolean need_reload = FALSE;
|
||||||
|
|
||||||
if (gtk_tree_model_iter_children (model, iter, NULL))
|
if (gtk_tree_model_iter_children (model, iter, NULL))
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
gchar* filter;
|
gchar* filter;
|
||||||
gtk_tree_model_get (model, iter, 0, &filter, -1);
|
gtk_tree_model_get (model, iter, 0, &filter, -1);
|
||||||
|
if (filter && filter[0] && filter[1] && filter[2])
|
||||||
|
{
|
||||||
filters[i++] = filter;
|
filters[i++] = filter;
|
||||||
|
need_reload = TRUE;
|
||||||
|
}
|
||||||
|
g_free (filter);
|
||||||
}
|
}
|
||||||
while (gtk_tree_model_iter_next (model, iter));
|
while (gtk_tree_model_iter_next (model, iter));
|
||||||
filters[length] = NULL;
|
filters[length] = NULL;
|
||||||
midori_extension_set_string_list (extension, "filters", filters, length);
|
midori_extension_set_string_list (extension, "filters", filters, length);
|
||||||
|
if (need_reload)
|
||||||
|
adblock_reload_rules (extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -318,7 +383,7 @@ adblock_resource_request_starting_cb (WebKitWebView* web_view,
|
||||||
MidoriView* view)
|
MidoriView* view)
|
||||||
{
|
{
|
||||||
const gchar* uri = webkit_network_request_get_uri (request);
|
const gchar* uri = webkit_network_request_get_uri (request);
|
||||||
if (!strncmp(uri, "data", 4))
|
if (!strncmp (uri, "data", 4))
|
||||||
return;
|
return;
|
||||||
if (g_hash_table_find (pattern, (GHRFunc) adblock_is_matched, (char*)uri))
|
if (g_hash_table_find (pattern, (GHRFunc) adblock_is_matched, (char*)uri))
|
||||||
{
|
{
|
||||||
|
@ -384,7 +449,8 @@ adblock_app_add_browser_cb (MidoriApp* app,
|
||||||
{
|
{
|
||||||
if (pattern)
|
if (pattern)
|
||||||
{
|
{
|
||||||
midori_browser_foreach (browser, (GtkCallback)adblock_add_tab_foreach_cb, browser);
|
midori_browser_foreach (browser,
|
||||||
|
(GtkCallback)adblock_add_tab_foreach_cb, browser);
|
||||||
g_signal_connect (browser, "add-tab", G_CALLBACK (adblock_add_tab_cb), 0);
|
g_signal_connect (browser, "add-tab", G_CALLBACK (adblock_add_tab_cb), 0);
|
||||||
}
|
}
|
||||||
g_signal_connect (browser, "populate-tool-menu",
|
g_signal_connect (browser, "populate-tool-menu",
|
||||||
|
@ -505,15 +571,6 @@ adblock_parse_file (gchar* path)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
adblock_download_notify_status_cb (WebKitDownload* download,
|
|
||||||
GParamSpec* pspec,
|
|
||||||
gchar* path)
|
|
||||||
{
|
|
||||||
pattern = adblock_parse_file (path);
|
|
||||||
/* g_object_unref (download); */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adblock_deactivate_tabs (MidoriView* view,
|
adblock_deactivate_tabs (MidoriView* view,
|
||||||
MidoriBrowser* browser)
|
MidoriBrowser* browser)
|
||||||
|
@ -541,8 +598,9 @@ adblock_deactivate_cb (MidoriExtension* extension,
|
||||||
app, adblock_app_add_browser_cb, extension);
|
app, adblock_app_add_browser_cb, extension);
|
||||||
midori_browser_foreach (browser, (GtkCallback)adblock_deactivate_tabs, browser);
|
midori_browser_foreach (browser, (GtkCallback)adblock_deactivate_tabs, browser);
|
||||||
|
|
||||||
pattern = NULL;
|
|
||||||
blockcss = "";
|
blockcss = "";
|
||||||
|
if (pattern)
|
||||||
|
g_hash_table_destroy (pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -552,43 +610,7 @@ adblock_activate_cb (MidoriExtension* extension,
|
||||||
KatzeArray* browsers;
|
KatzeArray* browsers;
|
||||||
MidoriBrowser* browser;
|
MidoriBrowser* browser;
|
||||||
guint i;
|
guint i;
|
||||||
gchar* folder;
|
adblock_reload_rules (extension);
|
||||||
gchar** filters;
|
|
||||||
|
|
||||||
folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME,
|
|
||||||
"adblock", NULL);
|
|
||||||
g_mkdir_with_parents (folder, 0700);
|
|
||||||
filters = midori_extension_get_string_list (extension, "filters", NULL);
|
|
||||||
if (filters != NULL)
|
|
||||||
{
|
|
||||||
i = 0;
|
|
||||||
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);
|
|
||||||
|
|
||||||
if (!g_file_test (path, G_FILE_TEST_EXISTS))
|
|
||||||
{
|
|
||||||
WebKitNetworkRequest* request;
|
|
||||||
WebKitDownload* download;
|
|
||||||
gchar* destination = g_filename_to_uri (path, NULL, NULL);
|
|
||||||
|
|
||||||
request = webkit_network_request_new (filters[i -1]);
|
|
||||||
download = webkit_download_new (request);
|
|
||||||
g_object_unref (request);
|
|
||||||
webkit_download_set_destination_uri (download, destination);
|
|
||||||
g_free (destination);
|
|
||||||
g_signal_connect (download, "notify::status",
|
|
||||||
G_CALLBACK (adblock_download_notify_status_cb), path);
|
|
||||||
webkit_download_start (download);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pattern = adblock_parse_file (path);
|
|
||||||
g_free (path);
|
|
||||||
g_free (filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
browsers = katze_object_get_object (app, "browsers");
|
browsers = katze_object_get_object (app, "browsers");
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -598,8 +620,6 @@ adblock_activate_cb (MidoriExtension* extension,
|
||||||
G_CALLBACK (adblock_app_add_browser_cb), extension);
|
G_CALLBACK (adblock_app_add_browser_cb), extension);
|
||||||
|
|
||||||
g_object_unref (browsers);
|
g_object_unref (browsers);
|
||||||
g_strfreev (filters);
|
|
||||||
g_free (folder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if G_ENABLE_DEBUG
|
#if G_ENABLE_DEBUG
|
||||||
|
|
Loading…
Reference in a new issue