aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go23
1 files changed, 22 insertions, 1 deletions
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,
})
})