]> spindle.queued.net Git - midori/commitdiff
Preserve extensions for viewing source files
authorEnrico Tröger <enrico.troeger@uvena.de>
Thu, 23 Oct 2008 23:15:43 +0000 (01:15 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 23 Oct 2008 23:15:43 +0000 (01:15 +0200)
midori/midori-browser.c

index f89b78fbc745e9cc93bd7ae4a62aa977770850d7..91210f2e3530f69f2e0b8c5b44228ca6ff54575e 100644 (file)
@@ -1648,11 +1648,51 @@ _action_zoom_normal_activate (GtkAction*     action,
         midori_view_set_zoom_level (MIDORI_VIEW (view), 1.0f);
 }
 
+static gchar*
+midori_browser_get_uri_extension (const gchar* uri)
+{
+    gchar* extension;
+    gchar* slash;
+    gchar* period;
+    gchar* ext_end;
+    gchar* tmp = g_strdup (uri);
+
+    /* Find the last slash in the URI and search for the last period
+       *after* the last slash. This is not completely accurate
+       but should cover most (simple) URIs */
+    slash = strrchr (tmp, '/');
+    /* Huh, URI without slashes? */
+    if (!slash)
+        return g_strdup ("");
+
+    ext_end = period = strrchr (slash, '.');
+    if (!period)
+       return g_strdup ("");
+
+    /* Skip the period */
+    ext_end++;
+    /* If *ext_end is 0 here, the URI ended with a period, so skip */
+    if (!*ext_end)
+       return g_strdup ("");
+
+    /* Find the end of the extension */
+    while (*ext_end && g_ascii_isalnum (*ext_end))
+        ext_end++;
+
+    *ext_end = 0;
+    extension = g_strdup (period);
+
+    g_free (tmp);
+
+    return extension;
+}
+
 static void
 midori_browser_transfer_cb (KatzeNetRequest* request,
                             MidoriBrowser*   browser)
 {
     gchar* filename;
+    gchar* extension;
     gchar* unique_filename;
     gchar* text_editor;
     gint fd;
@@ -1660,7 +1700,10 @@ midori_browser_transfer_cb (KatzeNetRequest* request,
 
     if (request->data)
     {
-        filename = g_strdup_printf ("%uXXXXXX", g_str_hash (request->uri));
+        extension = midori_browser_get_uri_extension (request->uri);
+        filename = g_strdup_printf ("%uXXXXXX%s",
+                                    g_str_hash (request->uri), extension);
+        g_free (extension);
         if (((fd = g_file_open_tmp (filename, &unique_filename, NULL)) != -1))
         {
             if ((fp = fdopen (fd, "w")))