diff --git a/backend/00-router.go b/backend/00-router.go index 9d14fc7..9653ea3 100644 --- a/backend/00-router.go +++ b/backend/00-router.go @@ -301,7 +301,7 @@ func emailBoxHandler(w http.ResponseWriter, r *http.Request) { kind := strings.TrimPrefix(r.URL.Path, "/boxes/") switch kind { case "source": - renderSourceEmailBoxPage(w, r, accounts) + renderSourceEmailBoxPage(w, r, accounts, r.URL.Query().Get("source")) case "target": renderTargetEmailBoxPage(w, r, accounts) default: @@ -779,7 +779,7 @@ func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMod html.EscapeString(mode.RightTitle), renderTransferPicker(mode.RightKind, accounts, archives)) } -func renderSourceEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts []Account) { +func renderSourceEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts []Account, selected string) { user := CurrentUser(r) w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprintf(w, ` @@ -811,14 +811,14 @@ func renderSourceEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [
- +
Nachrichten
Quell-Postfach waehlen.
Nachricht waehlen.
`, - renderRibbonEmailBoxMenu("source"), renderRibbonTransferMenu(""), renderRibbonActions(false, user), renderEmailBoxSourcePane(accounts)) + renderRibbonEmailBoxMenu("source"), renderRibbonTransferMenu(""), renderRibbonActions(false, user), renderEmailBoxSourcePane(accounts, selected)) } func renderTargetEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts []Account) { @@ -863,30 +863,63 @@ func renderTargetEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [ renderRibbonEmailBoxMenu("target"), renderRibbonTransferMenu(""), renderRibbonActions(false, user), renderEmailBoxTargetPane(accounts)) } -func renderEmailBoxSourcePane(accounts []Account) string { +func renderEmailBoxSourcePane(accounts []Account, selected string) string { var b strings.Builder - b.WriteString(`
Quell-Postfach
`) - if len(sourceAccounts) == 0 { - b.WriteString(`
Keine Quell-Postfaecher eingetragen.
`) + b.WriteString(`
Quell-Postfach
Keine Quell-Postfaecher eingetragen.
`) return b.String() } - for _, a := range sourceAccounts { - fmt.Fprintf(&b, `
%s
`, html.EscapeString(a.SrcUser)) - fmt.Fprintf(&b, `
%s%s
`, - html.EscapeString(strings.ToUpper(accountProto(a))), html.EscapeString(a.SrcHost)) + selectedAccount := sourceAccounts[0] + if selected != "" { + for _, a := range sourceAccounts { + if a.Name == selected { + selectedAccount = a + break + } + } } + b.WriteString(`
Quell-Postfach
`) + renderSourceFolders(&b, selectedAccount) return b.String() } +func renderSourceFolders(b *strings.Builder, account Account) { + fmt.Fprintf(b, `
%s
`, html.EscapeString(account.SrcUser)) + if accountProto(account) == "pop3" { + b.WriteString(`
INBOXPOP3
`) + return + } + src, err := OpenIMAPSource(account) + if err != nil { + fmt.Fprintf(b, `
Ordner konnten nicht geladen werden: %s
`, html.EscapeString(err.Error())) + return + } + defer src.Close() + folders, err := src.Folders() + if err != nil { + fmt.Fprintf(b, `
Ordner konnten nicht geladen werden: %s
`, html.EscapeString(err.Error())) + return + } + if len(folders) == 0 { + b.WriteString(`
Keine Ordner in diesem Quell-Postfach.
`) + return + } + for _, folder := range folders { + fmt.Fprintf(b, `
%s%s
`, + html.EscapeString(folder.Name), html.EscapeString(strings.Join(folder.Attrs, " "))) + } +} + func renderEmailBoxTargetPane(accounts []Account) string { var b strings.Builder b.WriteString(`
Ziel-Postfach