aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2022-12-20 17:05:43 +0100
committerRobin Jarry <robin@jarry.cc>2023-01-04 22:57:31 +0100
commitae675b491d2b55a06588e8ab4ce8205aaae796c8 (patch)
tree383920e34344ea3456162fb74cc180bfb33dec83 /lib
parent2a290cf1ed6113f0d01eea3f2cff446339bed0ce (diff)
downloadaerc-ae675b491d2b55a06588e8ab4ce8205aaae796c8.tar.gz
templates: change fields as lazy functions
No need to pre-render fields that are not necessarily accessed in templates. Change fields to functions that are evaluated only when required. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/templates/data.go102
1 files changed, 67 insertions, 35 deletions
diff --git a/lib/templates/data.go b/lib/templates/data.go
index 5b351816..8637aa7f 100644
--- a/lib/templates/data.go
+++ b/lib/templates/data.go
@@ -8,51 +8,83 @@ import (
)
type TemplateData struct {
- To []*mail.Address
- Cc []*mail.Address
- Bcc []*mail.Address
- From []*mail.Address
- Date time.Time
- Subject string
+ msg *mail.Header
// Only available when replying with a quote
- OriginalText string
- OriginalFrom []*mail.Address
- OriginalDate time.Time
- OriginalMIMEType string
+ parent *models.OriginalMail
}
-func ParseTemplateData(h *mail.Header, original models.OriginalMail) TemplateData {
- // we ignore errors as this shouldn't fail the sending / replying even if
- // something is wrong with the message we reply to
- to, _ := h.AddressList("to")
- cc, _ := h.AddressList("cc")
- bcc, _ := h.AddressList("bcc")
- from, _ := h.AddressList("from")
- subject, err := h.Text("subject")
+func NewTemplateData(
+ msg *mail.Header, parent *models.OriginalMail,
+) *TemplateData {
+ return &TemplateData{
+ msg: msg,
+ parent: parent,
+ }
+}
+
+func (d *TemplateData) To() []*mail.Address {
+ to, _ := d.msg.AddressList("to")
+ return to
+}
+
+func (d *TemplateData) Cc() []*mail.Address {
+ to, _ := d.msg.AddressList("cc")
+ return to
+}
+
+func (d *TemplateData) Bcc() []*mail.Address {
+ to, _ := d.msg.AddressList("bcc")
+ return to
+}
+
+func (d *TemplateData) From() []*mail.Address {
+ to, _ := d.msg.AddressList("from")
+ return to
+}
+
+func (d *TemplateData) Date() time.Time {
+ return time.Now()
+}
+
+func (d *TemplateData) Subject() string {
+ subject, err := d.msg.Text("subject")
if err != nil {
- subject = h.Get("subject")
+ subject = d.msg.Get("subject")
+ }
+ return subject
+}
+
+func (d *TemplateData) OriginalText() string {
+ if d.parent == nil {
+ return ""
}
+ return d.parent.Text
+}
- td := TemplateData{
- To: to,
- Cc: cc,
- Bcc: bcc,
- From: from,
- Date: time.Now(),
- Subject: subject,
- OriginalText: original.Text,
- OriginalDate: original.Date,
- OriginalMIMEType: original.MIMEType,
+func (d *TemplateData) OriginalDate() time.Time {
+ if d.parent == nil {
+ return time.Time{}
}
- if original.RFC822Headers != nil {
- origFrom, _ := original.RFC822Headers.AddressList("from")
- td.OriginalFrom = origFrom
+ return d.parent.Date
+}
+
+func (d *TemplateData) OriginalFrom() []*mail.Address {
+ if d.parent == nil || d.parent.RFC822Headers == nil {
+ return nil
+ }
+ from, _ := d.parent.RFC822Headers.AddressList("from")
+ return from
+}
+
+func (d *TemplateData) OriginalMIMEType() string {
+ if d.parent == nil {
+ return ""
}
- return td
+ return d.parent.MIMEType
}
// DummyData provides dummy data to test template validity
-func DummyData() interface{} {
+func DummyData() *TemplateData {
from := &mail.Address{
Name: "John Doe",
Address: "john@example.com",
@@ -76,5 +108,5 @@ func DummyData() interface{} {
MIMEType: "text/plain",
RFC822Headers: oh,
}
- return ParseTemplateData(h, original)
+ return NewTemplateData(h, &original)
}