[gnome-builder] load-directory-task: use ide_project_files_add_file()



commit 810eb8bbae05fbe05bc1b7f3e5f67986cb8473ff
Author: Christian Hergert <christian hergert me>
Date:   Tue Apr 14 15:59:18 2015 -0700

    load-directory-task: use ide_project_files_add_file()
    
    It might not be quite as fast, but it removes some duplicated logic to
    build the file tree. I'd rather that be the case so we get more testing
    from the various ways the tree can be modified.

 libide/tasks/ide-load-directory-task.c |   45 ++++++++------------------------
 1 files changed, 11 insertions(+), 34 deletions(-)
---
diff --git a/libide/tasks/ide-load-directory-task.c b/libide/tasks/ide-load-directory-task.c
index 0873f39..2b5b432 100644
--- a/libide/tasks/ide-load-directory-task.c
+++ b/libide/tasks/ide-load-directory-task.c
@@ -23,6 +23,7 @@
 #include "ide-project.h"
 #include "ide-project-item.h"
 #include "ide-project-file.h"
+#include "ide-project-files.h"
 #include "ide-vcs.h"
 
 #define DEFAULT_MAX_FILES 10000
@@ -90,7 +91,6 @@ ide_load_directory_task_load_directory (IdeLoadDirectoryTask  *self,
                                         GError               **error)
 {
   g_autoptr(GFileEnumerator) children = NULL;
-  IdeProjectItem *parent = NULL;
   g_autoptr(GPtrArray) directories = NULL;
   GFileInfo *child_info;
   IdeVcs *vcs;
@@ -147,11 +147,6 @@ ide_load_directory_task_load_directory (IdeLoadDirectoryTask  *self,
     return FALSE;
 
   /*
-   * Get the parent IdeFileItem.
-   */
-  parent = g_hash_table_lookup (self->directories, directory) ?: self->parent;
-
-  /*
    * Get a handle to our vcs, which is used to check for ignored files.
    */
   vcs = ide_context_get_vcs (self->context);
@@ -173,32 +168,6 @@ ide_load_directory_task_load_directory (IdeLoadDirectoryTask  *self,
       switch (file_type)
         {
         case G_FILE_TYPE_DIRECTORY:
-          file = g_file_get_child (directory, name);
-
-          /* check for known ignored files */
-          if (ide_vcs_is_ignored (vcs, file, NULL))
-            break;
-
-          /* add the file item to the project tree */
-          path = g_file_get_relative_path (self->directory, file);
-          item = g_object_new (IDE_TYPE_PROJECT_FILE,
-                               "context", self->context,
-                               "file", file,
-                               "file-info", child_info,
-                               "parent", parent,
-                               "path", path,
-                               NULL);
-          ide_project_item_append (parent, IDE_PROJECT_ITEM (item));
-          self->current_files++;
-
-          /* we want to load all children in this directory first */
-          g_hash_table_insert (self->directories, g_object_ref (file), g_object_ref (item));
-          if (!directories)
-            directories = g_ptr_array_new_with_free_func (g_object_unref);
-          g_ptr_array_add (directories, g_object_ref (file));
-
-          break;
-
         case G_FILE_TYPE_REGULAR:
           file = g_file_get_child (directory, name);
 
@@ -212,12 +181,20 @@ ide_load_directory_task_load_directory (IdeLoadDirectoryTask  *self,
                                "context", self->context,
                                "file", file,
                                "file-info", child_info,
-                               "parent", parent,
+                               "parent", NULL,
                                "path", path,
                                NULL);
-          ide_project_item_append (parent, IDE_PROJECT_ITEM (item));
+
+          ide_project_files_add_file (IDE_PROJECT_FILES (self->parent), IDE_PROJECT_FILE (item));
           self->current_files++;
 
+          if (file_type == G_FILE_TYPE_DIRECTORY)
+            {
+              if (directories == NULL)
+                directories = g_ptr_array_new_with_free_func (g_object_unref);
+              g_ptr_array_add (directories, g_object_ref (file));
+            }
+
           break;
 
         case G_FILE_TYPE_MOUNTABLE:


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