diff options
author | Stefano Facchini <stefano.facchini@gmail.com> | 2020-06-15 09:16:12 +0200 |
---|---|---|
committer | Stefano Facchini <stefano.facchini@gmail.com> | 2020-06-15 09:16:12 +0200 |
commit | 0efc5ffd473d55ea53f20e3aaa9e63278c1ddf32 (patch) | |
tree | 92a44b28a56be8d679ff0a82350fff8d65f374f3 | |
parent | 5aefd36a06eb61670f6ae2d80dc452cd4190da20 (diff) | |
download | baobab-0efc5ffd473d55ea53f20e3aaa9e63278c1ddf32.tar.gz |
Split out a function
-rw-r--r-- | src/baobab-scanner.vala | 82 |
1 files changed, 43 insertions, 39 deletions
diff --git a/src/baobab-scanner.vala b/src/baobab-scanner.vala index 04dbfdf..b3ba68c 100644 --- a/src/baobab-scanner.vala +++ b/src/baobab-scanner.vala @@ -212,6 +212,48 @@ namespace Baobab { } } + void add_children (File directory, Results results, ResultsArray results_array) throws Error { + var children = directory.enumerate_children (ATTRIBUTES, FileQueryInfoFlags.NOFOLLOW_SYMLINKS, cancellable); + FileInfo? child_info; + while ((child_info = children.next_file (cancellable)) != null) { + switch (child_info.get_file_type ()) { + case FileType.DIRECTORY: + var child = directory.get_child (child_info.get_name ()); + var child_results = add_directory (child, child_info, results); + + if (child_results != null) { + results.update_with_child (child_results); + results_array.results += (owned) child_results; + } + break; + + case FileType.REGULAR: + if (child_info.has_attribute (FileAttribute.UNIX_NLINK)) { + if (child_info.get_attribute_uint32 (FileAttribute.UNIX_NLINK) > 1) { + var hl = new HardLink (child_info); + + // check if we've already encountered this file + if (hl in hardlinks) { + continue; + } + + hardlinks.add ((owned) hl); + } + + } + + var child_results = new Results (child_info, results); + results.update_with_child (child_results); + results_array.results += (owned) child_results; + break; + + default: + // ignore other types (symlinks, sockets, devices, etc) + break; + } + } + } + Results? add_directory (File directory, FileInfo info, Results? parent = null) { var results_array = new ResultsArray (); @@ -224,45 +266,7 @@ namespace Baobab { var results = new Results (info, parent); try { - var children = directory.enumerate_children (ATTRIBUTES, FileQueryInfoFlags.NOFOLLOW_SYMLINKS, cancellable); - FileInfo? child_info; - while ((child_info = children.next_file (cancellable)) != null) { - switch (child_info.get_file_type ()) { - case FileType.DIRECTORY: - var child = directory.get_child (child_info.get_name ()); - var child_results = add_directory (child, child_info, results); - - if (child_results != null) { - results.update_with_child (child_results); - results_array.results += (owned) child_results; - } - break; - - case FileType.REGULAR: - if (child_info.has_attribute (FileAttribute.UNIX_NLINK)) { - if (child_info.get_attribute_uint32 (FileAttribute.UNIX_NLINK) > 1) { - var hl = new HardLink (child_info); - - // check if we've already encountered this file - if (hl in hardlinks) { - continue; - } - - hardlinks.add ((owned) hl); - } - - } - - var child_results = new Results (child_info, results); - results.update_with_child (child_results); - results_array.results += (owned) child_results; - break; - - default: - // ignore other types (symlinks, sockets, devices, etc) - break; - } - } + add_children (directory, results, results_array); } catch (Error e) { results.error = e; } |