@@ -58,8 +58,11 @@ pub fn (mut app App) handle_add_repo_issue(mut ctx Context, username string, rep
5858 return ctx.redirect ('/${username }/${repo_name }/issues/new' )
5959 }
6060 app.increment_user_post (mut ctx.user) or { app.info (err.str ()) }
61- app.add_issue (repo.id, ctx.user.id, title, text) or { app.info (err.str ()) }
62- app.increment_repo_issues (repo.id) or { app.info (err.str ()) }
61+ app.add_issue (repo.id, ctx.user.id, title, text) or {
62+ app.info (err.str ())
63+ return ctx.redirect ('/${username }/${repo_name }/issues/new' )
64+ }
65+ app.sync_repo_open_issue_count (repo.id) or { app.info (err.str ()) }
6366 app.dispatch_webhook (repo.id, 'issue' , WebhookIssuePayload{
6467 action: 'opened'
6568 repo: '${username }/${repo_name }'
@@ -80,16 +83,33 @@ pub fn (mut app App) handle_get_repo_issues(mut ctx Context, username string, re
8083
8184@['/:username/:repo_name/issues/:page' ]
8285pub fn (mut app App) issues (mut ctx Context, username string , repo_name string , page string ) veb.Result {
83- repo := app.find_repo_by_name_and_username (repo_name, username) or { return ctx.not_found () }
84- page_i := page.int ()
86+ mut repo := app.find_repo_by_name_and_username (repo_name, username) or {
87+ return ctx.not_found ()
88+ }
89+ mut page_i := page.int ()
90+ if page_i < 0 {
91+ page_i = 0
92+ }
93+ issue_count := app.get_repo_issue_count (repo.id)
94+ if repo.nr_open_issues != issue_count {
95+ app.sync_repo_open_issue_count (repo.id) or { app.info (err.str ()) }
96+ repo.nr_open_issues = issue_count
97+ }
98+ page_count := calculate_pages (issue_count, commits_per_page)
99+ if page_i > page_count {
100+ if page_count == 0 {
101+ return ctx.redirect ('/${repo .user_name }/${repo .name }/issues' )
102+ }
103+ return ctx.redirect ('/${repo .user_name }/${repo .name }/issues/${page_count }' )
104+ }
85105 mut issues_with_users := []IssueWithUser{}
86106 mut issue := Issue{}
87107 mut user := User{}
88108 repo_issues := app.find_repo_issues_as_page (repo.id, page_i)
89109 mut i := 0
90110 for i = 0 ; i < repo_issues.len; i++ {
91111 issue = repo_issues[i]
92- user = app.get_user_by_id (issue.author_id) or { continue }
112+ user = app.get_user_by_id (issue.author_id) or { placeholder_user (issue.author_id) }
93113 issue.labels = app.get_issue_labels (issue.id)
94114 issue.repo_author = repo.user_name
95115 issue.repo_name = repo.name
@@ -99,23 +119,8 @@ pub fn (mut app App) issues(mut ctx Context, username string, repo_name string,
99119 }
100120 }
101121 show_repo_link := false
102- mut first := false
103- mut last := false
104- if repo.nr_open_issues > commits_per_page {
105- offset := page_i * commits_per_page
106- delta := repo.nr_open_issues - offset
107- if delta > 0 {
108- if delta == repo.nr_open_issues && page_i == 0 {
109- first = true
110- } else {
111- last = true
112- }
113- }
114- } else {
115- last = true
116- first = true
117- }
118- page_count := calculate_pages (repo.nr_open_issues, commits_per_page)
122+ first := page_i == 0
123+ last := page_i > = page_count
119124 prev_page , next_page := generate_prev_next_pages (page_i)
120125 ctx.set_page_title (['Issues' , '${repo .user_name }/${repo .name }' ])
121126 return $veb.html ()
@@ -125,7 +130,10 @@ pub fn (mut app App) issues(mut ctx Context, username string, repo_name string,
125130pub fn (mut app App) issue (mut ctx Context, username string , repo_name string , id string ) veb.Result {
126131 repo := app.find_repo_by_name_and_username (repo_name, username) or { return ctx.not_found () }
127132 issue := app.find_issue_by_id (id.int ()) or { return ctx.not_found () }
128- issue_author := app.get_user_by_id (issue.author_id) or { return ctx.not_found () }
133+ if issue.repo_id != repo.id || issue.is_pr {
134+ return ctx.not_found ()
135+ }
136+ issue_author := app.get_user_by_id (issue.author_id) or { placeholder_user (issue.author_id) }
129137 ctx.set_page_title (['${issue .title } #${issue .id }' , '${repo .user_name }/${repo .name }' ])
130138 mut comments_with_users := []CommentWithUser{}
131139 mut comment := Comment{}
@@ -134,7 +142,9 @@ pub fn (mut app App) issue(mut ctx Context, username string, repo_name string, i
134142 mut i := 0
135143 for i = 0 ; i < issue_comments.len; i++ {
136144 comment = issue_comments[i]
137- comment_author = app.get_user_by_id (comment.author_id) or { continue }
145+ comment_author = app.get_user_by_id (comment.author_id) or {
146+ placeholder_user (comment.author_id)
147+ }
138148 comments_with_users << CommentWithUser{
139149 item: comment
140150 user: comment_author
@@ -176,7 +186,7 @@ pub fn (mut app App) user_issues(mut ctx Context, username string, tab string) v
176186 }
177187 mut issues_with_users := []IssueWithUser{}
178188 for issue in issues {
179- issue_author := app.get_user_by_id (issue.author_id) or { continue }
189+ issue_author := app.get_user_by_id (issue.author_id) or { placeholder_user (issue.author_id) }
180190 issues_with_users << IssueWithUser{
181191 item: issue
182192 user: issue_author
0 commit comments