From bf28e23933a9808820ef4855257accf4634068e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leszek=20Cima=C5=82a?= Date: Wed, 8 Jan 2020 21:44:14 +0100 Subject: [PATCH] create OriginalMail struct --- commands/account/compose.go | 4 +++- commands/msg/forward.go | 10 ++++++---- commands/msg/reply.go | 9 +++++---- commands/msg/unsubscribe.go | 2 ++ lib/templates/template.go | 28 ++++++++++++++++------------ models/models.go | 7 +++++++ widgets/aerc.go | 3 ++- widgets/compose.go | 5 +++-- 8 files changed, 44 insertions(+), 24 deletions(-) diff --git a/commands/account/compose.go b/commands/account/compose.go index 24e460b..c214441 100644 --- a/commands/account/compose.go +++ b/commands/account/compose.go @@ -5,6 +5,7 @@ import ( "regexp" "strings" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/widgets" "git.sr.ht/~sircmpwn/getopt" ) @@ -31,7 +32,8 @@ func (Compose) Execute(aerc *widgets.Aerc, args []string) error { acct := aerc.SelectedAccount() composer, err := widgets.NewComposer(aerc, - aerc.Config(), acct.AccountConfig(), acct.Worker(), template, nil) + aerc.Config(), acct.AccountConfig(), acct.Worker(), + template, nil, models.OriginalMail{}) if err != nil { return err } diff --git a/commands/msg/forward.go b/commands/msg/forward.go index 35d276e..c51949e 100644 --- a/commands/msg/forward.go +++ b/commands/msg/forward.go @@ -71,14 +71,16 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error { "Subject": subject, } + original := models.OriginalMail{} + addTab := func() (*widgets.Composer, error) { if template != "" { - defaults["OriginalFrom"] = models.FormatAddresses(msg.Envelope.From) - defaults["OriginalDate"] = msg.Envelope.Date.Format("Mon Jan 2, 2006 at 3:04 PM") + original.From = models.FormatAddresses(msg.Envelope.From) + original.Date = msg.Envelope.Date.Format("Mon Jan 2, 2006 at 3:04 PM") } composer, err := widgets.NewComposer(aerc, aerc.Config(), acct.AccountConfig(), - acct.Worker(), template, defaults) + acct.Worker(), template, defaults, original) if err != nil { aerc.PushError("Error: " + err.Error()) return nil, err @@ -138,7 +140,7 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error { store.FetchBodyPart(msg.Uid, msg.BodyStructure, []int{1}, func(reader io.Reader) { buf := new(bytes.Buffer) buf.ReadFrom(reader) - defaults["Original"] = buf.String() + original.Text = buf.String() addTab() }) } diff --git a/commands/msg/reply.go b/commands/msg/reply.go index a7379d7..2964a83 100644 --- a/commands/msg/reply.go +++ b/commands/msg/reply.go @@ -116,15 +116,16 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { "Subject": subject, "In-Reply-To": msg.Envelope.MessageId, } + original := models.OriginalMail{} addTab := func() error { if template != "" { - defaults["OriginalFrom"] = models.FormatAddresses(msg.Envelope.From) - defaults["OriginalDate"] = msg.Envelope.Date.Format("Mon Jan 2, 2006 at 3:04 PM") + original.From = models.FormatAddresses(msg.Envelope.From) + original.Date = msg.Envelope.Date.Format("Mon Jan 2, 2006 at 3:04 PM") } composer, err := widgets.NewComposer(aerc, aerc.Config(), - acct.AccountConfig(), acct.Worker(), template, defaults) + acct.AccountConfig(), acct.Worker(), template, defaults, original) if err != nil { aerc.PushError("Error: " + err.Error()) return err @@ -155,7 +156,7 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { store.FetchBodyPart(msg.Uid, msg.BodyStructure, []int{1}, func(reader io.Reader) { buf := new(bytes.Buffer) buf.ReadFrom(reader) - defaults["Original"] = buf.String() + original.Text = buf.String() addTab() }) return nil diff --git a/commands/msg/unsubscribe.go b/commands/msg/unsubscribe.go index 5ffec46..682b2b5 100644 --- a/commands/msg/unsubscribe.go +++ b/commands/msg/unsubscribe.go @@ -7,6 +7,7 @@ import ( "strings" "git.sr.ht/~sircmpwn/aerc/lib" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/widgets" ) @@ -94,6 +95,7 @@ func unsubscribeMailto(aerc *widgets.Aerc, u *url.URL) error { acct.Worker(), "", defaults, + models.OriginalMail{}, ) if err != nil { return err diff --git a/lib/templates/template.go b/lib/templates/template.go index 21f7b35..8a345d9 100644 --- a/lib/templates/template.go +++ b/lib/templates/template.go @@ -10,6 +10,7 @@ import ( "text/template" "time" + "git.sr.ht/~sircmpwn/aerc/models" "github.com/mitchellh/go-homedir" ) @@ -28,20 +29,23 @@ type TemplateData struct { func TestTemplateData() TemplateData { defaults := map[string]string{ - "To": "John Doe ", - "Cc": "Josh Doe ", - "From": "Jane Smith ", - "Subject": "This is only a test", - "OriginalText": "This is only a test text", - "OriginalFrom": "John Doe ", - "OriginalDate": time.Now().Format("Mon Jan 2, 2006 at 3:04 PM"), + "To": "John Doe ", + "Cc": "Josh Doe ", + "From": "Jane Smith ", + "Subject": "This is only a test", } - return ParseTemplateData(defaults) + original := models.OriginalMail{ + Date: time.Now().Format("Mon Jan 2, 2006 at 3:04 PM"), + From: "John Doe ", + Text: "This is only a test text", + } + + return ParseTemplateData(defaults, original) } -func ParseTemplateData(defaults map[string]string) TemplateData { - originalDate, _ := time.Parse("Mon Jan 2, 2006 at 3:04 PM", defaults["OriginalDate"]) +func ParseTemplateData(defaults map[string]string, original models.OriginalMail) TemplateData { + originalDate, _ := time.Parse("Mon Jan 2, 2006 at 3:04 PM", original.Date) td := TemplateData{ To: parseAddressList(defaults["To"]), Cc: parseAddressList(defaults["Cc"]), @@ -49,8 +53,8 @@ func ParseTemplateData(defaults map[string]string) TemplateData { From: parseAddressList(defaults["From"]), Date: time.Now(), Subject: defaults["Subject"], - OriginalText: defaults["Original"], - OriginalFrom: parseAddressList(defaults["OriginalFrom"]), + OriginalText: original.Text, + OriginalFrom: parseAddressList(original.From), OriginalDate: originalDate, } return td diff --git a/models/models.go b/models/models.go index 036a609..7c3c192 100644 --- a/models/models.go +++ b/models/models.go @@ -164,3 +164,10 @@ func FormatAddresses(addrs []*Address) string { } return val.String() } + +// OriginalMail is helper struct used for reply/forward +type OriginalMail struct { + Date string + From string + Text string +} diff --git a/widgets/aerc.go b/widgets/aerc.go index da3f56f..a0e356a 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -14,6 +14,7 @@ import ( "git.sr.ht/~sircmpwn/aerc/config" "git.sr.ht/~sircmpwn/aerc/lib" "git.sr.ht/~sircmpwn/aerc/lib/ui" + "git.sr.ht/~sircmpwn/aerc/models" ) type Aerc struct { @@ -432,7 +433,7 @@ func (aerc *Aerc) Mailto(addr *url.URL) error { } } composer, err := NewComposer(aerc, aerc.Config(), - acct.AccountConfig(), acct.Worker(), "", defaults) + acct.AccountConfig(), acct.Worker(), "", defaults, models.OriginalMail{}) if err != nil { return nil } diff --git a/widgets/compose.go b/widgets/compose.go index 091eb70..636dcd1 100644 --- a/widgets/compose.go +++ b/widgets/compose.go @@ -26,6 +26,7 @@ import ( "git.sr.ht/~sircmpwn/aerc/config" "git.sr.ht/~sircmpwn/aerc/lib/templates" "git.sr.ht/~sircmpwn/aerc/lib/ui" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/worker/types" ) @@ -59,7 +60,7 @@ type Composer struct { func NewComposer(aerc *Aerc, conf *config.AercConfig, acct *config.AccountConfig, worker *types.Worker, template string, - defaults map[string]string) (*Composer, error) { + defaults map[string]string, original models.OriginalMail) (*Composer, error) { if defaults == nil { defaults = make(map[string]string) @@ -68,7 +69,7 @@ func NewComposer(aerc *Aerc, conf *config.AercConfig, defaults["From"] = acct.From } - templateData := templates.ParseTemplateData(defaults) + templateData := templates.ParseTemplateData(defaults, original) cmpl := completer.New(conf.Compose.AddressBookCmd, func(err error) { aerc.PushError(fmt.Sprintf("could not complete header: %v", err)) worker.Logger.Printf("could not complete header: %v", err)