]> spindle.queued.net Git - midori/commitdiff
Guess a suitable token for a form-based search
authorPaweł Forysiuk <tuxator@o2.pl>
Wed, 25 Jul 2012 21:03:37 +0000 (23:03 +0200)
committerChristian Dywan <christian@twotoasts.de>
Wed, 25 Jul 2012 21:05:47 +0000 (23:05 +0200)
midori/midori-searchaction.c
midori/midori-view.c

index 95685739117544d5970efd0e27e3ee9b3c280c56..da4f9bd6b890568633f1df0b5759a8f603c44f15 100644 (file)
@@ -877,6 +877,63 @@ midori_search_action_editor_name_changed_cb (GtkWidget* entry,
         GTK_RESPONSE_ACCEPT, text && *text);
 }
 
+gchar*
+midori_search_action_token_for_uri (const gchar* uri)
+{
+    guint len, i;
+    gchar** parts;
+    gchar* hostname = NULL, *path = NULL;
+
+    path = midori_uri_parse_hostname (uri, NULL);
+    parts = g_strsplit (path, ".", -1);
+    g_free (path);
+
+    len = g_strv_length (parts);
+    if (len > 2)
+    {
+        for (i = len; i == 0; i--)
+        {
+            if (parts[i] && *parts[i])
+                if (strlen (parts[i]) > 3)
+                {
+                    hostname = g_strdup (parts[i]);
+                    break;
+                }
+        }
+    }
+    else
+        hostname = g_strdup (parts[0]);
+
+    if (!hostname)
+        hostname = g_strdup (parts[1]);
+
+    g_strfreev (parts);
+
+    if (strlen (hostname) > 4)
+    {
+        GString* str = g_string_new (NULL);
+        int j, count = 0;
+
+        for (j = 0; count < 4; j++)
+        {
+            if (hostname[j] == 'a'
+            ||  hostname[j] == 'e'
+            ||  hostname[j] == 'i'
+            ||  hostname[j] == 'o'
+            ||  hostname[j] == 'u')
+                continue;
+            else
+            {
+                g_string_append_c (str, hostname[j]);
+                count++;
+            }
+        }
+        return g_string_free (str, FALSE);
+    }
+    return g_strdup (hostname);
+}
+
+
 void
 midori_search_action_get_editor (MidoriSearchAction* search_action,
                                  KatzeItem*          item,
@@ -978,8 +1035,7 @@ midori_search_action_get_editor (MidoriSearchAction* search_action,
     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
     entry_token = gtk_entry_new ();
     gtk_entry_set_activates_default (GTK_ENTRY (entry_token), TRUE);
-    if (!new_engine)
-        gtk_entry_set_text (GTK_ENTRY (entry_token)
+    gtk_entry_set_text (GTK_ENTRY (entry_token)
          , katze_str_non_null (katze_item_get_token (item)));
     gtk_box_pack_start (GTK_BOX (hbox), entry_token, TRUE, TRUE, 0);
     gtk_container_add (GTK_CONTAINER (content_area), hbox);
index 41669ed022b71063f473f9c898c9379a158b61a6..5b13ff1774d4c828ae17bfcce58bcea302f25bb0 100644 (file)
@@ -2441,6 +2441,9 @@ midori_view_menu_add_search_engine_cb (GtkWidget*  widget,
     midori_search_action_get_editor (MIDORI_SEARCH_ACTION (action), item, TRUE);
 }
 
+gchar*
+midori_search_action_token_for_uri (const gchar* uri);
+
 static KatzeItem*
 midori_view_search_engine_for_form (MidoriView*    view,
                                     WebKitWebView* web_view)
@@ -2512,6 +2515,7 @@ midori_view_search_engine_for_form (MidoriView*    view,
 
     item = katze_item_new ();
     katze_item_set_uri (item, g_string_free (uri_str, FALSE));
+    item->token = midori_search_action_token_for_uri (view->uri);
 
     if (strstr (title, " - "))
         parts = g_strsplit (title, " - ", 2);