From 8de93c50d2cf2144cfd3050cf7970a4ee9860bf4 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 3 Dec 2019 19:48:28 +0100 Subject: Add basic pagination to message list References: https://todo.sr.ht/~sircmpwn/koushin/22 --- server.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'server.go') diff --git a/server.go b/server.go index bcdcfcc..93da487 100644 --- a/server.go +++ b/server.go @@ -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, }) }) -- cgit v1.2.3