diff --git a/entry.go b/entry.go index 376f367..5648430 100644 --- a/entry.go +++ b/entry.go @@ -178,13 +178,17 @@ func generateRandomString(now time.Time, n int) string { return string(b) } -func WriteEntry(entry *Entry) (string, error) { - file := WriteHugoPost(entry) - err := CreateFile(entry.filename, file, entry.title) +func WriteEntry(entry *Entry) (location string, err error) { + file, err := WriteHugoPost(entry) if err != nil { - return "", err + return } - return entry.location, nil + err = CreateFile(entry.filename, file, entry.title) + if err != nil { + return + } + location = entry.location + return } func analyzeURL(url string) (filePath string, section string, slug string, err error) { diff --git a/go.mod b/go.mod index e015d45..90cc33f 100644 --- a/go.mod +++ b/go.mod @@ -4,5 +4,5 @@ go 1.13 require ( gopkg.in/yaml.v2 v2.2.7 - willnorris.com/go/webmention v0.0.0-20191104072158-c7fb13569b62 // indirect + willnorris.com/go/webmention v0.0.0-20191104072158-c7fb13569b62 ) diff --git a/post.go b/post.go index 0f56c78..16aeac1 100644 --- a/post.go +++ b/post.go @@ -8,61 +8,76 @@ import ( "time" ) -func writeFrontMatter(entry *Entry) string { - var buff bytes.Buffer - t := time.Now().Format(time.RFC3339) - buff.WriteString("---\n") - if len(entry.title) > 0 { - buff.WriteString("title: \"" + entry.title + "\"\n") - } - buff.WriteString("date: " + t + "\n") - buff.WriteString("tags:\n") - for _, tag := range entry.tags { - buff.WriteString("- " + tag + "\n") - } - if len(entry.link) > 0 { - buff.WriteString("externalURL: " + entry.link + "\n") - } - buff.WriteString("indieweb:\n") - if len(entry.replyLink) > 0 { - buff.WriteString(" reply:\n link: " + entry.replyLink + "\n") - if len(entry.replyTitle) > 0 { - buff.WriteString(" title: " + entry.replyTitle + "\n") - } - } - if len(entry.likeLink) > 0 { - buff.WriteString(" like:\n link: " + entry.likeLink + "\n") - if len(entry.likeTitle) > 0 { - buff.WriteString(" title: " + entry.likeTitle + "\n") - } - } - buff.WriteString("---\n") - return buff.String() +type Frontmatter struct { + Title string `yaml:"title,omitempty"` + Date string `yaml:"date,omitempty"` + Lastmod string `yaml:"lastmod,omitempty"` + Tags []string `yaml:"tags,omitempty"` + ExternalURL string `yaml:"externalURL,omitempty"` + Indieweb Indieweb `yaml:"indieweb,omitempty"` } -func WriteHugoPost(entry *Entry) string { +type Indieweb struct { + Reply Reply `yaml:"reply,omitempty"` + Like Like `yaml:"like,omitempty"` +} + +type Reply struct { + Link string `yaml:"link,omitempty"` + Title string `yaml:"title,omitempty"` +} + +type Like struct { + Link string `yaml:"link,omitempty"` + Title string `yaml:"title,omitempty"` +} + +func writeFrontMatter(entry *Entry) (frontmatter string, err error) { var buff bytes.Buffer - buff.WriteString(writeFrontMatter(entry)) + writeFrontmatter := &Frontmatter{ + Title: entry.title, + Date: time.Now().Format(time.RFC3339), + Lastmod: entry.lastmod, + Tags: entry.tags, + ExternalURL: entry.link, + Indieweb: Indieweb{ + Reply: Reply{ + Link: entry.replyLink, + Title: entry.replyTitle, + }, + Like: Like{ + Link: entry.likeLink, + Title: entry.likeTitle, + }, + }, + } + yamlBytes, err := yaml.Marshal(&writeFrontmatter) + if err != nil { + err = errors.New("failed marshaling frontmatter") + return + } + buff.WriteString("---\n") + buff.Write(yamlBytes) + buff.WriteString("---\n") + frontmatter = buff.String() + return +} + +func WriteHugoPost(entry *Entry) (string, error) { + var buff bytes.Buffer + frontmatter, err := writeFrontMatter(entry) + if err != nil { + return "", err + } + buff.WriteString(frontmatter) if len(entry.content) > 0 { buff.WriteString(entry.content) } - return buff.String() + return buff.String(), nil } func readFrontMatter(frontmatter string, entry *Entry) (err error) { - parsedFrontmatter := &struct { - Title string - Date string - Lastmod string - Tags []string - ExternalURL string `yaml:"externalURL"` - Indieweb struct { - Reply struct { - Link string - Title string - } - } - }{} + parsedFrontmatter := &Frontmatter{} err = yaml.Unmarshal([]byte(frontmatter), &parsedFrontmatter) if err != nil { err = errors.New("failed parsing frontmatter") @@ -88,6 +103,12 @@ func readFrontMatter(frontmatter string, entry *Entry) (err error) { if len(parsedFrontmatter.Indieweb.Reply.Title) > 0 { entry.replyTitle = parsedFrontmatter.Indieweb.Reply.Title } + if len(parsedFrontmatter.Indieweb.Like.Link) > 0 { + entry.replyLink = parsedFrontmatter.Indieweb.Like.Link + } + if len(parsedFrontmatter.Indieweb.Like.Title) > 0 { + entry.replyTitle = parsedFrontmatter.Indieweb.Like.Title + } return }