From a14cdce07f9e39bd428a22f6c40b3849e0aadfc2 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sun, 7 Aug 2022 01:15:40 +1200 Subject: [PATCH 01/10] Update disconnected state hover title --- server/ui-src/App.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/ui-src/App.vue b/server/ui-src/App.vue index e846b83..82a1f4d 100644 --- a/server/ui-src/App.vue +++ b/server/ui-src/App.vue @@ -362,7 +362,7 @@ export default { Connected -
  • +
  • Disconnected
  • From 09b704bcd73f4158b63218053c82f0af7dc3f14c Mon Sep 17 00:00:00 2001 From: KaptinLin Date: Sat, 6 Aug 2022 22:34:33 +0800 Subject: [PATCH 02/10] Add MP_SMTP_SSL_CERT and MP_SMTP_SSL_KEY env variables --- cmd/root.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index a5547fb..da09ca3 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -87,15 +87,21 @@ func init() { if len(os.Getenv("MP_UI_AUTH_FILE")) > 0 { config.UIAuthFile = os.Getenv("MP_UI_AUTH_FILE") } - if len(os.Getenv("MP_SMTP_AUTH_FILE")) > 0 { - config.SMTPAuthFile = os.Getenv("MP_SMTP_AUTH_FILE") - } if len(os.Getenv("MP_UI_SSL_CERT")) > 0 { config.UISSLCert = os.Getenv("MP_UI_SSL_CERT") } if len(os.Getenv("MP_UI_SSL_KEY")) > 0 { config.UISSLKey = os.Getenv("MP_UI_SSL_KEY") } + if len(os.Getenv("MP_SMTP_AUTH_FILE")) > 0 { + config.SMTPAuthFile = os.Getenv("MP_SMTP_AUTH_FILE") + } + if len(os.Getenv("MP_SMTP_SSL_CERT")) > 0 { + config.SMTPSSLCert = os.Getenv("MP_SMTP_SSL_CERT") + } + if len(os.Getenv("MP_SMTP_SSL_KEY")) > 0 { + config.SMTPSSLKey = os.Getenv("MP_SMTP_SSL_KEY") + } // deprecated 2022/08/06 if len(os.Getenv("MP_AUTH_FILE")) > 0 { From f260495495bf90c93dd0d958b19d925b57b62e3e Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sun, 7 Aug 2022 08:38:52 +1200 Subject: [PATCH 03/10] UI: Update pagination values when new mail arrives when not on first page --- server/ui-src/App.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/ui-src/App.vue b/server/ui-src/App.vue index 82a1f4d..781c78c 100644 --- a/server/ui-src/App.vue +++ b/server/ui-src/App.vue @@ -210,12 +210,14 @@ export default { } // new messages if (response.Type == "new" && response.Data) { - if (self.start < 1) { - if (!self.searching) { + if (!self.searching) { + if (self.start < 1) { self.items.unshift(response.Data); if (self.items.length > self.limit) { self.items.pop(); } + } else { + self.start++; } } self.total++; From d4cf95363f00b56453bd9ae58a20e4c9a39dd715 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sun, 7 Aug 2022 09:34:06 +1200 Subject: [PATCH 04/10] Feature: Mark all messages as read --- server/api.go | 16 ++++++++++++++ server/server.go | 1 + server/ui-src/App.vue | 51 ++++++++++++++++++++++++++++++++++++------- storage/database.go | 35 +++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 8 deletions(-) diff --git a/server/api.go b/server/api.go index e5f5662..468d3e2 100644 --- a/server/api.go +++ b/server/api.go @@ -218,6 +218,22 @@ func apiUnreadOne(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("ok")) } +// Mark single message as unread +func apiMarkAllRead(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + + mailbox := vars["mailbox"] + + err := storage.MarkAllRead(mailbox) + if err != nil { + httpError(w, err.Error()) + return + } + + w.Header().Add("Content-Type", "text/plain") + _, _ = w.Write([]byte("ok")) +} + // Websocket to broadcast changes func apiWebsocket(w http.ResponseWriter, r *http.Request) { websockets.ServeWs(websockets.MessageHub, w, r) diff --git a/server/server.go b/server/server.go index 8c202a9..ada8462 100644 --- a/server/server.go +++ b/server/server.go @@ -39,6 +39,7 @@ func Listen() { r.HandleFunc("/api/{mailbox}/search", middleWareFunc(apiSearchMailbox)) r.HandleFunc("/api/{mailbox}/delete", middleWareFunc(apiDeleteAll)) r.HandleFunc("/api/{mailbox}/events", apiWebsocket) + r.HandleFunc("/api/{mailbox}/read", apiMarkAllRead) r.HandleFunc("/api/{mailbox}/{id}/source", middleWareFunc(apiDownloadSource)) r.HandleFunc("/api/{mailbox}/{id}/part/{partID}", middleWareFunc(apiDownloadAttachment)) r.HandleFunc("/api/{mailbox}/{id}/delete", middleWareFunc(apiDeleteOne)) diff --git a/server/ui-src/App.vue b/server/ui-src/App.vue index 781c78c..71e2a3c 100644 --- a/server/ui-src/App.vue +++ b/server/ui-src/App.vue @@ -198,6 +198,16 @@ export default { }); }, + markAllRead: function() { + let self = this; + let uri = 'api/' + self.mailbox + '/read' + self.get(uri, false, function(response) { + window.location.hash = ""; + self.scrollInPlace = true; + self.loadMessages(); + }); + }, + // websocket connect connect: function () { let wsproto = location.protocol == 'https:' ? 'wss' : 'ws'; @@ -360,15 +370,15 @@ export default {
    -
    No messages
    +
    No messages
    @@ -468,6 +484,25 @@ export default { + + +