Signed-off-by: dusk y.bera003.06@protonmail.com
ERROR
appview/db/issues.go
ERROR
appview/db/issues.go
Failed to calculate interdiff for this file.
REBASED
appview/issues/issues.go
REBASED
appview/issues/issues.go
This patch was likely rebased, as context lines do not match.
REBASED
appview/issues/router.go
REBASED
appview/issues/router.go
This patch was likely rebased, as context lines do not match.
ERROR
appview/middleware/middleware.go
ERROR
appview/middleware/middleware.go
Failed to calculate interdiff for this file.
ERROR
appview/pages/pages.go
ERROR
appview/pages/pages.go
Failed to calculate interdiff for this file.
ERROR
appview/pages/templates/repo/issues/issues.html
ERROR
appview/pages/templates/repo/issues/issues.html
Failed to calculate interdiff for this file.
REBASED
appview/pagination/page.go
REBASED
appview/pagination/page.go
This patch was likely rebased, as context lines do not match.
REBASED
appview/repo/feed.go
REBASED
appview/repo/feed.go
This patch was likely rebased, as context lines do not match.
NEW
appview/db/notifications.go
NEW
appview/db/notifications.go
···
68
limit ? offset ?
69
`, whereClause)
70
71
-
args = append(args, page.Limit, page.Offset)
72
73
rows, err := e.QueryContext(context.Background(), query, args...)
74
if err != nil {
···
142
limit ? offset ?
143
`, whereClause)
144
145
-
args = append(args, page.Limit, page.Offset)
146
147
rows, err := e.QueryContext(context.Background(), query, args...)
148
if err != nil {
···
247
248
// GetNotifications retrieves notifications with filters
249
func GetNotifications(e Execer, filters ...filter) ([]*models.Notification, error) {
250
-
return GetNotificationsPaginated(e, pagination.FirstPage(), filters...)
251
}
252
253
func CountNotifications(e Execer, filters ...filter) (int64, error) {
···
68
limit ? offset ?
69
`, whereClause)
70
71
+
args = append(args, page.Count, page.Count*page.No+1)
72
73
rows, err := e.QueryContext(context.Background(), query, args...)
74
if err != nil {
···
142
limit ? offset ?
143
`, whereClause)
144
145
+
args = append(args, page.Count, page.Count*page.No+1)
146
147
rows, err := e.QueryContext(context.Background(), query, args...)
148
if err != nil {
···
247
248
// GetNotifications retrieves notifications with filters
249
func GetNotifications(e Execer, filters ...filter) ([]*models.Notification, error) {
250
+
return GetNotificationsPaginated(e, pagination.Page{No: 0, Count: 30}, filters...)
251
}
252
253
func CountNotifications(e Execer, filters ...filter) (int64, error) {
NEW
appview/notifications/notifications.go
NEW
appview/notifications/notifications.go
···
34
35
r.Group(func(r chi.Router) {
36
r.Use(middleware.AuthMiddleware(n.oauth))
37
-
r.With(middleware.Paginate).Get("/", n.notificationsPage)
38
r.Post("/{id}/read", n.markRead)
39
r.Post("/read-all", n.markAllRead)
40
r.Delete("/{id}", n.deleteNotification)
···
49
page, ok := r.Context().Value("page").(pagination.Page)
50
if !ok {
51
log.Println("failed to get page")
52
-
page = pagination.FirstPage()
53
}
54
55
total, err := db.CountNotifications(
···
61
n.pages.Error500(w)
62
return
63
}
64
65
notifications, err := db.GetNotificationsWithEntities(
66
n.db,
···
84
LoggedInUser: user,
85
Notifications: notifications,
86
UnreadCount: unreadCount,
87
-
Page: page,
88
Total: total,
89
})
90
}
···
34
35
r.Group(func(r chi.Router) {
36
r.Use(middleware.AuthMiddleware(n.oauth))
37
+
r.With(middleware.Paginate(30)).Get("/", n.notificationsPage)
38
r.Post("/{id}/read", n.markRead)
39
r.Post("/read-all", n.markAllRead)
40
r.Delete("/{id}", n.deleteNotification)
···
49
page, ok := r.Context().Value("page").(pagination.Page)
50
if !ok {
51
log.Println("failed to get page")
52
+
page = pagination.Page{No: 0, Count: 30}
53
}
54
55
total, err := db.CountNotifications(
···
61
n.pages.Error500(w)
62
return
63
}
64
+
paginate := pagination.NewFromPage(page, int(total))
65
66
notifications, err := db.GetNotificationsWithEntities(
67
n.db,
···
85
LoggedInUser: user,
86
Notifications: notifications,
87
UnreadCount: unreadCount,
88
+
Pagination: paginate,
89
Total: total,
90
})
91
}
NEW
appview/pages/templates/goodfirstissues/index.html
NEW
appview/pages/templates/goodfirstissues/index.html
···
130
</div>
131
{{ end }}
132
133
-
{{ if or (gt .Page.Offset 0) (eq (len .RepoGroups) .Page.Limit) }}
134
<div class="flex justify-center mt-8">
135
<div class="flex gap-2">
136
-
{{ if gt .Page.Offset 0 }}
137
-
{{ $prev := .Page.Previous }}
138
<a
139
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
140
hx-boost="true"
141
-
href="/goodfirstissues?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}"
142
>
143
{{ i "chevron-left" "w-4 h-4" }}
144
previous
···
147
<div></div>
148
{{ end }}
149
150
-
{{ if eq (len .RepoGroups) .Page.Limit }}
151
-
{{ $next := .Page.Next }}
152
<a
153
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
154
hx-boost="true"
155
-
href="/goodfirstissues?offset={{ $next.Offset }}&limit={{ $next.Limit }}"
156
>
157
next
158
{{ i "chevron-right" "w-4 h-4" }}
···
130
</div>
131
{{ end }}
132
133
+
{{ if or .Pagination.HasPreviousPage .Pagination.HasNextPage }}
134
<div class="flex justify-center mt-8">
135
<div class="flex gap-2">
136
+
{{ if .Pagination.HasPreviousPage }}
137
+
{{ $prev := .Pagination.PreviousPage }}
138
<a
139
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
140
hx-boost="true"
141
+
href="/goodfirstissues?page={{ add $prev.No 1 }}&count={{ $prev.Count }}"
142
>
143
{{ i "chevron-left" "w-4 h-4" }}
144
previous
···
147
<div></div>
148
{{ end }}
149
150
+
{{ if .Pagination.HasNextPage }}
151
+
{{ $next := .Pagination.NextPage }}
152
<a
153
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
154
hx-boost="true"
155
+
href="/goodfirstissues?page={{ add $next.No 1 }}&count={{ $next.Count }}"
156
>
157
next
158
{{ i "chevron-right" "w-4 h-4" }}
NEW
appview/pages/templates/notifications/list.html
NEW
appview/pages/templates/notifications/list.html
···
35
36
{{ define "pagination" }}
37
<div class="flex justify-end mt-4 gap-2">
38
-
{{ if gt .Page.Offset 0 }}
39
-
{{ $prev := .Page.Previous }}
40
<a
41
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
42
hx-boost="true"
43
-
href = "/notifications?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}"
44
>
45
{{ i "chevron-left" "w-4 h-4" }}
46
previous
···
49
<div></div>
50
{{ end }}
51
52
-
{{ $next := .Page.Next }}
53
-
{{ if lt $next.Offset .Total }}
54
-
{{ $next := .Page.Next }}
55
<a
56
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
57
hx-boost="true"
58
-
href = "/notifications?offset={{ $next.Offset }}&limit={{ $next.Limit }}"
59
>
60
next
61
{{ i "chevron-right" "w-4 h-4" }}
···
35
36
{{ define "pagination" }}
37
<div class="flex justify-end mt-4 gap-2">
38
+
{{ if .Pagination.HasPreviousPage }}
39
+
{{ $prev := .Pagination.PreviousPage }}
40
<a
41
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
42
hx-boost="true"
43
+
href = "/notifications?page={{ add $prev.No 1 }}&count={{ $prev.Count }}"
44
>
45
{{ i "chevron-left" "w-4 h-4" }}
46
previous
···
49
<div></div>
50
{{ end }}
51
52
+
{{ if .Pagination.HasNextPage }}
53
+
{{ $next := .Pagination.NextPage }}
54
<a
55
class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
56
hx-boost="true"
57
+
href = "/notifications?page={{ add $next.No 1 }}&count={{ $next.Count }}"
58
>
59
next
60
{{ i "chevron-right" "w-4 h-4" }}
NEW
appview/state/gfi.go
NEW
appview/state/gfi.go
···
20
21
page, ok := r.Context().Value("page").(pagination.Page)
22
if !ok {
23
-
page = pagination.FirstPage()
24
}
25
26
goodFirstIssueLabel := fmt.Sprintf("at://%s/%s/%s", consts.TangledDid, tangled.LabelDefinitionNSID, "good-first-issue")
···
37
LoggedInUser: user,
38
RepoGroups: []*models.RepoGroup{},
39
LabelDefs: make(map[string]*models.LabelDefinition),
40
-
Page: page,
41
})
42
return
43
}
···
50
allIssues, err := db.GetIssuesPaginated(
51
s.db,
52
pagination.Page{
53
-
Limit: 500,
54
},
55
db.FilterIn("repo_at", repoUris),
56
db.FilterEq("open", 1),
···
61
return
62
}
63
64
var goodFirstIssues []models.Issue
65
for _, issue := range allIssues {
66
if issue.Labels.ContainsLabel(goodFirstIssueLabel) {
···
98
return sortedGroups[i].Repo.Name < sortedGroups[j].Repo.Name
99
})
100
101
-
groupStart := page.Offset
102
-
groupEnd := page.Offset + page.Limit
103
if groupStart > len(sortedGroups) {
104
groupStart = len(sortedGroups)
105
}
···
145
LoggedInUser: user,
146
RepoGroups: paginatedGroups,
147
LabelDefs: labelDefsMap,
148
-
Page: page,
149
GfiLabel: labelDefsMap[goodFirstIssueLabel],
150
})
151
}
···
20
21
page, ok := r.Context().Value("page").(pagination.Page)
22
if !ok {
23
+
page = pagination.Page{No: 0, Count: 30}
24
}
25
26
goodFirstIssueLabel := fmt.Sprintf("at://%s/%s/%s", consts.TangledDid, tangled.LabelDefinitionNSID, "good-first-issue")
···
37
LoggedInUser: user,
38
RepoGroups: []*models.RepoGroup{},
39
LabelDefs: make(map[string]*models.LabelDefinition),
40
+
Pagination: pagination.NewFromPage(page, 0),
41
})
42
return
43
}
···
50
allIssues, err := db.GetIssuesPaginated(
51
s.db,
52
pagination.Page{
53
+
No: 0,
54
+
Count: 500,
55
},
56
db.FilterIn("repo_at", repoUris),
57
db.FilterEq("open", 1),
···
62
return
63
}
64
65
+
pagination := pagination.NewFromPage(page, len(allIssues))
66
+
67
var goodFirstIssues []models.Issue
68
for _, issue := range allIssues {
69
if issue.Labels.ContainsLabel(goodFirstIssueLabel) {
···
101
return sortedGroups[i].Repo.Name < sortedGroups[j].Repo.Name
102
})
103
104
+
groupStart := page.Count * page.No
105
+
groupEnd := page.Count * (page.No + 1)
106
if groupStart > len(sortedGroups) {
107
groupStart = len(sortedGroups)
108
}
···
148
LoggedInUser: user,
149
RepoGroups: paginatedGroups,
150
LabelDefs: labelDefsMap,
151
+
Pagination: pagination,
152
GfiLabel: labelDefsMap[goodFirstIssueLabel],
153
})
154
}