summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--commands/account/compose.go4
-rw-r--r--commands/msg/forward.go10
-rw-r--r--commands/msg/reply.go9
-rw-r--r--commands/msg/unsubscribe.go2
-rw-r--r--lib/templates/template.go28
-rw-r--r--models/models.go7
-rw-r--r--widgets/aerc.go3
-rw-r--r--widgets/compose.go5
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 <john@example.com>",
-		"Cc":           "Josh Doe <josh@example.com>",
-		"From":         "Jane Smith <jane@example.com>",
-		"Subject":      "This is only a test",
-		"OriginalText": "This is only a test text",
-		"OriginalFrom": "John Doe <john@example.com>",
-		"OriginalDate": time.Now().Format("Mon Jan 2, 2006 at 3:04 PM"),
+		"To":      "John Doe <john@example.com>",
+		"Cc":      "Josh Doe <josh@example.com>",
+		"From":    "Jane Smith <jane@example.com>",
+		"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 <john@example.com>",
+		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)