aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-03-18 21:10:40 +0100
committerSimon Ser <contact@emersion.fr>2020-03-18 21:10:40 +0100
commitfe73f2022c89ab7e32644668a3499698dd2f8368 (patch)
treec6ecd8f53cdd7045c1ed87574604961e8a677936 /plugins
parentfeb8c7ac80c49744957da9f8a0c9d666c7116bbc (diff)
downloadalps-fe73f2022c89ab7e32644668a3499698dd2f8368.tar.gz
alps-fe73f2022c89ab7e32644668a3499698dd2f8368.zip
plugins/base: add action param to handleSetFlags
This alows to add/remove flags instead of setting them.
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/base/imap.go1
-rw-r--r--plugins/base/routes.go18
2 files changed, 17 insertions, 2 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index dd78e3f..ffa172f 100755
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -450,7 +450,6 @@ func getMessagePart(conn *imapclient.Client, mboxName string, uid uint32, partPa
partHeaderSection.Path = partPath
var partBodySection imap.BodySectionName
- partBodySection.Peek = true
if len(partPath) > 0 {
partBodySection.Specifier = imap.EntireSpecifier
} else {
diff --git a/plugins/base/routes.go b/plugins/base/routes.go
index c24d3bb..0237634 100644
--- a/plugins/base/routes.go
+++ b/plugins/base/routes.go
@@ -738,6 +738,18 @@ func handleSetFlags(ctx *koushin.Context) error {
return echo.NewHTTPError(http.StatusBadRequest, "missing 'flags' form values")
}
+ var op imap.FlagsOp
+ switch ctx.FormValue("action") {
+ case "", "set":
+ op = imap.SetFlags
+ case "add":
+ op = imap.AddFlags
+ case "remove":
+ op = imap.RemoveFlags
+ default:
+ return echo.NewHTTPError(http.StatusBadRequest, "invalid 'action' value")
+ }
+
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
if err := ensureMailboxSelected(c, mboxName); err != nil {
return err
@@ -751,7 +763,7 @@ func handleSetFlags(ctx *koushin.Context) error {
storeItems[i] = f
}
- item := imap.FormatFlagsOp(imap.SetFlags, true)
+ item := imap.FormatFlagsOp(op, true)
if err := c.UidStore(&seqSet, item, storeItems, nil); err != nil {
return fmt.Errorf("failed to add deleted flag: %v", err)
}
@@ -762,6 +774,10 @@ func handleSetFlags(ctx *koushin.Context) error {
return err
}
+ if op == imap.RemoveFlags && len(flags) == 1 && flags[0] == "\\Seen" {
+ // Redirecting to the message view would mark the message as read again
+ return ctx.Redirect(http.StatusFound, fmt.Sprintf("/mailbox/%v", url.PathEscape(mboxName)))
+ }
return ctx.Redirect(http.StatusFound, fmt.Sprintf("/message/%v/%v", url.PathEscape(mboxName), uid))
}