aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2020-10-30 15:21:33 -0400
committerDrew DeVault <sir@cmpwn.com>2020-10-30 15:21:33 -0400
commite4daf0778dc4682405017a7cbdc593808257408f (patch)
tree84628d405bcdf696636a9902d83201387ade4fda
parent62e7cf89339ac585bdb72e78d90f0b468916436a (diff)
downloadalps-e4daf0778dc4682405017a7cbdc593808257408f.tar.gz
alps-e4daf0778dc4682405017a7cbdc593808257408f.zip
Implement mailbox deletion
-rw-r--r--plugins/base/routes.go22
-rw-r--r--themes/alps/assets/style.css10
-rw-r--r--themes/alps/delete-mailbox.html24
-rw-r--r--themes/alps/messages-header.html6
-rw-r--r--themes/alps/util.html14
5 files changed, 69 insertions, 7 deletions
diff --git a/plugins/base/routes.go b/plugins/base/routes.go
index c031cb0..ecdfc1a 100644
--- a/plugins/base/routes.go
+++ b/plugins/base/routes.go
@@ -34,6 +34,9 @@ func registerRoutes(p *alps.GoPlugin) {
p.GET("/new-mailbox", handleNewMailbox)
p.POST("/new-mailbox", handleNewMailbox)
+ p.GET("/delete-mailbox/:mbox", handleDeleteMailbox)
+ p.POST("/delete-mailbox/:mbox", handleDeleteMailbox)
+
p.GET("/message/:mbox/:uid", func(ctx *alps.Context) error {
return handleGetPart(ctx, false)
})
@@ -303,6 +306,25 @@ func handleNewMailbox(ctx *alps.Context) error {
})
}
+func handleDeleteMailbox(ctx *alps.Context) error {
+ ibase, err := newIMAPBaseRenderData(ctx, alps.NewBaseRenderData(ctx))
+ if err != nil {
+ return err
+ }
+
+ mbox := ibase.Mailbox
+ ibase.BaseRenderData.WithTitle("Delete folder '" + mbox.Name + "'")
+
+ if ctx.Request().Method == http.MethodPost {
+ ctx.Session.DoIMAP(func(c *imapclient.Client) error {
+ return c.Delete(mbox.Name)
+ })
+ return ctx.Redirect(http.StatusFound, "/mailbox/INBOX")
+ }
+
+ return ctx.Render(http.StatusOK, "delete-mailbox.html", ibase)
+}
+
func handleLogin(ctx *alps.Context) error {
username := ctx.FormValue("username")
password := ctx.FormValue("password")
diff --git a/themes/alps/assets/style.css b/themes/alps/assets/style.css
index 388f25f..8b80504 100644
--- a/themes/alps/assets/style.css
+++ b/themes/alps/assets/style.css
@@ -766,3 +766,13 @@ button:active,
color: #ccc;
background-color: #f8f8f8;
}
+
+.alert {
+ padding: 0.5rem;
+ border: 1px solid transparent;
+ margin: 1rem 0;
+ background: #f8d7da;
+ color: #721c24;
+ border-color: #f5c6cb;
+ max-width: 600px;
+}
diff --git a/themes/alps/delete-mailbox.html b/themes/alps/delete-mailbox.html
new file mode 100644
index 0000000..0429fe0
--- /dev/null
+++ b/themes/alps/delete-mailbox.html
@@ -0,0 +1,24 @@
+{{template "head.html" .}}
+{{template "nav.html" .}}
+{{template "util.html" .}}
+
+<div class="page-wrap">
+ {{ template "aside" . }}
+ <div class="container">
+ <main class="create-update">
+ <form method="POST">
+ <h2>Delete "{{ .Mailbox.Name }}"?</h2>
+ <div class="alert">
+ <strong>Warning!</strong> This will permanently delete all messages
+ in "{{.Mailbox.Name}}".
+ </div>
+ <div class="actions">
+ <button type="submit">Delete "{{.Mailbox.Name}}"</button>
+ <a class="button-link" href="/">Cancel</a>
+ </div>
+ </form>
+ </main>
+ </div>
+</div>
+
+{{template "foot.html"}}
diff --git a/themes/alps/messages-header.html b/themes/alps/messages-header.html
index 13e4872..df70e06 100644
--- a/themes/alps/messages-header.html
+++ b/themes/alps/messages-header.html
@@ -26,6 +26,12 @@
<div class="action-group">
<a href="{{ .GlobalData.URL.String }}" class="button-link">Refresh</a>
</div>
+
+ <div class="action-group">
+ {{ if not (eq .Mailbox.Name "INBOX") }}
+ <a class="button-link" href="/delete-mailbox/{{.Mailbox.Name | pathescape}}">Delete folder</a>
+ {{ end }}
+ </div>
</div>
<form method="get" class="actions-search">
diff --git a/themes/alps/util.html b/themes/alps/util.html
index 5ee456a..64aae3a 100644
--- a/themes/alps/util.html
+++ b/themes/alps/util.html
@@ -28,13 +28,13 @@
{{ if eq $.GlobalData.URL.Path "/compose" }}active{{ end }}
">Compose&nbsp;mail</a>
{{ with .CategorizedMailboxes }}
- {{ with .Common.Inbox }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Drafts }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Outbox }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Sent }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Junk }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Trash }}{{ template "mbox-link" . }}{{ end}}
- {{ with .Common.Archive }}{{ template "mbox-link" . }}{{ end}}
+ {{ with .Common.Inbox }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Drafts }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Outbox }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Sent }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Junk }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Trash }}{{ template "mbox-link" . }}{{ end }}
+ {{ with .Common.Archive }}{{ template "mbox-link" . }}{{ end }}
{{ if .Additional }}
<hr />
{{ range .Additional }}