]> spindle.queued.net Git - midori/commitdiff
Fallback for missing filename in midori_browser_save_uri
authorChristian Dywan <christian@twotoasts.de>
Mon, 21 May 2012 22:00:57 +0000 (00:00 +0200)
committerChristian Dywan <christian@twotoasts.de>
Mon, 21 May 2012 22:00:57 +0000 (00:00 +0200)
If there's only a path, eg. pastebin services do this, take
the URI as a fallback and add an extension if it makes sense.

midori/midori-browser.c
midori/midori-view.c
midori/midori-view.h

index de250d4fc41ef0be3da34cd203d02381e82224e6..d1ae4e82801ff80a025958588159000256e27a35 100644 (file)
@@ -1017,7 +1017,6 @@ midori_browser_save_uri (MidoriBrowser* browser,
     gboolean folder_set = FALSE;
     GtkWidget* dialog;
     gchar* filename;
-    gchar* dirname;
     gchar* last_slash;
 
     if (!gtk_widget_get_visible (GTK_WIDGET (browser)))
@@ -1029,6 +1028,8 @@ midori_browser_save_uri (MidoriBrowser* browser,
 
     if (uri)
     {
+        gchar* dirname;
+
         /* Base the start folder on the current view's uri if it is local */
         filename = g_filename_from_uri (uri, NULL, NULL);
         if (filename)
@@ -1043,13 +1044,29 @@ midori_browser_save_uri (MidoriBrowser* browser,
             g_free (dirname);
             g_free (filename);
         }
+    }
+
+    if (uri == NULL)
+        uri = midori_view_get_display_uri (view);
 
         /* Try to provide a good default filename, UTF-8 encoded */
         filename = soup_uri_decode (uri);
         last_slash = g_strrstr (filename, "/") + 1;
-        gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), last_slash);
+        /* Take the rest of the URI if needed */
+        if (*last_slash == '\0')
+        {
+            const gchar* extension = midori_view_fallback_extension (view, NULL);
+            gchar* guessed;
+            gchar* no_scheme;
+            last_slash = g_strdelimit (filename, "/\\<>:\"|?*", '-');
+            guessed = g_strconcat (filename, extension, NULL);
+            no_scheme = strstr (guessed, "---") + 3;
+            gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), no_scheme);
+            g_free (guessed);
+        }
+        else
+            gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), last_slash);
         g_free (filename);
-    }
 
     if (!folder_set && last_dir && *last_dir)
         gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), last_dir);
index 4db44ba301921e163b1dbfad57fd1b00cfb90808..b6fe7ff1444d6241da723643477a3e35747477a3 100644 (file)
@@ -5318,7 +5318,7 @@ midori_view_get_uri_extension (const gchar* uri)
     return g_strdup (period);
 }
 
-static const gchar*
+const gchar*
 midori_view_fallback_extension (MidoriView* view,
                                 const gchar* extension)
 {
@@ -5332,6 +5332,8 @@ midori_view_fallback_extension (MidoriView* view,
         return ".js";
     if (strstr (view->mime_type, "html"))
         return ".htm";
+    if (strstr (view->mime_type, "plain"))
+        return ".txt";
     return "";
 }
 
index feba0526507704015ee9a67dc2b547999c382bcb..7c943d8694ebb3feaec8a5e1f9a9ab729674f00b 100644 (file)
@@ -272,6 +272,10 @@ void
 midori_view_save_speed_dial_config     (MidoriView*        view,
                                         GKeyFile*          key_file);
 
+const gchar*
+midori_view_fallback_extension         (MidoriView*        view,
+                                        const gchar*       extension);
+
 G_END_DECLS
 
 #endif /* __MIDORI_VIEW_H__ */