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.
`,
- 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