Pass file customization options to constructor

This commit is contained in:
Gabriel Garrido 2024-05-19 15:11:53 +02:00
parent b820e10996
commit 5b0f031ab0
2 changed files with 20 additions and 16 deletions

View file

@ -21,6 +21,8 @@ var templates embed.FS
type FileWriter struct { type FileWriter struct {
dir string dir string
templateFile string
filenameTemplate string
} }
type TemplateContext struct { type TemplateContext struct {
@ -44,7 +46,7 @@ type PostFile struct {
File *os.File File *os.File
} }
func New(dir string) (FileWriter, error) { func New(dir string, templateFile string, filenameTemplate string) (FileWriter, error) {
var fileWriter FileWriter var fileWriter FileWriter
_, err := os.Stat(dir) _, err := os.Stat(dir)
@ -60,12 +62,13 @@ func New(dir string) (FileWriter, error) {
return FileWriter{ return FileWriter{
dir: absDir, dir: absDir,
templateFile: templateFile,
filenameTemplate: filenameTemplate,
}, nil }, nil
} }
func (f FileWriter) Write(post *client.Post, templateFile, filenameTemplate string) error { func (f *FileWriter) Write(post *client.Post) error {
hasMedia := len(post.AllMedia()) > 0 postFile, err := f.createFile(post)
postFile, err := f.createFile(post, hasMedia, filenameTemplate)
if err != nil { if err != nil {
return err return err
@ -88,7 +91,7 @@ func (f FileWriter) Write(post *client.Post, templateFile, filenameTemplate stri
} }
} }
tmpl, err := resolveTemplate(templateFile) tmpl, err := resolveTemplate(f.templateFile)
context := TemplateContext{ context := TemplateContext{
Post: post, Post: post,
} }
@ -102,11 +105,11 @@ func (f FileWriter) Write(post *client.Post, templateFile, filenameTemplate stri
return nil return nil
} }
func formatFilename(post *client.Post, filenameTemplate string) (string, error) { func (f *FileWriter) formatFilename(post *client.Post) (string, error) {
tmplString := "{{.Post.Id}}" tmplString := "{{.Post.Id}}"
if filenameTemplate != "" { if f.filenameTemplate != "" {
tmplString = filenameTemplate tmplString = f.filenameTemplate
} }
tmpl := template.Must(template.New("filename").Parse(tmplString)) tmpl := template.Must(template.New("filename").Parse(tmplString))
@ -131,10 +134,11 @@ func formatFilename(post *client.Post, filenameTemplate string) (string, error)
return nameBuffer.String(), nil return nameBuffer.String(), nil
} }
func (f FileWriter) createFile(post *client.Post, shouldBundle bool, filenameTemplate string) (PostFile, error) { func (f FileWriter) createFile(post *client.Post) (PostFile, error) {
var postFile PostFile var postFile PostFile
outputFilename, err := formatFilename(post, filenameTemplate) shouldBundle := len(post.AllMedia()) > 0
outputFilename, err := f.formatFilename(post)
extension := filepath.Ext(outputFilename) extension := filepath.Ext(outputFilename)
if extension == "" { if extension == "" {

View file

@ -41,7 +41,7 @@ func main() {
log.Panicln(err) log.Panicln(err)
} }
fileWriter, err := files.New(*dist) fileWriter, err := files.New(*dist, *templateFile, *filenameTemplate)
posts := c.Posts() posts := c.Posts()
postsCount := len(posts) postsCount := len(posts)
@ -52,7 +52,7 @@ func main() {
continue continue
} }
if err := fileWriter.Write(post, *templateFile, *filenameTemplate); err != nil { if err := fileWriter.Write(post); err != nil {
log.Panicln("error writing post to file: %w", err) log.Panicln("error writing post to file: %w", err)
break break
} }