diff options
author | Simon Ser <contact@emersion.fr> | 2019-12-03 19:48:28 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-12-03 19:49:04 +0100 |
commit | 8de93c50d2cf2144cfd3050cf7970a4ee9860bf4 (patch) | |
tree | bf161d7df1d4c73a7cdb2c2f365c5d0ca91f9b4c /server.go | |
parent | 6344806755202babab99564bee362d9e5e238185 (diff) | |
download | alps-8de93c50d2cf2144cfd3050cf7970a4ee9860bf4.tar.gz alps-8de93c50d2cf2144cfd3050cf7970a4ee9860bf4.zip |
Add basic pagination to message list
References: https://todo.sr.ht/~sircmpwn/koushin/22
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -6,6 +6,7 @@ import ( "mime" "net/http" "net/url" + "strconv" "strings" "time" @@ -18,6 +19,8 @@ import ( const cookieName = "koushin_session" +const messagesPerPage = 50 + type Server struct { imap struct { host string @@ -366,6 +369,14 @@ func New(imapURL, smtpURL string) *echo.Echo { return echo.NewHTTPError(http.StatusBadRequest, err) } + page := 0 + if pageStr := ctx.QueryParam("page"); pageStr != "" { + var err error + if page, err = strconv.Atoi(pageStr); err != nil || page < 0 { + return echo.NewHTTPError(http.StatusBadRequest, "invalid page index") + } + } + var mailboxes []*imap.MailboxInfo var msgs []imapMessage var mbox *imap.MailboxStatus @@ -374,7 +385,7 @@ func New(imapURL, smtpURL string) *echo.Echo { if mailboxes, err = listMailboxes(c); err != nil { return err } - if msgs, err = listMessages(c, mboxName); err != nil { + if msgs, err = listMessages(c, mboxName, page); err != nil { return err } mbox = c.Mailbox() @@ -384,10 +395,20 @@ func New(imapURL, smtpURL string) *echo.Echo { return err } + prevPage, nextPage := -1, -1 + if page > 0 { + prevPage = page - 1 + } + if (page+1)*messagesPerPage < int(mbox.Messages) { + nextPage = page + 1 + } + return ctx.Render(http.StatusOK, "mailbox.html", map[string]interface{}{ "Mailbox": mbox, "Mailboxes": mailboxes, "Messages": msgs, + "PrevPage": prevPage, + "NextPage": nextPage, }) }) |