╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1165 try out.writer.print("{s}/issues/{s}", .{ prefix, @tagName(i.view) }); │ │1213 - try writeListFilters(&out.writer, i.label.slice(), i.assignee.slice(), i.search.slice()); │ │1166 + if (i.search.len != 0) try out.writer.print("/" ++ search_seg ++ "{s}", .{i.search.slice()});│ │1167 break :blk out.written(); │ │1168 }, │ │1169 .repo_patches => |p| blk: { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1195 try arena.allocator().print("{s}/" ++ patch_seg ++ "{s}/" ++ comment_seg ++ "{s}/" ++ start_seg ++ "{d}", .{ prefix, p.selected.slice(), p.comment.slice(), p.comments_start });│ │1196 var out: std.Io.Writer.Allocating = .init(arena.allocator()); │ │1197 // the list the thread is selected in stays filtered, so paging │ │1245 - // and reloading keep the label and the query │ │1198 + // and reloading keep the query │ │1199 if (p.selected.len != 0) { │ │1200 try out.writer.print("{s}/" ++ patch_seg ++ "{s}", .{ prefix, p.selected.slice() }); │ │1248 - try writeListFilters(&out.writer, p.label.slice(), "", p.search.slice()); │ │1201 + if (p.search.len != 0) try out.writer.print("/" ++ search_seg ++ "{s}", .{p.search.slice()}); │ │1202 if (p.comments_start != 0) try out.writer.print("/" ++ start_seg ++ "{d}", .{p.comments_start}); │ │1203 break :blk out.written(); │ │1204 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1205 try out.writer.print("{s}/patches/{s}", .{ prefix, @tagName(p.view) }); │ │1253 - try writeListFilters(&out.writer, p.label.slice(), "", p.search.slice()); │ │1206 + if (p.search.len != 0) try out.writer.print("/" ++ search_seg ++ "{s}", .{p.search.slice()});│ │1207 break :blk out.written(); │ │1208 }, │ │1209 .repo_discussions => |t| blk: { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1225 try arena.allocator().print("{s}/" ++ discuss_seg ++ "{s}/" ++ comment_seg ++ "{s}/" ++ start_seg ++ "{d}", .{ prefix, t.selected.slice(), t.comment.slice(), t.comments_start });│ │1226 var out: std.Io.Writer.Allocating = .init(arena.allocator()); │ │1227 // the list the thread is selected in stays filtered, so paging │ │1275 - // and reloading keep the label and the query │ │1228 + // and reloading keep the query │ │1229 if (t.selected.len != 0) { │ │1230 try out.writer.print("{s}/" ++ discuss_seg ++ "{s}", .{ prefix, t.selected.slice() }); │ │1278 - try writeListFilters(&out.writer, t.label.slice(), "", t.search.slice()); │ │1231 + if (t.search.len != 0) try out.writer.print("/" ++ search_seg ++ "{s}", .{t.search.slice()}); │ │1232 if (t.comments_start != 0) try out.writer.print("/" ++ start_seg ++ "{d}", .{t.comments_start}); │ │1233 break :blk out.written(); │ │1234 } │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1235 try out.writer.print("{s}/discussions/{s}", .{ prefix, @tagName(t.view) }); │ │1283 - try writeListFilters(&out.writer, t.label.slice(), "", t.search.slice()); │ │1236 + if (t.search.len != 0) try out.writer.print("/" ++ search_seg ++ "{s}", .{t.search.slice()});│ │1237 break :blk out.written(); │ │1238 }, │ │1239 .repo_undo => |u| blk: { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1598 } │ │1599 return null; │ │1600 } │ │1648 - if (!params.only(&.{ .start, .label, .assignee, .search })) return null; │ │1649 - return withEncodedAssignee(withEncodedFilters(repoThreadCommentsRoute(.issue, pair, issue_id, params.start() orelse return null), params.values.get(.label) orelse "", params.values.get(.search) orelse ""), params.values.get(.assignee) orelse "");│ │1601 + if (!params.only(&.{ .start, .search })) return null; │ │1602 + return withEncodedSearch(repoThreadCommentsRoute(.issue, pair, issue_id, params.start() orelse return null), params.values.get(.search) orelse ""); │ │1603 } │ │1604 if (std.mem.startsWith(u8, tab, patch_seg)) { │ │1605 const patch_id = tab[patch_seg.len..]; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1635 } │ │1636 return null; │ │1637 } │ │1685 - if (!params.only(&.{ .start, .label, .search })) return null; │ │1686 - return withEncodedFilters(repoThreadCommentsRoute(.patch, pair, patch_id, params.start() orelse return null), params.values.get(.label) orelse "", params.values.get(.search) orelse "");│ │1638 + if (!params.only(&.{ .start, .search })) return null; │ │1639 + return withEncodedSearch(repoThreadCommentsRoute(.patch, pair, patch_id, params.start() orelse return null), params.values.get(.search) orelse ""); │ │1640 } │ │1641 if (std.mem.startsWith(u8, tab, discuss_seg)) { │ │1642 const discussion_id = tab[discuss_seg.len..]; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1666 if (std.mem.eql(u8, tail, "description")) return if (params.only(&.{})) repoThreadDescriptionRoute(.discuss, pair, discussion_id) else null; │ │1667 return null; │ │1668 } │ │1716 - if (!params.only(&.{ .start, .label, .search })) return null; │ │1717 - return withEncodedFilters(repoThreadCommentsRoute(.discuss, pair, discussion_id, params.start() orelse return null), params.values.get(.label) orelse "", params.values.get(.search) orelse "");│ │1669 + if (!params.only(&.{ .start, .search })) return null; │ │1670 + return withEncodedSearch(repoThreadCommentsRoute(.discuss, pair, discussion_id, params.start() orelse return null), params.values.get(.search) orelse ""); │ │1671 } │ │1672 if (std.mem.eql(u8, tab, "issues")) { │ │1673 // the word is a list view; a filter with neither is never emitted. │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1674 const word = params.scanTail(&segments) catch return null; │ │1722 - const label_value = params.values.get(.label) orelse ""; │ │1723 - const w = word orelse return if (params.only(&.{})) repoIssuesRoute(pair, .open, "", "") else null;│ │1675 + const w = word orelse return if (params.only(&.{})) repoIssuesRoute(pair, .open, "") else null; │ │1676 // the conflicts list windows by an issue id, not a number, so it │ │1677 // reads the start param raw │ │1678 if (std.mem.eql(u8, w, "conflicts")) { │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1679 if (!params.only(&.{.start})) return null; │ │1680 return repoIssuesConflictsRoute(pair, params.values.get(.start) orelse ""); │ │1681 } │ │1730 - if (!params.only(&.{ .label, .assignee, .search })) return null; │ │1682 + if (!params.only(&.{.search})) return null; │ │1683 const search_value = params.values.get(.search) orelse ""; │ │1732 - const assignee_value = params.values.get(.assignee) orelse ""; │ │1733 - if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return withEncodedAssignee(withEncodedSearch(repoIssuesRoute(pair, status, label_value, ""), search_value), assignee_value);│ │1734 - if (std.mem.eql(u8, w, "labels")) return withEncodedAssignee(withEncodedSearch(repoThreadLabelsRoute(.issue, pair, label_value), search_value), assignee_value); │ │1735 - if (std.mem.eql(u8, w, "new")) return if (label_value.len == 0 and assignee_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1684 + if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return withEncodedSearch(repoIssuesRoute(pair, status, ""), search_value); │ │1685 + if (std.mem.eql(u8, w, "labels")) return withEncodedSearch(repoThreadLabelsRoute(.issue, pair), search_value); │ │1686 + if (std.mem.eql(u8, w, "new")) return if (search_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1687 return null; │ │1688 } │ │1689 if (std.mem.eql(u8, tab, "patches")) { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯