[baobab] Do not store the entire path of each file



commit cf10f925a7b56730ab3b47cf25338c97fd3e2af3
Author: Stefano Facchini <stefano facchini gmail com>
Date:   Mon Jun 8 15:59:57 2020 +0200

    Do not store the entire path of each file
    
    It is a waste of memory and it can be rebuilt when needed.

 src/baobab-cellrenderers.vala |  9 ++++++++-
 src/baobab-chart.vala         | 16 +++++++++++-----
 src/baobab-main-window.ui     |  1 +
 src/baobab-scanner.vala       | 36 +++++++++++++++++++++++++++++-------
 src/baobab-window.vala        | 15 +++++----------
 5 files changed, 54 insertions(+), 23 deletions(-)
---
diff --git a/src/baobab-cellrenderers.vala b/src/baobab-cellrenderers.vala
index aeaa943..72be2f9 100644
--- a/src/baobab-cellrenderers.vala
+++ b/src/baobab-cellrenderers.vala
@@ -23,9 +23,16 @@ namespace Baobab {
     public class CellRendererName : Gtk.CellRendererText {
         public Scanner.State state { set; get; }
 
+        public string display_name { set; get; }
+
         public string name {
             set {
-                var escaped = (value != null) ? Markup.escape_text (value) : null;
+                string escaped = null;
+                if (display_name != null) {
+                    escaped = Markup.escape_text (display_name);
+                } else if (value != null) {
+                    escaped = Markup.escape_text (Filename.display_name (value));
+                }
                 switch (state) {
                 case Scanner.State.ERROR:
                     markup = "<b>%s</b>".printf (escaped);
diff --git a/src/baobab-chart.vala b/src/baobab-chart.vala
index f27f610..1e658e7 100644
--- a/src/baobab-chart.vala
+++ b/src/baobab-chart.vala
@@ -62,8 +62,8 @@ namespace Baobab {
                                          {0.99, 0.68, 0.25, 1.0}}; /* tango: fcaf3e */
 
         uint name_column;
+        uint display_name_column;
         uint size_column;
-        uint info_column;
         uint percentage_column;
         uint valid_column;
 
@@ -116,8 +116,8 @@ namespace Baobab {
 
         public void set_model_with_columns (Gtk.TreeModel m,
                                             uint          name_column_,
+                                            uint          display_name_column_,
                                             uint          size_column_,
-                                            uint          info_column_,
                                             uint          percentage_column_,
                                             uint          valid_column_,
                                             Gtk.TreePath? r) {
@@ -127,8 +127,8 @@ namespace Baobab {
             }
 
             name_column = name_column_;
+            display_name_column = display_name_column_;
             size_column = size_column_;
-            info_column = info_column_;
             percentage_column = percentage_column_;
             valid_column = valid_column_;
         }
@@ -267,11 +267,17 @@ namespace Baobab {
 
         unowned List<ChartItem> add_item (uint depth, double rel_start, double rel_size, Gtk.TreeIter iter) {
             string name;
+            string display_name;
             uint64 size;
-            model.get (iter, name_column, out name, size_column, out size, -1);
+            model.get (iter, name_column, out name, display_name_column, out display_name, size_column, out 
size);
 
             var item = create_new_chartitem ();
-            item.name = name;
+            item.name = "";
+            if (display_name != null) {
+                item.name = display_name;
+            } else if (name != null) {
+                item.name = Filename.display_name (name);
+            }
             item.size = format_size (size);
             item.depth = depth;
             item.rel_start = rel_start;
diff --git a/src/baobab-main-window.ui b/src/baobab-main-window.ui
index 16b9cd3..cb19517 100644
--- a/src/baobab-main-window.ui
+++ b/src/baobab-main-window.ui
@@ -258,6 +258,7 @@
                                 <object class="BaobabCellRendererName" id="folder_column_text_renderer"/>
                                 <attributes>
                                   <attribute name="name">0</attribute>
+                                  <attribute name="display_name">1</attribute>
                                   <attribute name="state">7</attribute>
                                 </attributes>
                               </child>
diff --git a/src/baobab-scanner.vala b/src/baobab-scanner.vala
index 2d73009..5435793 100644
--- a/src/baobab-scanner.vala
+++ b/src/baobab-scanner.vala
@@ -30,8 +30,8 @@ namespace Baobab {
 
     public class Scanner : Gtk.TreeStore {
         public enum Columns {
+            NAME,
             DISPLAY_NAME,
-            PARSE_NAME,
             PERCENT,
             SIZE,
             ALLOC_SIZE,
@@ -59,6 +59,25 @@ namespace Baobab {
 
         public signal void completed();
 
+        public File get_file (Gtk.TreeIter iter) {
+            List<string> names = null;
+            Gtk.TreeIter child = {0};
+
+            do {
+                string name;
+                get (iter, Columns.NAME, out name);
+                names.prepend (name);
+                child = iter;
+            } while (iter_parent (out iter, child));
+
+            var file = directory;
+            foreach (var name in names.next) {
+                file = file.get_child (name);
+            }
+
+            return file;
+        }
+
         const string ATTRIBUTES =
             FileAttribute.STANDARD_NAME + "," +
             FileAttribute.STANDARD_DISPLAY_NAME + "," +
@@ -150,8 +169,8 @@ namespace Baobab {
             // written in the worker thread on creation
             // read from the main thread at any time
             internal unowned Results? parent;
+            internal string name;
             internal string display_name;
-            internal string parse_name;
 
             // written in the worker thread before dispatch
             // read from the main thread only after dispatch
@@ -179,8 +198,11 @@ namespace Baobab {
             }
 
             var results = new Results ();
-            results.display_name = info.get_display_name ();
-            results.parse_name = directory.get_parse_name ();
+            results.name = info.get_name ();
+            var display_name = info.get_display_name ();
+            if (results.name == null || display_name != Filename.display_name (results.name)) {
+                results.display_name = display_name;
+            }
             results.parent = parent;
 
             results.time_modified = info.get_attribute_uint64 (FileAttribute.TIME_MODIFIED);
@@ -300,8 +322,8 @@ namespace Baobab {
             prepend (out results.iter, parent_iter);
             set (results.iter,
                  Columns.STATE,        State.SCANNING,
+                 Columns.NAME,         results.name,
                  Columns.DISPLAY_NAME, results.display_name,
-                 Columns.PARSE_NAME,   results.parse_name,
                  Columns.TIME_MODIFIED,results.time_modified);
             results.iter_is_set = true;
         }
@@ -436,8 +458,8 @@ namespace Baobab {
             cancellable = new Cancellable();
             scan_error = null;
             set_column_types (new Type[] {
-                typeof (string),  // DIR_NAME
-                typeof (string),  // PARSE_NAME
+                typeof (string),  // NAME
+                typeof (string),  // DISPLAY_NAME
                 typeof (double),  // PERCENT
                 typeof (uint64),  // SIZE
                 typeof (uint64),  // ALLOC_SIZE
diff --git a/src/baobab-window.vala b/src/baobab-window.vala
index 072a9d2..afa4cf2 100644
--- a/src/baobab-window.vala
+++ b/src/baobab-window.vala
@@ -356,9 +356,7 @@ namespace Baobab {
         }
 
         public void open_item (Gtk.TreeIter iter) {
-            string parse_name;
-            active_location.scanner.get (iter, Scanner.Columns.PARSE_NAME, out parse_name);
-            var file = File.parse_name (parse_name);
+            var file = active_location.scanner.get_file (iter);
             try {
                 AppInfo.launch_default_for_uri (file.get_uri (), null);
             } catch (Error e) {
@@ -367,17 +365,14 @@ namespace Baobab {
         }
 
         public void copy_path (Gtk.TreeIter iter) {
-            string parse_name;
-            active_location.scanner.get (iter, Scanner.Columns.PARSE_NAME, out parse_name);
+            var parse_name = active_location.scanner.get_file (iter).get_parse_name ();
             var clipboard = Gtk.Clipboard.get (Gdk.SELECTION_CLIPBOARD);
             clipboard.set_text (parse_name, -1);
             clipboard.store ();
         }
 
         public void trash_file (Gtk.TreeIter iter) {
-            string parse_name;
-            active_location.scanner.get (iter, Scanner.Columns.PARSE_NAME, out parse_name);
-            var file = File.parse_name (parse_name);
+            var file = active_location.scanner.get_file (iter);
             try {
                 file.trash ();
                 active_location.scanner.remove (ref iter);
@@ -515,15 +510,15 @@ namespace Baobab {
             model.bind_property ("max-depth", rings_chart, "max-depth", BindingFlags.SYNC_CREATE);
             model.bind_property ("max-depth", treemap_chart, "max-depth", BindingFlags.SYNC_CREATE);
             treemap_chart.set_model_with_columns (model,
+                                                  Scanner.Columns.NAME,
                                                   Scanner.Columns.DISPLAY_NAME,
                                                   show_allocated_size ? Scanner.Columns.ALLOC_SIZE : 
Scanner.Columns.SIZE,
-                                                  Scanner.Columns.PARSE_NAME,
                                                   Scanner.Columns.PERCENT,
                                                   Scanner.Columns.ELEMENTS, null);
             rings_chart.set_model_with_columns (model,
+                                                Scanner.Columns.NAME,
                                                 Scanner.Columns.DISPLAY_NAME,
                                                 show_allocated_size ? Scanner.Columns.ALLOC_SIZE : 
Scanner.Columns.SIZE,
-                                                Scanner.Columns.PARSE_NAME,
                                                 Scanner.Columns.PERCENT,
                                                 Scanner.Columns.ELEMENTS, null);
         }


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