66 "io"
77 "log"
88 "net/http"
9+ "net/url"
10+ "strconv"
911 "text/template"
1012 "time"
1113
3032
3133 // Content is the data to render.
3234 Content any
35+
36+ // Page is the page number.
37+ Page int
3338 }
3439
3540 // handleFunc is an HTTP handle func that returns an error.
@@ -64,7 +69,13 @@ func handle(hf handleFunc) http.HandlerFunc {
6469
6570// Running renders the running tasks.
6671func (h * Handler ) Running (w http.ResponseWriter , req * http.Request ) error {
67- tasks , err := task .GetTasks (req .Context (), h .db , selectRunningTasks , itemLimit )
72+ tasks , err := task .GetTasks (
73+ req .Context (),
74+ h .db ,
75+ selectRunningTasks ,
76+ itemLimit ,
77+ getOffset (req .URL ),
78+ )
6879 if err != nil {
6980 return err
7081 }
@@ -74,8 +85,13 @@ func (h *Handler) Running(w http.ResponseWriter, req *http.Request) error {
7485
7586// Upcoming renders the upcoming tasks.
7687func (h * Handler ) Upcoming (w http.ResponseWriter , req * http.Request ) error {
77- // TODO use actual time from the client
78- tasks , err := task .GetScheduledTasks (req .Context (), h .db , time .Now ().Add (- time .Hour ), itemLimit )
88+ tasks , err := task .GetScheduledTasksWithOffset (
89+ req .Context (),
90+ h .db ,
91+ time .Now ().Add (- time .Hour ), // TODO use actual time from the client
92+ itemLimit ,
93+ getOffset (req .URL ),
94+ )
7995 if err != nil {
8096 return err
8197 }
@@ -85,7 +101,14 @@ func (h *Handler) Upcoming(w http.ResponseWriter, req *http.Request) error {
85101
86102// Succeeded renders the completed tasks that have succeeded.
87103func (h * Handler ) Succeeded (w http.ResponseWriter , req * http.Request ) error {
88- tasks , err := task .GetCompletedTasks (req .Context (), h .db , selectCompletedTasks , 1 , itemLimit )
104+ tasks , err := task .GetCompletedTasks (
105+ req .Context (),
106+ h .db ,
107+ selectCompletedTasks ,
108+ 1 ,
109+ itemLimit ,
110+ getOffset (req .URL ),
111+ )
89112 if err != nil {
90113 return err
91114 }
@@ -95,7 +118,14 @@ func (h *Handler) Succeeded(w http.ResponseWriter, req *http.Request) error {
95118
96119// Failed renders the completed tasks that have failed.
97120func (h * Handler ) Failed (w http.ResponseWriter , req * http.Request ) error {
98- tasks , err := task .GetCompletedTasks (req .Context (), h .db , selectCompletedTasks , 0 , itemLimit )
121+ tasks , err := task .GetCompletedTasks (
122+ req .Context (),
123+ h .db ,
124+ selectCompletedTasks ,
125+ 0 ,
126+ itemLimit ,
127+ getOffset (req .URL ),
128+ )
99129 if err != nil {
100130 return err
101131 }
@@ -139,5 +169,21 @@ func (h *Handler) render(req *http.Request, w io.Writer, tmpl *template.Template
139169 return tmpl .ExecuteTemplate (w , "layout.gohtml" , templateData {
140170 Path : req .URL .Path ,
141171 Content : data ,
172+ Page : getPage (req .URL ),
142173 })
143174}
175+
176+ func getPage (u * url.URL ) int {
177+ if p := u .Query ().Get ("page" ); p != "" {
178+ if page , err := strconv .Atoi (p ); err == nil {
179+ if page > 0 {
180+ return page
181+ }
182+ }
183+ }
184+ return 1
185+ }
186+
187+ func getOffset (u * url.URL ) int {
188+ return (getPage (u ) - 1 ) * itemLimit
189+ }
0 commit comments