[nautilus] search: be more robust to peek is remote



commit bbc175eb49e07106f0b3d4b3482e9c704ddef8b0
Author: Carlos Soriano <csoriano gnome org>
Date:   Thu Sep 3 15:51:14 2015 +0200

    search: be more robust to peek is remote
    
    Few fixes to be more robust and correct when checking if
    a file or directory is remote.

 libnautilus-private/nautilus-directory.c        |   11 +++++++++-
 libnautilus-private/nautilus-file.c             |    6 ++++-
 libnautilus-private/nautilus-search-directory.c |    2 +-
 src/nautilus-files-view.c                       |   25 +++++++++++++---------
 4 files changed, 31 insertions(+), 13 deletions(-)
---
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index fad84c9..75f70f9 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -615,6 +615,7 @@ nautilus_directory_is_remote (NautilusDirectory *directory)
 {
         GFileInfo *info;
         gboolean is_remote;
+        GError *error = NULL;
 
        g_assert (NAUTILUS_IS_DIRECTORY (directory));
 
@@ -623,7 +624,15 @@ nautilus_directory_is_remote (NautilusDirectory *directory)
        }
 
        info = g_file_query_filesystem_info (directory->details->location, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
-                                            NULL, NULL);
+                                            NULL, &error);
+        if (error) {
+                /* Custom schemas like x-nautilus-desktop or other-locations:///
+                 * should not yell warnings */
+                if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED))
+                        g_warning ("Can't peek the uri: %s filesystem type with error: %s",
+                                   g_file_get_uri (directory->details->location), error->message);
+        }
+        g_clear_error (&error);
         if (info) {
                 const gchar *type;
 
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 1d36b08..6807cad 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -7012,7 +7012,11 @@ nautilus_file_is_remote (NautilusFile *file)
 {
        g_assert (NAUTILUS_IS_FILE (file));
 
-       return nautilus_directory_is_remote (file->details->directory);
+        if (nautilus_file_is_directory (file))
+                return nautilus_directory_is_remote (nautilus_directory_get_for_file (file));
+        else
+               return nautilus_directory_is_remote (file->details->directory);
+
 }
 
 /**
diff --git a/libnautilus-private/nautilus-search-directory.c b/libnautilus-private/nautilus-search-directory.c
index 86cf2bf..5de492f 100644
--- a/libnautilus-private/nautilus-search-directory.c
+++ b/libnautilus-private/nautilus-search-directory.c
@@ -188,7 +188,7 @@ start_search (NautilusSearchDirectory *search)
         /* It's too slow to search recursively on locations that are on the network. So
          * for that case, just search in the current directory */
        recursive = g_settings_get_boolean (nautilus_preferences, "enable-recursive-search") &&
-                    !nautilus_file_is_remote (directory_as_file);
+                    !nautilus_directory_is_remote (search->details->base_model);
         g_object_unref (directory_as_file);
        g_object_set (simple_provider, "recursive", recursive, NULL);
 
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 4986da3..67aaedf 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -715,13 +715,21 @@ showing_trash_directory (NautilusFilesView *view)
 static gboolean
 showing_remote_directory (NautilusFilesView *view)
 {
-        NautilusFile *file;
+        NautilusDirectory *base;
 
-        file = nautilus_files_view_get_directory_as_file (view);
-        if (file != NULL) {
-                return nautilus_file_is_remote (file);
-        }
-        return FALSE;
+        /* Nautilus search is kind of special, since when we swtich to a search directory
+         * its uri is something invented, not a real GFile or where we were before
+         * entering search. For that we need to get the base model of the search directory,
+         * that is basically the real location we were before entering search */
+        if (NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model))
+                base = nautilus_search_directory_get_base_model (NAUTILUS_SEARCH_DIRECTORY 
(view->details->model));
+        else
+                base = view->details->model;
+
+        if (base != NULL)
+                return nautilus_directory_is_remote (base);
+        else
+                return FALSE;
 }
 
 static gboolean
@@ -6947,10 +6955,7 @@ static void
 check_remote_warning_bar (NautilusFilesView *view)
 {
         if (nautilus_view_is_searching (NAUTILUS_VIEW (view))) {
-                NautilusDirectory *base;
-
-                base = nautilus_search_directory_get_base_model (NAUTILUS_SEARCH_DIRECTORY 
(view->details->model));
-                if (nautilus_directory_is_remote (base))
+                if (showing_trash_directory (view))
                         gtk_widget_show_all (view->details->remote_warning_bar);
                 else
                         gtk_widget_hide (view->details->remote_warning_bar);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]