From e4edc1bc0595dba6d7d1e3f4f08cbb6cebe9f960 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Tue, 1 Sep 2026 12:33:32 +0100 Subject: [PATCH] Use GLib.Once to manage singleton; reduce static members/methods --- plugins/FuzzySearch/FuzzySearchIndexer.vala | 4 +-- src/Services/GitManager.vala | 28 +++++++++------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/plugins/FuzzySearch/FuzzySearchIndexer.vala b/plugins/FuzzySearch/FuzzySearchIndexer.vala index bdc613033a..e835c153ec 100644 --- a/plugins/FuzzySearch/FuzzySearchIndexer.vala +++ b/plugins/FuzzySearch/FuzzySearchIndexer.vala @@ -252,7 +252,7 @@ public class Scratch.Services.FuzzySearchIndexer : GLib.Object { private async void add_project_async (ProjectUpdate message) { string path = message.source_path; - var monitor = Services.GitManager.get_monitored_repository (path); + var monitor = Services.GitManager.get_instance ().get_monitored_repository (path); var project_search = new Services.SearchProject (path, monitor); project_paths[path] = project_search; @@ -290,7 +290,7 @@ public class Scratch.Services.FuzzySearchIndexer : GLib.Object { Gee.HashMap project_paths) { for (int i = 0; i < request_queue.size; i++) { var request = request_queue[i]; - var monitor = Services.GitManager.get_monitored_repository (request.project_path); + var monitor = Services.GitManager.get_instance ().get_monitored_repository (request.project_path); var project_search = new Services.SearchProject (request.project_path, monitor); project_paths[request.project_path] = project_search; diff --git a/src/Services/GitManager.vala b/src/Services/GitManager.vala index 9827d65832..10dd8acf2a 100644 --- a/src/Services/GitManager.vala +++ b/src/Services/GitManager.vala @@ -23,33 +23,29 @@ namespace Scratch.Services { public ListStore project_liststore { get; private set; } public string active_project_path { get; set; default = "";} - static Gee.HashMap project_gitrepo_map; - static GitManager? instance; + private static Once instance; + private Gee.HashMap project_gitrepo_map; - static construct { - Ggit.init (); - instance = null; - project_gitrepo_map = new Gee.HashMap (); - } - public static MonitoredRepository? get_monitored_repository (string root_path) { - return project_gitrepo_map[root_path]; - } - public static GitManager get_instance () { - if (instance == null) { - instance = new GitManager (); - } - return instance; - } construct { // Used to populate the ChooseProject popover in sorted order + Ggit.init (); + project_gitrepo_map = new Gee.HashMap (); project_liststore = new ListStore (typeof (FolderManager.ProjectFolderItem)); settings.bind ("active-project-path", this, "active-project-path", DEFAULT); } + public static GitManager get_instance () { + return instance.once (() => new GitManager ()); + } + + public MonitoredRepository? get_monitored_repository (string root_path) { + return project_gitrepo_map[root_path]; + } + public MonitoredRepository? add_project (FolderManager.ProjectFolderItem root_folder) { var root_path = root_folder.path; MonitoredRepository? monitored_repo = null;