Use source labels in viewer requests
This commit is contained in:
parent
c771db0d94
commit
cebb6e6ab2
1 changed files with 29 additions and 12 deletions
|
|
@ -18,7 +18,7 @@ import (
|
|||
// Lesebereich. Optional Weiterleiten einzelner Mails per SMTP (09-smtp.go).
|
||||
|
||||
func viewerHandler(w http.ResponseWriter, r *http.Request) {
|
||||
account := r.URL.Query().Get("account")
|
||||
account := resolveViewerAccount(r.URL.Query().Get("account"), r.URL.Query().Get("source"))
|
||||
folder := r.URL.Query().Get("folder")
|
||||
q := strings.TrimSpace(r.URL.Query().Get("q"))
|
||||
if account != "" && folder != "" {
|
||||
|
|
@ -33,7 +33,7 @@ func viewerHandler(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func messageHandler(w http.ResponseWriter, r *http.Request) {
|
||||
account := r.URL.Query().Get("account")
|
||||
account := resolveViewerAccount(r.URL.Query().Get("account"), r.URL.Query().Get("source"))
|
||||
folder := r.URL.Query().Get("folder")
|
||||
targetAccount := r.URL.Query().Get("target_account")
|
||||
index, err := strconv.Atoi(r.URL.Query().Get("index"))
|
||||
|
|
@ -65,7 +65,7 @@ func messageHandler(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func targetMessageHandler(w http.ResponseWriter, r *http.Request) {
|
||||
account := r.URL.Query().Get("account")
|
||||
account := resolveViewerAccount(r.URL.Query().Get("account"), r.URL.Query().Get("source"))
|
||||
folder := r.URL.Query().Get("folder")
|
||||
targetAccount := r.URL.Query().Get("target_account")
|
||||
index, err := strconv.Atoi(r.URL.Query().Get("index"))
|
||||
|
|
@ -112,11 +112,12 @@ func renderViewerTree(w http.ResponseWriter) {
|
|||
continue
|
||||
}
|
||||
found = true
|
||||
fmt.Fprintf(w, `<div class="tree-node account">%s</div>`, html.EscapeString(sourceAccountLabel(account)))
|
||||
source := sourceAccountLabel(account)
|
||||
fmt.Fprintf(w, `<div class="tree-node account">%s</div>`, html.EscapeString(source))
|
||||
for _, path := range mboxes {
|
||||
folder := strings.TrimSuffix(filepath.Base(path), ".mbox")
|
||||
fmt.Fprintf(w, `<a class="tree-node" href="#" hx-get="/view?account=%s&folder=%s" hx-target="#list" hx-swap="innerHTML">%s</a>`,
|
||||
urlEsc(account), urlEsc(folder), html.EscapeString(folder))
|
||||
fmt.Fprintf(w, `<a class="tree-node" href="#" hx-get="/view?source=%s&folder=%s" hx-target="#list" hx-swap="innerHTML">%s</a>`,
|
||||
urlEsc(source), urlEsc(folder), html.EscapeString(folder))
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
|
|
@ -142,11 +143,11 @@ func renderMessageList(w http.ResponseWriter, account, folder, q string) {
|
|||
}
|
||||
fmt.Fprintf(w, `<div class="pane-head">%s / %s (%d)</div>`, html.EscapeString(sourceAccountLabel(account)), html.EscapeString(folder), len(filtered))
|
||||
fmt.Fprintf(w, `<form class="searchbar" hx-get="/view" hx-target="#list" hx-swap="innerHTML">
|
||||
<input type="hidden" name="account" value="%s">
|
||||
<input type="hidden" name="source" value="%s">
|
||||
<input type="hidden" name="folder" value="%s">
|
||||
<input class="input search-input" type="search" name="q" value="%s" placeholder="Suchen">
|
||||
<button class="btn secondary search-btn" type="submit">Suchen</button>
|
||||
</form>`, html.EscapeString(account), html.EscapeString(folder), html.EscapeString(q))
|
||||
</form>`, html.EscapeString(sourceAccountLabel(account)), html.EscapeString(folder), html.EscapeString(q))
|
||||
for _, entry := range filtered {
|
||||
subject := entry.Subject
|
||||
if subject == "" {
|
||||
|
|
@ -156,8 +157,8 @@ func renderMessageList(w http.ResponseWriter, account, folder, q string) {
|
|||
if from == "" {
|
||||
from = "(ohne Absender)"
|
||||
}
|
||||
fmt.Fprintf(w, `<a class="msg-row" href="#" hx-get="/view/message?account=%s&folder=%s&index=%d" hx-include="#target-account-select" hx-target="#read" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
||||
urlEsc(account), urlEsc(folder), entry.Index,
|
||||
fmt.Fprintf(w, `<a class="msg-row" href="#" hx-get="/view/message?source=%s&folder=%s&index=%d" hx-include="#target-account-select" hx-target="#read" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
||||
urlEsc(sourceAccountLabel(account)), urlEsc(folder), entry.Index,
|
||||
html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date))
|
||||
}
|
||||
if len(entries) == 0 {
|
||||
|
|
@ -336,11 +337,11 @@ func renderTargetAccountSelect(account, folder, selected string, index int) stri
|
|||
fmt.Fprintf(&b, ` hx-get="/view/target" hx-target="#read-target" hx-swap="innerHTML" hx-trigger="change from:#target-account-select"`)
|
||||
}
|
||||
fmt.Fprintf(&b, `>
|
||||
<input type="hidden" name="account" value="%s">
|
||||
<input type="hidden" name="source" value="%s">
|
||||
<input type="hidden" name="folder" value="%s">
|
||||
<input type="hidden" name="index" value="%d">
|
||||
<select id="target-account-select" name="target_account" class="target-select">
|
||||
<option value="">Automatisch</option>`, html.EscapeString(account), html.EscapeString(folder), index)
|
||||
<option value="">Automatisch</option>`, html.EscapeString(sourceAccountLabel(account)), html.EscapeString(folder), index)
|
||||
for _, opt := range options {
|
||||
attr := ""
|
||||
if opt.Value == selected {
|
||||
|
|
@ -393,6 +394,22 @@ func sourceAccountLabel(mboxDir string) string {
|
|||
return mboxDir
|
||||
}
|
||||
|
||||
func resolveViewerAccount(account, source string) string {
|
||||
if strings.TrimSpace(account) != "" {
|
||||
return account
|
||||
}
|
||||
source = strings.TrimSpace(source)
|
||||
if source == "" {
|
||||
return ""
|
||||
}
|
||||
for dir, label := range accountLabels() {
|
||||
if strings.EqualFold(label.SourceLabel, source) {
|
||||
return dir
|
||||
}
|
||||
}
|
||||
return source
|
||||
}
|
||||
|
||||
func accountLabels() map[string]viewerAccount {
|
||||
out := map[string]viewerAccount{}
|
||||
if DB == nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue