Changes
2 changed files (+6/-73)
-
-
@@ -104,7 +104,12 @@ pub fn run(args: *std.process.Args.Iterator, gpa: std.mem.Allocator, io: std.Io,std.log.err("ID is not UUID: {t}", .{err}); printUsage(io, std.Io.File.stderr()) catch return Error.WriteToStderrFailed; return errors.CommandLineError.InvalidUsage; }) else try timer.getLatest(gpa, io, &iter); }) else result: { var timer_iter: timer.TimerIterator = .{ .events_iter = &iter }; defer timer_iter.deinit(gpa); break :result try timer_iter.next(gpa, io); }; const found = result orelse { std.log.err("Timer not found.", .{});
-
-
-
@@ -739,75 +739,3 @@ pub const TimerIterator = struct {return null; } }; /// Returns the most recent updated timer. /// /// Returns `null` if there is no timers, or the most recent event does not have /// corresponding "started" event, which means history is fucked up. /// /// Caller is responsible for calling `deinit` on the returned struct after use. pub fn getLatest(gpa: std.mem.Allocator, io: std.Io, iterator: *events.Iterator) FindError!?Timer { var deleted_timer_ids = std.ArrayList(uuid.Uuid).empty; defer deleted_timer_ids.deinit(gpa); var id: ?uuid.Uuid = null; var stopped_at: ?i64 = null; var latest_title: ?[]const u8 = null; errdefer if (latest_title) |str| gpa.free(str); while (try iterator.next(gpa, io)) |event| { defer event.deinit(gpa); switch (event) { .timer_deleted => |deleted| { try deleted_timer_ids.append(gpa, deleted.timer_id); }, .timer_started => |started| { if (id == null or id == started.timer_id) { const title = latest_title orelse try gpa.dupe(u8, started.title); if (stopped_at) |s| { return .{ .stopped = .{ .id = started.timer_id, .title = title, .started_at = started.created_at, .stopped_at = s, }, }; } else { return .{ .running = .{ .id = started.timer_id, .title = title, .started_at = started.created_at, }, }; } } }, .timer_stopped => |stopped| { if (id == null) { id = stopped.timer_id; } if (stopped.timer_id == id) { stopped_at = stopped.created_at; id = stopped.timer_id; } }, .timer_title_changed => |changed| { if (id == null) { id = changed.timer_id; } if (changed.timer_id == id and latest_title == null) { latest_title = try gpa.dupe(u8, changed.new_title); } }, } } return null; }
-