diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-19 09:15:49 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-19 09:15:49 +0100 |
| commit | 4c06eb64cbed3562e428ce59857d1763098638f3 (patch) | |
| tree | cc9c8164e76cd48e1dd4ef963329dcfa3c1b152f /src/storage/user.zig | |
| parent | 6201307fecf8398a1b53bf276bc08bfbb3524899 (diff) | |
allow images to upload and sort if according to their datetime
Diffstat (limited to 'src/storage/user.zig')
| -rw-r--r-- | src/storage/user.zig | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/storage/user.zig b/src/storage/user.zig index d5260fe..09f7716 100644 --- a/src/storage/user.zig +++ b/src/storage/user.zig @@ -1,6 +1,8 @@ const std = @import("std"); const Storage = @import("root.zig"); +const log = std.log.scoped(.user); + const Self = @This(); pub const Info = struct { @@ -157,8 +159,42 @@ pub fn deinit(self: *Self) void { pub fn exists(storage: *Storage, name: []const u8) bool { var user = storage.dir.openDir("user", .{}) catch return false; - defer user.deinit(); + defer user.close(); - user.access(name) catch return false; + user.access(name, .{}) catch return false; return true; } + +pub fn image(storage: *Storage, name: []const u8) ?std.fs.File { + var user = storage.dir.openDir("user", .{}) catch return null; + defer user.close(); + + var profile = user.openDir(name, .{}) catch return null; + defer profile.close(); + return profile.openFile("image.jpg", .{ .lock = .shared }) catch null; +} + +pub fn set_image( + storage: *Storage, + name: []const u8, + reader: *std.Io.Reader, + size: usize, +) !void { + var user = try storage.dir.openDir("user", .{}); + defer user.close(); + + var profile = try user.openDir(name, .{}); + defer profile.close(); + + var image_file = try profile.createFile("image.jpg", .{ .lock = .exclusive }); + defer image_file.close(); + + var buffer: [1024]u8 = undefined; + var file_writer = image_file.writer(&buffer); + + log.info("uploaded to profile {s} [{} bytes]", .{ name, size }); + + try reader.streamExact(&file_writer.interface, size); + + try file_writer.interface.flush(); +} |