From c8bdb657fb14be7e33ec4b1370f98b0be9d2f797 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Mon, 25 Nov 2024 19:03:46 +0000 Subject: [PATCH 1/6] File: Recognise info is null after construction --- src/FolderManager/File.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FolderManager/File.vala b/src/FolderManager/File.vala index 1e3c36d047..ce5e6873a5 100644 --- a/src/FolderManager/File.vala +++ b/src/FolderManager/File.vala @@ -25,7 +25,7 @@ namespace Scratch.FolderManager { */ public class File : GLib.Object { public GLib.File file { get; private set; } - private GLib.FileInfo info; + private GLib.FileInfo? info = null; // Non-null after loading public File (string path) { Object (path: path); From 098ef7a3d2352dde1161bec9fde60bddd9ea8373 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Mon, 25 Nov 2024 19:04:07 +0000 Subject: [PATCH 2/6] File: Provide fallback icon --- src/FolderManager/File.vala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/FolderManager/File.vala b/src/FolderManager/File.vala index ce5e6873a5..3bf6100880 100644 --- a/src/FolderManager/File.vala +++ b/src/FolderManager/File.vala @@ -67,8 +67,13 @@ namespace Scratch.FolderManager { return _icon; } - _icon = GLib.ContentType.get_icon (info.get_content_type ()); - return _icon; + if (info != null) { + _icon = GLib.ContentType.get_icon (info.get_content_type ()); + return _icon; + } else { + _icon = new ThemedIcon ("missing-image"); + return _icon; + } } } From 25bcf8030b92c0fe93778038b2f8d0dc738a5dbb Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Mon, 25 Nov 2024 19:33:32 +0000 Subject: [PATCH 3/6] Simplify is_valid_directory and is_valid_textfile --- src/FolderManager/File.vala | 40 +++++++++++++++---------------- src/FolderManager/FileView.vala | 2 +- src/FolderManager/FolderItem.vala | 19 +++++++-------- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/FolderManager/File.vala b/src/FolderManager/File.vala index 3bf6100880..89bf856805 100644 --- a/src/FolderManager/File.vala +++ b/src/FolderManager/File.vala @@ -83,31 +83,29 @@ namespace Scratch.FolderManager { } // Checks if we're dealing with a non-backup directory - // Hidden subfolders are not shown by default, but we need to allow hidden top-level folder - public bool is_valid_directory (bool allow_hidden = true) { - if ((!allow_hidden && name.has_prefix (".")) || // If parent is hidden then inherit validity from parent - info.get_is_backup ()) { - - return false; - } + // If parent is hidden then inherit validity from parent + private bool? _is_valid_directory = null; + public bool is_valid_directory { + get { + if (_is_valid_directory == null) { + _is_valid_directory = info != null && + !info.get_is_backup () && + info.get_file_type () == FileType.DIRECTORY; + } - if (info.get_file_type () == FileType.DIRECTORY) { - return true; + return _is_valid_directory; } - - return false; } - public bool is_temporary { - get { - return path.has_suffix ("~"); - } - } - // checks if we're dealing with a textfile + private bool? _is_valid_textfile = null; public bool is_valid_textfile { get { - return Utils.check_if_valid_text_file (path, info); + if (_is_valid_textfile == null) { + _is_valid_textfile = !path.has_suffix ("~") && Utils.check_if_valid_text_file (path, info); + } + + return _is_valid_textfile; } } @@ -143,7 +141,7 @@ namespace Scratch.FolderManager { while ((file_info = enumerator.next_file ()) != null) { var child = file.get_child (file_info.get_name ()); var child_file = new File (child.get_path ()); - if (child_file.is_valid_directory () || child_file.is_valid_textfile) { + if (child_file.is_valid_directory || child_file.is_valid_textfile) { _children.add (child_file); } } @@ -200,10 +198,10 @@ namespace Scratch.FolderManager { } public static int compare (File a, File b) { - if (a.is_valid_directory () && b.is_valid_textfile) { + if (a.is_valid_directory && b.is_valid_textfile) { return -1; } - if (a.is_valid_textfile && b.is_valid_directory ()) { + if (a.is_valid_textfile && b.is_valid_directory) { return 1; } diff --git a/src/FolderManager/FileView.vala b/src/FolderManager/FileView.vala index c9efd85bbf..19572a9e11 100644 --- a/src/FolderManager/FileView.vala +++ b/src/FolderManager/FileView.vala @@ -509,7 +509,7 @@ public class Scratch.FolderManager.FileView : Code.Widgets.SourceList, Code.Pane if (is_open (folder)) { warning ("Folder '%s' is already open.", folder.path); return; - } else if (!folder.is_valid_directory (true)) { // Allow hidden top-level folders + } else if (!folder.is_valid_directory) { warning ("Cannot open invalid directory."); return; } diff --git a/src/FolderManager/FolderItem.vala b/src/FolderManager/FolderItem.vala index 33f8e130de..aa2937a7a9 100644 --- a/src/FolderManager/FolderItem.vala +++ b/src/FolderManager/FolderItem.vala @@ -29,7 +29,7 @@ namespace Scratch.FolderManager { private bool has_dummy; private Code.Widgets.SourceList.Item dummy; /* Blank item for expanded empty folders */ - public FolderItem (File file, FileView view) requires (file.is_valid_directory) { + public FolderItem (File file, FileView view) { Object (file: file, view: view); } @@ -63,16 +63,14 @@ namespace Scratch.FolderManager { file.children.size > 0) { foreach (var child in file.children) { - Code.Widgets.SourceList.Item item = null; - if (child.is_valid_directory ()) { + Code.Widgets.SourceList.Item? item = null; + if (child.is_valid_directory) { item = new FolderItem (child, view); } else if (child.is_valid_textfile) { item = new FileItem (child, view); } - if (item != null) { - add (item); - } + add (item); // ignores null parameter } children_loaded = true; @@ -304,15 +302,14 @@ namespace Scratch.FolderManager { var path_item = find_item_for_path (source.get_path ()); if (path_item == null) { var file = new File (source.get_path ()); - if (file.is_valid_directory ()) { + if (file.is_valid_directory) { path_item = new FolderItem (file, view); - } else if (!file.is_temporary) { + + } else if (file.is_valid_textfile) { path_item = new FileItem (file, view); - } else { - break; } - add (path_item); + add (path_item); // null parameter is silently ignored } break; From 295e0ece936e7b684489e896e4443ed13967e6ab Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Thu, 6 Mar 2025 14:09:05 +0000 Subject: [PATCH 4/6] Fix indentation --- src/FolderManager/File.vala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/FolderManager/File.vala b/src/FolderManager/File.vala index 89bf856805..6a08a5aef8 100644 --- a/src/FolderManager/File.vala +++ b/src/FolderManager/File.vala @@ -88,9 +88,9 @@ namespace Scratch.FolderManager { public bool is_valid_directory { get { if (_is_valid_directory == null) { - _is_valid_directory = info != null && - !info.get_is_backup () && - info.get_file_type () == FileType.DIRECTORY; + _is_valid_directory = info != null && + !info.get_is_backup () && + info.get_file_type () == FileType.DIRECTORY; } return _is_valid_directory; From 2eed98b4bcfc5e8093a1484fa64aad2e574b2882 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Thu, 6 Mar 2025 14:10:20 +0000 Subject: [PATCH 5/6] Remove extraneous blank line --- src/FolderManager/FolderItem.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/FolderManager/FolderItem.vala b/src/FolderManager/FolderItem.vala index aa2937a7a9..c4e6d5a84a 100644 --- a/src/FolderManager/FolderItem.vala +++ b/src/FolderManager/FolderItem.vala @@ -304,7 +304,6 @@ namespace Scratch.FolderManager { var file = new File (source.get_path ()); if (file.is_valid_directory) { path_item = new FolderItem (file, view); - } else if (file.is_valid_textfile) { path_item = new FileItem (file, view); } From 9fe7b4b6f1e6f4c442cf05e13abf6827dfeff678 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Mon, 17 Mar 2025 12:12:20 +0000 Subject: [PATCH 6/6] src/FolderManager/File.vala DRY return _icon Co-authored-by: Ryo Nakano --- src/FolderManager/File.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FolderManager/File.vala b/src/FolderManager/File.vala index 6a08a5aef8..46eac16261 100644 --- a/src/FolderManager/File.vala +++ b/src/FolderManager/File.vala @@ -69,11 +69,11 @@ namespace Scratch.FolderManager { if (info != null) { _icon = GLib.ContentType.get_icon (info.get_content_type ()); - return _icon; } else { _icon = new ThemedIcon ("missing-image"); - return _icon; } + + return _icon; } }