chore: use gomark in rss api

This commit is contained in:
Steven
2023-12-14 22:33:20 +08:00
parent 242f64fa8e
commit e0290b94b4
3 changed files with 15 additions and 12 deletions

View File

@ -1,7 +1,6 @@
package v1
import (
"bytes"
"context"
"encoding/json"
"fmt"
@ -12,9 +11,11 @@ import (
"github.com/gorilla/feeds"
"github.com/labstack/echo/v4"
"github.com/yuin/goldmark"
"github.com/usememos/memos/internal/util"
"github.com/usememos/memos/plugin/gomark/parser"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
"github.com/usememos/memos/plugin/gomark/render/html"
"github.com/usememos/memos/store"
)
@ -117,10 +118,14 @@ func (s *APIV1Service) generateRSSFromMemoList(ctx context.Context, memoList []*
if err != nil {
return "", err
}
description, err := getRSSItemDescription(memoMessage.Content)
if err != nil {
return "", err
}
feed.Items[i] = &feeds.Item{
Title: getRSSItemTitle(memoMessage.Content),
Link: &feeds.Link{Href: baseURL + "/m/" + fmt.Sprintf("%d", memoMessage.ID)},
Description: getRSSItemDescription(memoMessage.Content),
Description: description,
Created: time.Unix(memoMessage.CreatedTs, 0),
Enclosure: &feeds.Enclosure{Url: baseURL + "/m/" + fmt.Sprintf("%d", memoMessage.ID) + "/image"},
}
@ -182,7 +187,7 @@ func getRSSItemTitle(content string) string {
return title
}
func getRSSItemDescription(content string) string {
func getRSSItemDescription(content string) (string, error) {
var description string
if isTitleDefined(content) {
var firstLineEnd = strings.Index(content, "\n")
@ -191,12 +196,13 @@ func getRSSItemDescription(content string) string {
description = content
}
// TODO: use our `./plugin/gomark` parser to handle markdown-like content.
var buf bytes.Buffer
if err := goldmark.Convert([]byte(description), &buf); err != nil {
panic(err)
tokens := tokenizer.Tokenize(description)
nodes, err := parser.Parse(tokens)
if err != nil {
return "", err
}
return buf.String()
result := html.NewHTMLRender().Render(nodes)
return result, nil
}
func isTitleDefined(content string) bool {