msg/reply: handle addresses as addresses
This simplifies the code considerably and makes it easier to follow
This commit is contained in:
parent
c846307144
commit
2a186cfd71
1 changed files with 20 additions and 24 deletions
|
@ -5,12 +5,12 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
gomail "net/mail"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.sr.ht/~sircmpwn/getopt"
|
"git.sr.ht/~sircmpwn/getopt"
|
||||||
|
|
||||||
"git.sr.ht/~sircmpwn/aerc/lib"
|
"git.sr.ht/~sircmpwn/aerc/lib"
|
||||||
|
"git.sr.ht/~sircmpwn/aerc/lib/format"
|
||||||
"git.sr.ht/~sircmpwn/aerc/models"
|
"git.sr.ht/~sircmpwn/aerc/models"
|
||||||
"git.sr.ht/~sircmpwn/aerc/widgets"
|
"git.sr.ht/~sircmpwn/aerc/widgets"
|
||||||
)
|
)
|
||||||
|
@ -60,7 +60,10 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
return errors.New("No account selected")
|
return errors.New("No account selected")
|
||||||
}
|
}
|
||||||
conf := acct.AccountConfig()
|
conf := acct.AccountConfig()
|
||||||
us, _ := gomail.ParseAddress(conf.From)
|
from, err := format.ParseAddress(conf.From)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
store := widget.Store()
|
store := widget.Store()
|
||||||
if store == nil {
|
if store == nil {
|
||||||
return errors.New("Cannot perform action. Messages still loading")
|
return errors.New("Cannot perform action. Messages still loading")
|
||||||
|
@ -72,27 +75,18 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
acct.Logger().Println("Replying to email " + msg.Envelope.MessageId)
|
acct.Logger().Println("Replying to email " + msg.Envelope.MessageId)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
to []string
|
to []*models.Address
|
||||||
cc []string
|
cc []*models.Address
|
||||||
toList []*models.Address
|
|
||||||
)
|
)
|
||||||
if args[0] == "reply" {
|
if args[0] == "reply" {
|
||||||
if len(msg.Envelope.ReplyTo) != 0 {
|
if len(msg.Envelope.ReplyTo) != 0 {
|
||||||
toList = msg.Envelope.ReplyTo
|
to = msg.Envelope.ReplyTo
|
||||||
} else {
|
} else {
|
||||||
toList = msg.Envelope.From
|
to = msg.Envelope.From
|
||||||
}
|
|
||||||
for _, addr := range toList {
|
|
||||||
if addr.Name != "" {
|
|
||||||
to = append(to, fmt.Sprintf("%s <%s@%s>",
|
|
||||||
addr.Name, addr.Mailbox, addr.Host))
|
|
||||||
} else {
|
|
||||||
to = append(to, fmt.Sprintf("<%s@%s>", addr.Mailbox, addr.Host))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
isMainRecipient := func(a *models.Address) bool {
|
isMainRecipient := func(a *models.Address) bool {
|
||||||
for _, ta := range toList {
|
for _, ta := range to {
|
||||||
if ta.Mailbox == a.Mailbox && ta.Host == a.Host {
|
if ta.Address == a.Address {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,15 +98,16 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
if isMainRecipient(addr) {
|
if isMainRecipient(addr) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
cc = append(cc, addr.Format())
|
cc = append(cc, addr)
|
||||||
}
|
}
|
||||||
|
envTos := make([]*models.Address, 0, len(msg.Envelope.To))
|
||||||
for _, addr := range msg.Envelope.To {
|
for _, addr := range msg.Envelope.To {
|
||||||
address := fmt.Sprintf("%s@%s", addr.Mailbox, addr.Host)
|
if addr.Address == from.Address {
|
||||||
if strings.EqualFold(address, us.Address) {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
to = append(to, addr.Format())
|
envTos = append(envTos, addr)
|
||||||
}
|
}
|
||||||
|
to = append(to, envTos...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,8 +119,9 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
defaults := map[string]string{
|
defaults := map[string]string{
|
||||||
"To": strings.Join(to, ", "),
|
"To": format.FormatAddresses(to),
|
||||||
"Cc": strings.Join(cc, ", "),
|
"Cc": format.FormatAddresses(cc),
|
||||||
|
"From": from.Format(),
|
||||||
"Subject": subject,
|
"Subject": subject,
|
||||||
"In-Reply-To": msg.Envelope.MessageId,
|
"In-Reply-To": msg.Envelope.MessageId,
|
||||||
}
|
}
|
||||||
|
@ -133,7 +129,7 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
|
|
||||||
addTab := func() error {
|
addTab := func() error {
|
||||||
if template != "" {
|
if template != "" {
|
||||||
original.From = models.FormatAddresses(msg.Envelope.From)
|
original.From = format.FormatAddresses(msg.Envelope.From)
|
||||||
original.Date = msg.Envelope.Date
|
original.Date = msg.Envelope.Date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue