mirror of
https://github.com/adulau/mastodon-markdown-archive.git
synced 2024-11-22 01:47:05 +00:00
Embed default template file
The default template file needs to be embedded in the binary.
This commit is contained in:
parent
a24fd48d1e
commit
f35420c1e4
3 changed files with 35 additions and 26 deletions
|
@ -79,7 +79,7 @@ mastodon-markdown-archive \
|
||||||
|
|
||||||
## Template
|
## Template
|
||||||
|
|
||||||
By default, this tool uses the [post.tmp](./templates/post.tmpl) template to create the markdown file. A different template can be used by passing its path to `--template`.
|
By default, this tool uses the [post.tmp](./files/templates/post.tmpl) template to create the markdown file. A different template can be used by passing its path to `--template`.
|
||||||
|
|
||||||
For information about variables and functions available in the template context, refer to the `Write` method in [files.go](files/files.go#L108-L117).
|
For information about variables and functions available in the template context, refer to the `Write` method in [files.go](files/files.go#L104-L110).
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package files
|
package files
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
|
@ -13,6 +14,9 @@ import (
|
||||||
md "github.com/JohannesKaufmann/html-to-markdown"
|
md "github.com/JohannesKaufmann/html-to-markdown"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed templates/post.tmpl
|
||||||
|
var templates embed.FS
|
||||||
|
|
||||||
type FileWriter struct {
|
type FileWriter struct {
|
||||||
dir string
|
dir string
|
||||||
repies map[string]client.Post
|
repies map[string]client.Post
|
||||||
|
@ -44,18 +48,6 @@ func New(dir string) (FileWriter, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f FileWriter) Write(post client.Post, templateFile string) error {
|
func (f FileWriter) Write(post client.Post, templateFile string) error {
|
||||||
tmplFilename := "templates/post.tmpl"
|
|
||||||
|
|
||||||
if templateFile != "" {
|
|
||||||
tmplFilename = templateFile
|
|
||||||
}
|
|
||||||
|
|
||||||
tmplFile, err := filepath.Abs(tmplFilename)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error resolving template absolute path: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if post.InReplyToId != "" {
|
if post.InReplyToId != "" {
|
||||||
f.repies[post.InReplyToId] = post
|
f.repies[post.InReplyToId] = post
|
||||||
return nil
|
return nil
|
||||||
|
@ -65,6 +57,7 @@ func (f FileWriter) Write(post client.Post, templateFile string) error {
|
||||||
f.getReplies(post.Id, &descendants)
|
f.getReplies(post.Id, &descendants)
|
||||||
|
|
||||||
var file *os.File
|
var file *os.File
|
||||||
|
var err error
|
||||||
|
|
||||||
if len(post.MediaAttachments) == 0 {
|
if len(post.MediaAttachments) == 0 {
|
||||||
name := fmt.Sprintf("%s.md", post.Id)
|
name := fmt.Sprintf("%s.md", post.Id)
|
||||||
|
@ -89,10 +82,6 @@ func (f FileWriter) Write(post client.Post, templateFile string) error {
|
||||||
media.Path = imageFilename
|
media.Path = imageFilename
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error downloading media attachments: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
filename := filepath.Join(dir, "index.md")
|
filename := filepath.Join(dir, "index.md")
|
||||||
file, err = os.Create(filename)
|
file, err = os.Create(filename)
|
||||||
}
|
}
|
||||||
|
@ -103,18 +92,12 @@ func (f FileWriter) Write(post client.Post, templateFile string) error {
|
||||||
|
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
converter := md.NewConverter("", true, nil)
|
tmpl, err := resolveTemplate(templateFile)
|
||||||
|
|
||||||
funcs := template.FuncMap{
|
|
||||||
"tomd": converter.ConvertString,
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpl, err := template.New(filepath.Base(tmplFilename)).Funcs(funcs).ParseFiles(tmplFile)
|
|
||||||
|
|
||||||
context := TemplateContext{
|
context := TemplateContext{
|
||||||
Post: post,
|
Post: post,
|
||||||
Descendants: descendants,
|
Descendants: descendants,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = tmpl.Execute(file, context)
|
err = tmpl.Execute(file, context)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -182,3 +165,29 @@ func downloadAttachment(dir string, id string, url string) (string, error) {
|
||||||
|
|
||||||
return filename, nil
|
return filename, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resolveTemplate(templateFile string) (*template.Template, error) {
|
||||||
|
converter := md.NewConverter("", true, nil)
|
||||||
|
|
||||||
|
funcs := template.FuncMap{
|
||||||
|
"tomd": converter.ConvertString,
|
||||||
|
}
|
||||||
|
|
||||||
|
if templateFile == "" {
|
||||||
|
tmpl, err := template.New("post.tmpl").Funcs(funcs).ParseFS(templates, "templates/*.tmpl")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tmpl, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmpl, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpl, err := template.New(filepath.Base(templateFile)).Funcs(funcs).ParseGlob(templateFile)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tmpl, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmpl, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue