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:
parent
1841609fbc
commit
a425e17b0e
3 changed files with 47 additions and 0 deletions
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -47,5 +47,7 @@ func init() {
|
|||
|
||||
p.POST("/message/:mbox/:uid/move", handleMove)
|
||||
|
||||
p.POST("/message/:mbox/:uid/delete", handleDelete)
|
||||
|
||||
koushin.RegisterPlugin(p.Plugin())
|
||||
}
|
||||
|
|
|
@ -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}}
|
||||
|
|
Loading…
Reference in a new issue