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).
|
// Lesebereich. Optional Weiterleiten einzelner Mails per SMTP (09-smtp.go).
|
||||||
|
|
||||||
func viewerHandler(w http.ResponseWriter, r *http.Request) {
|
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")
|
folder := r.URL.Query().Get("folder")
|
||||||
q := strings.TrimSpace(r.URL.Query().Get("q"))
|
q := strings.TrimSpace(r.URL.Query().Get("q"))
|
||||||
if account != "" && folder != "" {
|
if account != "" && folder != "" {
|
||||||
|
|
@ -33,7 +33,7 @@ func viewerHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func messageHandler(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")
|
folder := r.URL.Query().Get("folder")
|
||||||
targetAccount := r.URL.Query().Get("target_account")
|
targetAccount := r.URL.Query().Get("target_account")
|
||||||
index, err := strconv.Atoi(r.URL.Query().Get("index"))
|
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) {
|
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")
|
folder := r.URL.Query().Get("folder")
|
||||||
targetAccount := r.URL.Query().Get("target_account")
|
targetAccount := r.URL.Query().Get("target_account")
|
||||||
index, err := strconv.Atoi(r.URL.Query().Get("index"))
|
index, err := strconv.Atoi(r.URL.Query().Get("index"))
|
||||||
|
|
@ -112,11 +112,12 @@ func renderViewerTree(w http.ResponseWriter) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
found = true
|
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 {
|
for _, path := range mboxes {
|
||||||
folder := strings.TrimSuffix(filepath.Base(path), ".mbox")
|
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>`,
|
fmt.Fprintf(w, `<a class="tree-node" href="#" hx-get="/view?source=%s&folder=%s" hx-target="#list" hx-swap="innerHTML">%s</a>`,
|
||||||
urlEsc(account), urlEsc(folder), html.EscapeString(folder))
|
urlEsc(source), urlEsc(folder), html.EscapeString(folder))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
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, `<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">
|
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 type="hidden" name="folder" value="%s">
|
||||||
<input class="input search-input" type="search" name="q" value="%s" placeholder="Suchen">
|
<input class="input search-input" type="search" name="q" value="%s" placeholder="Suchen">
|
||||||
<button class="btn secondary search-btn" type="submit">Suchen</button>
|
<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 {
|
for _, entry := range filtered {
|
||||||
subject := entry.Subject
|
subject := entry.Subject
|
||||||
if subject == "" {
|
if subject == "" {
|
||||||
|
|
@ -156,8 +157,8 @@ func renderMessageList(w http.ResponseWriter, account, folder, q string) {
|
||||||
if from == "" {
|
if from == "" {
|
||||||
from = "(ohne Absender)"
|
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>`,
|
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(account), urlEsc(folder), entry.Index,
|
urlEsc(sourceAccountLabel(account)), urlEsc(folder), entry.Index,
|
||||||
html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date))
|
html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date))
|
||||||
}
|
}
|
||||||
if len(entries) == 0 {
|
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, ` hx-get="/view/target" hx-target="#read-target" hx-swap="innerHTML" hx-trigger="change from:#target-account-select"`)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(&b, `>
|
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="folder" value="%s">
|
||||||
<input type="hidden" name="index" value="%d">
|
<input type="hidden" name="index" value="%d">
|
||||||
<select id="target-account-select" name="target_account" class="target-select">
|
<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 {
|
for _, opt := range options {
|
||||||
attr := ""
|
attr := ""
|
||||||
if opt.Value == selected {
|
if opt.Value == selected {
|
||||||
|
|
@ -393,6 +394,22 @@ func sourceAccountLabel(mboxDir string) string {
|
||||||
return mboxDir
|
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 {
|
func accountLabels() map[string]viewerAccount {
|
||||||
out := map[string]viewerAccount{}
|
out := map[string]viewerAccount{}
|
||||||
if DB == nil {
|
if DB == nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue