From 0384d631d2edb8383d0840940be066d96a5badc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 9 Jan 2022 01:20:34 +0100 Subject: #66: Support for specifying custom templates --- internal/feed/template/template.go | 42 ++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) (limited to 'internal') diff --git a/internal/feed/template/template.go b/internal/feed/template/template.go index 8b3fb73..d66a8e4 100644 --- a/internal/feed/template/template.go +++ b/internal/feed/template/template.go @@ -2,13 +2,20 @@ package template import ( _ "embed" + "errors" + "fmt" html "html/template" "io" + "io/fs" + "os" text "text/template" + + "github.com/Necoro/feed2imap-go/pkg/log" ) type template interface { Execute(wr io.Writer, data interface{}) error + Name() string } type Template struct { @@ -24,21 +31,44 @@ var defaultHtmlTpl string var defaultTextTpl string var Html = Template{ - useHtml: true, - dflt: defaultHtmlTpl, + useHtml: true, + dflt: defaultHtmlTpl, + template: html.New("Html").Funcs(funcMap), } var Text = Template{ - useHtml: false, - dflt: defaultTextTpl, + useHtml: false, + dflt: defaultTextTpl, + template: text.New("Text").Funcs(funcMap), } func (tpl *Template) loadDefault() { + if err := tpl.load(tpl.dflt); err != nil { + panic(err) + } +} + +func (tpl *Template) load(content string) (err error) { if tpl.useHtml { - tpl.template = html.Must(html.New("Html").Funcs(funcMap).Parse(tpl.dflt)) + _, err = tpl.template.(*html.Template).Parse(content) } else { - tpl.template = text.Must(text.New("Text").Funcs(funcMap).Parse(tpl.dflt)) + _, err = tpl.template.(*text.Template).Parse(content) } + return +} + +func (tpl *Template) LoadFile(file string) error { + content, err := os.ReadFile(file) + if err != nil { + if errors.Is(err, fs.ErrNotExist) { + log.Errorf("Template file '%s' does not exist, keeping default.", file) + return nil + } else { + return fmt.Errorf("reading template file '%s': %w", file, err) + } + } + + return tpl.load(string(content)) } func init() { -- cgit v1.2.3