]> spindle.queued.net Git - midori/commitdiff
Use midori_uri_parse in Addons to handle installation
authorChristian Dywan <christian@twotoasts.de>
Fri, 28 Oct 2011 21:53:14 +0000 (23:53 +0200)
committerChristian Dywan <christian@twotoasts.de>
Fri, 28 Oct 2011 21:53:14 +0000 (23:53 +0200)
extensions/addons.c

index 4324e886cfb8b0aed5afafa3b85a7552f3c1fe33..0347e158d782d893e7ab51acad4c090a8e3dd90c 100644 (file)
@@ -105,14 +105,13 @@ addons_install_response (GtkWidget*  infobar,
         const gchar* uri = midori_view_get_display_uri (view);
         if (uri && *uri)
         {
-            gchar** split_uri;
-            gchar* path, *filename, *hostname, *dest_path, *temp_uri, *folder_path;
+            gchar* hostname, *path;
+            gchar* dest_uri, *filename, *dest_path, *temp_uri, *folder_path;
             const gchar* folder;
             WebKitNetworkRequest* request;
             WebKitDownload* download;
 
-            split_uri = g_strsplit (uri, "/", -1);
-            hostname = split_uri[2];
+            hostname = midori_uri_parse (uri, &path);
             temp_uri = NULL;
             filename = NULL;
             folder = NULL;
@@ -121,49 +120,50 @@ addons_install_response (GtkWidget*  infobar,
                 folder = "scripts";
             else if (g_str_has_suffix (uri, ".user.css"))
                 folder = "styles";
-            else if (!g_strcmp0 (hostname, "userscripts.org"))
+            else if (!strcmp (hostname, "userscripts.org"))
             {
-                gchar* script_id;
-                const gchar* js_script;
-                WebKitWebView* web_view;
-                WebKitWebFrame* web_frame;
+                /* http://userscripts.org/scripts/ACTION/SCRIPT_ID/NAME */
+                gchar* subpage = strchr (strchr (path + 1, '/') + 1, '/');
+                if (subpage && subpage[0] == '/' && g_ascii_isdigit (subpage[1]))
+                {
+                    const gchar* js_script;
+                    WebKitWebView* web_view;
+                    WebKitWebFrame* web_frame;
 
-                web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (view));
-                web_frame = webkit_web_view_get_main_frame (web_view);
+                    js_script = "document.getElementById('heading').childNodes[3].childNodes[1].textContent";
+                    web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (view));
+                    web_frame = webkit_web_view_get_main_frame (web_view);
 
-                js_script = "document.getElementById('heading').childNodes[3].childNodes[1].textContent";
-                if (WEBKIT_IS_WEB_FRAME (web_frame))
-                {
-                    JSContextRef js_context = webkit_web_frame_get_global_context (web_frame);
-                    gchar* value = sokoke_js_script_eval (js_context, js_script, NULL);
-                    if (value && *value)
-                        filename = g_strdup_printf ("%s.user.js", value);
-                    g_free (value);
-                }
+                    if (WEBKIT_IS_WEB_FRAME (web_frame))
+                    {
+                        JSContextRef js_context = webkit_web_frame_get_global_context (web_frame);
+                        gchar* value = sokoke_js_script_eval (js_context, js_script, NULL);
+                        if (value && *value)
+                            filename = g_strdup_printf ("%s.user.js", value);
+                        g_free (value);
+                    }
 
-                folder = "scripts";
-                script_id = split_uri[5];
-                /* rewrite uri to get source js */
-                temp_uri = g_strdup_printf ("http://%s/scripts/source/%s.user.js",
-                                            hostname, script_id);
-                uri = temp_uri;
+                    /* rewrite uri to get source js */
+                    temp_uri = g_strdup_printf ("http://%s/scripts/source/%s.user.js",
+                                                hostname, subpage + 1);
+                    uri = temp_uri;
+                    folder = "scripts";
+                }
             }
-            else if (!g_strcmp0 (hostname, "userstyles.org"))
+            else if (!strcmp (hostname, "userstyles.org"))
             {
-                gchar* subpage = split_uri[4];
-
-                folder = "styles";
-                if ((subpage && *subpage) && g_ascii_isdigit (subpage[0]))
+                /* http://userstyles.org/styles/STYLE_ID/NAME */
+                gchar* subpage = strchr (path + 1, '/');
+                if (subpage && subpage[0] == '/' && g_ascii_isdigit (subpage[1]))
                 {
-                    gchar* style_id;
                     const gchar* js_script;
                     WebKitWebView* web_view;
                     WebKitWebFrame* web_frame;
 
+                    js_script = "document.getElementById('stylish-description').innerHTML;";
                     web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (view));
                     web_frame = webkit_web_view_get_main_frame (web_view);
 
-                    js_script = "document.getElementById('stylish-description').innerHTML;";
                     if (WEBKIT_IS_WEB_FRAME (web_frame))
                     {
                         JSContextRef js_context = webkit_web_frame_get_global_context (web_frame);
@@ -173,9 +173,9 @@ addons_install_response (GtkWidget*  infobar,
                         g_free (value);
                     }
                     /* rewrite uri to get css */
-                    style_id = split_uri[4];
-                    temp_uri = g_strdup_printf ("http://%s/styles/%s.css", hostname, style_id);
+                    temp_uri = g_strdup_printf ("http://%s/styles/%s.css", hostname, subpage + 1);
                     uri = temp_uri;
+                    folder = "styles";
                 }
             }
 
@@ -186,22 +186,22 @@ addons_install_response (GtkWidget*  infobar,
 
             if (!g_file_test (folder_path, G_FILE_TEST_EXISTS))
                 katze_mkdir_with_parents (folder_path, 0700);
-            path = g_build_path (G_DIR_SEPARATOR_S, folder_path, filename, NULL);
+            dest_path = g_build_path (G_DIR_SEPARATOR_S, folder_path, filename, NULL);
 
             request = webkit_network_request_new (uri);
             download = webkit_download_new (request);
             g_object_unref (request);
 
-            dest_path = g_filename_to_uri (path, NULL, NULL);
-            webkit_download_set_destination_uri (download, dest_path);
+            dest_uri = g_filename_to_uri (dest_path, NULL, NULL);
+            webkit_download_set_destination_uri (download, dest_uri);
             webkit_download_start (download);
 
             g_free (filename);
-            g_free (path);
+            g_free (dest_uri);
             g_free (temp_uri);
             g_free (dest_path);
             g_free (folder_path);
-            g_strfreev (split_uri);
+            g_free (hostname);
         }
     }
     gtk_widget_destroy (GTK_WIDGET (infobar));
@@ -255,27 +255,26 @@ addons_notify_load_status_cb (MidoriView*      view,
                addons_uri_install (view, ADDONS_USER_SCRIPTS);
            else if (g_str_has_suffix (uri, ".user.css"))
                addons_uri_install (view, ADDONS_USER_STYLES);
-           else if (g_str_has_prefix (uri, "http://userscripts.org/scripts/"))
+           else
            {
-               gchar** split_uri = g_strsplit (uri, "/", -1);
-               gchar* subpage = split_uri[4];
-
-               /* userscripts.org script main (with desc) and "source view" pages */
-               if (!g_strcmp0 (subpage, "show") || !g_strcmp0 (subpage, "review"))
+               gchar* path;
+               gchar* hostname = midori_uri_parse (uri, &path);
+               if (!strcmp (hostname, "userscripts.org")
+                && (g_str_has_prefix (path, "/scripts/show/")
+                 || g_str_has_prefix (path, "/scripts/review/")))
+               {
+                   /* Main (with desc) and "source view" pages */
                    addons_uri_install (view, ADDONS_USER_SCRIPTS);
-
-               g_strfreev (split_uri);
-           }
-           else if (g_str_has_prefix (uri, "http://userstyles.org/styles/"))
-           {
-               gchar** split_uri = g_strsplit (uri, "/", -1);
-               gchar* subpage = split_uri[4];
-
-               /* userstyles.org style main page with style description */
-               if ((subpage && *subpage) && g_ascii_isdigit (subpage[0]))
-                   addons_uri_install (view, ADDONS_USER_STYLES);
-
-               g_strfreev (split_uri);
+               }
+               else if (!strcmp (hostname, "userstyles.org")
+                && g_str_has_prefix (path, "/styles/"))
+               {
+                   gchar* subpage = strchr (path + 1, '/');
+                   /* Main page with style description */
+                   if (subpage && subpage[0] == '/' && g_ascii_isdigit (subpage[1]))
+                       addons_uri_install (view, ADDONS_USER_STYLES);
+               }
+               g_free (hostname);
            }
        }
     }