[gnome-builder] Do not bookmark random directories



commit f13bcab1e3ebb30c53a9f469021febbdafc4164e
Author: Akshaya Kakkilaya <akshaya kakkilaya gmail com>
Date:   Fri Feb 19 22:27:54 2016 +0530

    Do not bookmark random directories
    
    To avoid this, only bookmark files within folders created in the
    current user home directory. These folders must not be dot preceded
    folders.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=750818

 libide/ide-context.c |   36 ++++++++++++++++++++++++++++++++++++
 1 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-context.c b/libide/ide-context.c
index 35d1399..ecaf786 100644
--- a/libide/ide-context.c
+++ b/libide/ide-context.c
@@ -1267,6 +1267,36 @@ ide_context_init_services (gpointer             source_object,
   g_task_return_boolean (task, TRUE);
 }
 
+static gboolean
+directory_is_ignored (GFile *file)
+{
+  const gchar *home_dir = g_get_home_dir ();
+  const gchar *downloads_dir = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD);
+  g_autoptr(GFile) home_prefix = g_file_new_for_path (home_dir);
+  g_autoptr(GFile) downloads_prefix = g_file_new_for_path (downloads_dir);
+  g_autofree gchar *relative_path = g_file_get_relative_path (home_prefix, file);
+  GFileType type = g_file_query_file_type (file, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL);
+
+  if (!g_file_has_prefix (file, home_prefix))
+    return TRUE;
+
+  if (g_file_equal (file, downloads_prefix) || g_file_has_prefix (file, downloads_prefix))
+    return TRUE;
+
+  if (g_str_has_prefix (relative_path, "."))
+    return TRUE;
+
+  if (type != G_FILE_TYPE_DIRECTORY)
+    {
+      g_autoptr(GFile) parent = g_file_get_parent (file);
+
+      if (g_file_equal (home_prefix, parent))
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
 static void
 ide_context_init_add_recent (gpointer             source_object,
                              GCancellable        *cancellable,
@@ -1289,6 +1319,12 @@ ide_context_init_add_recent (gpointer             source_object,
 
   task = g_task_new (self, cancellable, callback, user_data);
 
+  if (directory_is_ignored (self->project_file))
+    {
+      g_task_return_boolean (task, TRUE);
+      return;
+    }
+
   projects_file = g_bookmark_file_new ();
   g_bookmark_file_load_from_file (projects_file, self->recent_projects_path, &error);
 


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