[baobab] Do not store the entire path of each file
- From: Stefano Facchini <sfacchini src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [baobab] Do not store the entire path of each file
- Date: Fri, 12 Jun 2020 13:14:18 +0000 (UTC)
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]