From 01d53bb07993651751df318022e2ddef2cade61d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 22 Mar 2024 20:59:36 +0100 Subject: [PATCH] feat: add recent files request to project manager --- src/project_manager.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/project_manager.zig b/src/project_manager.zig index 4d746a5..4beb7c6 100644 --- a/src/project_manager.zig +++ b/src/project_manager.zig @@ -103,6 +103,8 @@ const Process = struct { }); } else if (try m.match(.{ "open", tp.extract(&project_directory) })) { self.open(project_directory) catch |e| return from.send_raw(tp.exit_message(e)); + } else if (try m.match(.{ "request_recent_files", tp.extract(&project_directory) })) { + self.request_recent_files(from, project_directory) catch |e| return from.send_raw(tp.exit_message(e)); } else if (try m.match(.{"shutdown"})) { return tp.exit_normal(); } else if (try m.match(.{ "exit", "normal" })) { @@ -121,6 +123,11 @@ const Process = struct { try walk_tree_async(self.a, project_directory); } } + + fn request_recent_files(self: *Process, from: tp.pid_ref, project_directory: []const u8) error{ OutOfMemory, Exit }!void { + const project = if (self.projects.get(project_directory)) |p| p else return tp.exit("No project"); + return project.request_recent_files(from); + } }; const Project = struct { @@ -151,6 +158,13 @@ const Project = struct { if (self.files.get(path) != null) return; try self.files.put(try self.a.dupe(u8, path), {}); } + + fn request_recent_files(self: *Project, from: tp.pid_ref) error{ OutOfMemory, Exit }!void { + var i = self.files.iterator(); + while (i.next()) |file| { + try from.send(.{ "PRJ", "recent", file.key_ptr.* }); + } + } }; fn walk_tree_async(a_: std.mem.Allocator, root_path_: []const u8) tp.result {