Add button to delete message

Maybe we should add a confirmation step in the future.

References: https://todo.sr.ht/~sircmpwn/koushin/36
This commit is contained in:
Simon Ser 2019-12-16 17:45:20 +01:00
parent 1841609fbc
commit a425e17b0e
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
3 changed files with 47 additions and 0 deletions

View file

@ -338,3 +338,44 @@ func handleMove(ectx echo.Context) error {
return ctx.Redirect(http.StatusFound, fmt.Sprintf("/mailbox/%v", to))
}
func handleDelete(ectx echo.Context) error {
ctx := ectx.(*koushin.Context)
mboxName, uid, err := parseMboxAndUid(ctx.Param("mbox"), ctx.Param("uid"))
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err)
}
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
if err := ensureMailboxSelected(c, mboxName); err != nil {
return err
}
var seqSet imap.SeqSet
seqSet.AddNum(uid)
item := imap.FormatFlagsOp(imap.AddFlags, true)
flags := []interface{}{imap.DeletedFlag}
if err := c.UidStore(&seqSet, item, flags, nil); err != nil {
return fmt.Errorf("failed to add deleted flag: %v", err)
}
if err := c.Expunge(nil); err != nil {
return fmt.Errorf("failed to expunge mailbox: %v", err)
}
// Deleting a message invalidates our cached message count
// TODO: listen to async updates instead
if _, err := c.Select(mboxName, false); err != nil {
return fmt.Errorf("failed to select mailbox: %v", err)
}
return nil
})
if err != nil {
return err
}
return ctx.Redirect(http.StatusFound, fmt.Sprintf("/mailbox/%v", mboxName))
}

View file

@ -47,5 +47,7 @@ func init() {
p.POST("/message/:mbox/:uid/move", handleMove)
p.POST("/message/:mbox/:uid/delete", handleDelete)
koushin.RegisterPlugin(p.Plugin())
}

View file

@ -26,6 +26,10 @@
<input type="submit" value="Move">
</form>
<form method="post" action="{{.Message.Uid}}/delete">
<input type="submit" value="Delete">
</form>
{{define "message-part-tree"}}
{{/* nested templates can't access the parent's context */}}
{{$ = index . 0}}