diff --git a/backend/00-router.go b/backend/00-router.go index 928d37b..7979c26 100644 --- a/backend/00-router.go +++ b/backend/00-router.go @@ -160,6 +160,11 @@ func accountsHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } + archives, err := ListArchiveMailboxes() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } editName := strings.TrimSpace(r.URL.Query().Get("edit")) var edit Account if editName != "" { @@ -169,7 +174,7 @@ func accountsHandler(w http.ResponseWriter, r *http.Request) { return } } - renderAccountsPage(w, r, accounts, edit, r.URL.Query().Get("msg"), r.URL.Query().Get("err")) + renderAccountsPage(w, r, accounts, archives, edit, r.URL.Query().Get("msg"), r.URL.Query().Get("err")) } func accountSaveHandler(w http.ResponseWriter, r *http.Request) { @@ -253,7 +258,12 @@ func archivesHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - renderArchivesPage(w, r, archiveMailboxes(accounts), accounts, r.URL.Query().Get("msg"), r.URL.Query().Get("err")) + archives, err := ListArchiveMailboxes() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + renderArchivesPage(w, r, archives, accounts, r.URL.Query().Get("msg"), r.URL.Query().Get("err")) } func transferHandler(w http.ResponseWriter, r *http.Request) { @@ -270,7 +280,12 @@ func transferHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - renderTransferPage(w, r, transferModeBySlug(mode), accounts, archiveMailboxes(accounts)) + archives, err := ListArchiveMailboxes() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + renderTransferPage(w, r, transferModeBySlug(mode), accounts, archives) } func emailBoxHandler(w http.ResponseWriter, r *http.Request) { @@ -307,6 +322,10 @@ func archiveCreateHandler(w http.ResponseWriter, r *http.Request) { redirectArchives(w, r, err.Error()) return } + if err := SaveArchiveMailbox(name); err != nil { + redirectArchives(w, r, err.Error()) + return + } redirectArchives(w, r, "Archiv-Mailbox angelegt.") } @@ -330,7 +349,11 @@ func archiveDeleteHandler(w http.ResponseWriter, r *http.Request) { path := filepath.Join(Cfg.MboxRoot, name) entries, err := os.ReadDir(path) if os.IsNotExist(err) { - redirectArchives(w, r, "Archiv-Mailbox existiert nicht.") + if err := DeleteArchiveMailbox(name); err != nil { + redirectArchives(w, r, err.Error()) + return + } + redirectArchives(w, r, "Archiv-Mailbox entfernt.") return } if err != nil { @@ -345,6 +368,10 @@ func archiveDeleteHandler(w http.ResponseWriter, r *http.Request) { redirectArchives(w, r, err.Error()) return } + if err := DeleteArchiveMailbox(name); err != nil { + redirectArchives(w, r, err.Error()) + return + } redirectArchives(w, r, "Leere Archiv-Mailbox entfernt.") } @@ -542,12 +569,11 @@ func userToggleActiveHandler(w http.ResponseWriter, r *http.Request) { redirectUsers(w, r, username, "Benutzer aktiviert.") } -func renderAccountsPage(w http.ResponseWriter, r *http.Request, accounts []Account, edit Account, msg, errMsg string) { +func renderAccountsPage(w http.ResponseWriter, r *http.Request, accounts []Account, archives []string, edit Account, msg, errMsg string) { user := CurrentUser(r) if edit.Name == "" { edit = Account{SrcPort: 993, SrcSecurity: "tls", SrcProto: "imap", DstPort: 993, DstSecurity: "tls", Active: true} } - archives := archiveMailboxes(accounts) w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprintf(w, ` @@ -1183,8 +1209,9 @@ func renderArchiveForm(w http.ResponseWriter) {
-
Schutzlogik
-

Archiv-mboxen werden als lokale Ordner unter dem Backup-Root angelegt.

+
Archivlogik
+

Archiv-mboxen sind eigenstaendige Mailboxen und nicht von einem Quellkonto abhaengig.

+

Sie koennen leer angelegt oder spaeter per Import mit mbox/PST-Inhalten gefuellt werden.

Entfernen ist nur moeglich, wenn die Mailbox keinem Konto zugeordnet und leer ist.

`) } @@ -1282,7 +1309,7 @@ func archiveSelect(current string, archives []string) string { values = append([]string{current}, values...) } if len(values) == 0 { - return `` + return `` } var b strings.Builder b.WriteString(`