From efb92a00185963a763217d4bedce7a1591c6dc22 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 20 Nov 2025 06:56:43 +0100 Subject: image: implement removing --- src/storage/image-manager/image.zig | 11 +++++++++++ src/storage/image-manager/root.zig | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'src/storage') diff --git a/src/storage/image-manager/image.zig b/src/storage/image-manager/image.zig index b11b7b1..bdac5c7 100644 --- a/src/storage/image-manager/image.zig +++ b/src/storage/image-manager/image.zig @@ -56,6 +56,17 @@ pub fn new( return self; } +pub fn delete(self: *Self, storage: *Storage) !void { + var dir = try storage.dir.openDir("image", .{}); + defer dir.close(); + + var file_name: [id_size + 4]u8 = undefined; + @memcpy(file_name[0..id_size], self.id); + @memcpy(file_name[id_size..], ".jpg"); + + try dir.deleteFile(&file_name); +} + pub fn init(storage: *Storage, id: []const u8) !Self { return .{ .id = try storage.allocator.dupe(u8, id), diff --git a/src/storage/image-manager/root.zig b/src/storage/image-manager/root.zig index 4188b88..c99ac00 100644 --- a/src/storage/image-manager/root.zig +++ b/src/storage/image-manager/root.zig @@ -103,3 +103,37 @@ pub fn first_by_timestamp(self: *Self) memora.locked.Shared(?*Timestamp) { .rw_lock = &self.rw_lock, }; } + +pub fn delete(self: *Self, storage: *Storage, id: []const u8) !void { + self.rw_lock.lock(); + defer self.rw_lock.unlock(); + + const index = index: { + for (self.items.items, 0..) |image, index| { + if (std.mem.eql(u8, image.id, id)) { + break :index index; + } + } + break :index null; + }; + + if (index) |idx| { + try self.items.items[idx].delete(storage); + const old_index = self.items.items.len - 1; + _ = self.items.swapRemove(idx); + + var current: ?*Timestamp = if (self.timestamp_order.first) |c| @fieldParentPtr("node", c) else null; + + while (current) |c| { + if (c.index == idx) { + self.timestamp_order.remove(&c.node); + storage.allocator.destroy(c); + } else if (c.index == old_index) { + c.index = idx; + break; + } + + current = c.next(); + } + } +} -- cgit v1.2.3-70-g09d2