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))
|
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/move", handleMove)
|
||||||
|
|
||||||
|
p.POST("/message/:mbox/:uid/delete", handleDelete)
|
||||||
|
|
||||||
koushin.RegisterPlugin(p.Plugin())
|
koushin.RegisterPlugin(p.Plugin())
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
<input type="submit" value="Move">
|
<input type="submit" value="Move">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<form method="post" action="{{.Message.Uid}}/delete">
|
||||||
|
<input type="submit" value="Delete">
|
||||||
|
</form>
|
||||||
|
|
||||||
{{define "message-part-tree"}}
|
{{define "message-part-tree"}}
|
||||||
{{/* nested templates can't access the parent's context */}}
|
{{/* nested templates can't access the parent's context */}}
|
||||||
{{$ = index . 0}}
|
{{$ = index . 0}}
|
||||||
|
|
Loading…
Reference in a new issue