╭ changed ────╮ │src/event.zig│ ╰─────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1225 const record_maybe: ?Discussion.Record = if (event_maybe) |event| .{ │ │1226 .event = event, │ │1227 .author_email = authorEmail(commit_object.content.commit.metadata.author orelse ""),│ │1228 + .created_timestamp = commit_object.content.commit.metadata.timestamp, │ │1229 .created_order = event_order, │ │1230 .updated_order = event_order, │ │1231 } else null; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1235 const record_maybe: ?Issue.Record = if (event_maybe) |event| .{ │ │1236 .event = event, │ │1237 .author_email = authorEmail(commit_object.content.commit.metadata.author orelse ""),│ │1238 + .created_timestamp = commit_object.content.commit.metadata.timestamp, │ │1239 .created_order = event_order, │ │1240 .updated_order = event_order, │ │1241 } else null; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1318 const record_maybe: ?Patch.Record = if (event_maybe) |event| .{ │ │1319 .event = event, │ │1320 .author_email = authorEmail(commit_object.content.commit.metadata.author orelse ""),│ │1321 + .created_timestamp = commit_object.content.commit.metadata.timestamp, │ │1322 .created_order = event_order, │ │1323 .updated_order = event_order, │ │1324 } else null; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ───────────────╮ │src/event/Discussion.zig│ ╰────────────────────────╯ ╭─────────────────────────────────────────╮ │13 event: Self, │ │14 removed: bool = false, │ │15 author_email: ?[]const u8 = null,│ │16 + created_timestamp: u64 = 0, │ │17 created_order: u64 = 0, │ │18 updated_order: u64 = 0, │ │19 }; │ ╰─────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────╮ │66 if (existing_record_maybe) |existing| { │ │67 record_to_write.created_order = existing.created_order; │ │68 record_to_write.author_email = existing.author_email; │ │69 + record_to_write.created_timestamp = existing.created_timestamp;│ │70 } │ │71 │ │72 const activity_order = if (existing_record_maybe != null) │ ╰───────────────────────────────────────────────────────────────────────────╯ ╭ changed ──────────╮ │src/event/Issue.zig│ ╰───────────────────╯ ╭─────────────────────────────────────────╮ │16 event: Self, │ │17 removed: bool = false, │ │18 author_email: ?[]const u8 = null,│ │19 + created_timestamp: u64 = 0, │ │20 created_order: u64 = 0, │ │21 updated_order: u64 = 0, │ │22 }; │ ╰─────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────╮ │111 // updates preserve the original creation order and author │ │112 record_to_write.created_order = existing_record.created_order; │ │113 record_to_write.author_email = existing_record.author_email; │ │114 + record_to_write.created_timestamp = existing_record.created_timestamp; │ │115 │ │116 // drop the old status's and labels' entries; active values are re-added below│ │117 const order_key = evt.orderKeyDesc(existing_record.created_order, event_id); │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──────────╮ │src/event/Patch.zig│ ╰───────────────────╯ ╭─────────────────────────────────────────╮ │44 event: Self, │ │45 removed: bool = false, │ │46 author_email: ?[]const u8 = null,│ │47 + created_timestamp: u64 = 0, │ │48 created_order: u64 = 0, │ │49 updated_order: u64 = 0, │ │50 }; │ ╰─────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │172 if (!evt.fieldEqual(?[]const u8, existing.event.source_branch, record.event.source_branch)) return error.PatchSourceChanged; │ │173 record.created_order = existing.created_order; │ │174 record.author_email = existing.author_email; │ │175 + record.created_timestamp = existing.created_timestamp; │ │176 const existing_status_kind = existing.event.status.kind(); │ │177 if (existing_status_kind == .merged and !evt.fieldEqual(Status, existing.event.status, record.event.status)) return error.PatchAlreadyMerged; │ │178 if (existing_status_kind == .merged and !std.mem.eql(u8, existing.event.target_branch, record.event.target_branch)) return error.PatchAlreadyMerged;│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ───────────────╮ │src/ui/widget/thread.zig│ ╰────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │920 try inner_box.children.put(allocator, title.getFocus().id, .{ .widget = .{ .text_box = title }, .rect = null, .min_size = null }); │ │921 self.title_id = title.getFocus().id; │ │922 │ │923 - var author = try ui.authorBox(allocator, self.session.page_arena, entry.author); │ │924 - errdefer author.deinit(allocator); │ │925 - try inner_box.children.put(allocator, author.getFocus().id, .{ .widget = .{ .text_box = author }, .rect = null, .min_size = null }); │ │926 - self.author_id = author.getFocus().id; │ │923 + { │ │924 + var row = try wgt.Box(Widget).init(allocator, .{ .border = null, .direction = .horiz }); │ │925 + errdefer row.deinit(allocator); │ │926 + var author = try ui.authorBox(allocator, self.session.page_arena, entry.author); │ │927 + errdefer author.deinit(allocator); │ │928 + try row.children.put(allocator, author.getFocus().id, .{ .widget = .{ .text_box = author }, .rect = null, .min_size = null }); │ │929 + const timestamp = try ui.Repo.Undo.formatTimestamp(self.session.page_arena.allocator(), std.math.cast(i64, entry.record.created_timestamp) orelse -1);│ │930 + var time = try wgt.TextBox.init(allocator, timestamp, .{ .border = .single, .round_corners = true, .wrap_kind = .none }); │ │931 + errdefer time.deinit(allocator); │ │932 + time.getFocus().mode = .all; │ │933 + try row.children.put(allocator, time.getFocus().id, .{ .widget = .{ .text_box = time }, .rect = null, .min_size = null }); │ │934 + row.getFocus().child_id = author.getFocus().id; │ │935 + self.author_id = row.getFocus().id; │ │936 + try inner_box.children.put(allocator, row.getFocus().id, .{ .widget = .{ .box = row }, .rect = null, .min_size = null }); │ │937 + } │ │938 │ │939 var items: std.ArrayList(WordFlow.Item) = .empty; │ │940 defer items.deinit(allocator); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯