From b5713e18440747cff795621018816ffdc73aff84 Mon Sep 17 00:00:00 2001 From: Adam Piaseczny Date: Tue, 3 Jan 2023 16:51:58 +0100 Subject: [PATCH] refactor: got rid of the createfakecontent method --- internal/backend/cache/backend.go | 4 +- internal/backend/fake/backend.go | 82 +++---------------------------- internal/backend/web/backend.go | 10 ++-- internal/rss/rss.go | 32 +++++++++--- rss.rss => test/feeds/test.xml | 0 5 files changed, 39 insertions(+), 89 deletions(-) rename rss.rss => test/feeds/test.xml (100%) diff --git a/internal/backend/cache/backend.go b/internal/backend/cache/backend.go index 36436e6..862a170 100644 --- a/internal/backend/cache/backend.go +++ b/internal/backend/cache/backend.go @@ -108,8 +108,8 @@ func (b Backend) FetchArticles(feedName string) tea.Cmd { for _, item := range items { result = append(result, simpleList.NewListItem( item.Title, - item.Description, - rss.Glamourize(item), + rss.HTMLToText(item.Description), + rss.Markdownize(item), )) } diff --git a/internal/backend/fake/backend.go b/internal/backend/fake/backend.go index bb81f62..407dea8 100644 --- a/internal/backend/fake/backend.go +++ b/internal/backend/fake/backend.go @@ -2,12 +2,11 @@ package fake import ( "os" - "strings" - "time" + "path/filepath" - md "github.com/JohannesKaufmann/html-to-markdown" "github.com/TypicalAM/goread/internal/backend" simpleList "github.com/TypicalAM/goread/internal/list" + "github.com/TypicalAM/goread/internal/rss" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/mmcdole/gofeed" @@ -58,7 +57,8 @@ func (b Backend) FetchFeeds(catName string) tea.Cmd { // Return some fake articles func (b Backend) FetchArticles(feedName string) tea.Cmd { return func() tea.Msg { - file, err := os.Open("rss.rss") + path := filepath.Join("test", "feeds", "test.xml") + file, err := os.Open(path) if err != nil { return backend.FetchErrorMessage{ Description: "Could not open file", @@ -77,12 +77,11 @@ func (b Backend) FetchArticles(feedName string) tea.Cmd { } var result []list.Item - for i := range feed.Items { - content := CreateFakeContent(i, feed) + for _, item := range feed.Items { result = append(result, simpleList.NewListItem( - content.Title, - strings.Join(content.Categories, ", "), - content.MoreContent(), + item.Title, + rss.HTMLToText(item.Description), + rss.Markdownize(*item), )) } @@ -91,71 +90,6 @@ func (b Backend) FetchArticles(feedName string) tea.Cmd { } } -// Fake backend logic -type Item struct { - Title string `json:"title,omitempty"` - Description string `json:"description,omitempty"` - Content string `json:"content,omitempty"` - Links []string `json:"links,omitempty"` - UpdatedParsed *time.Time `json:"updatedParsed,omitempty"` - PublishedParsed *time.Time `json:"publishedParsed,omitempty"` - Authors []*gofeed.Person `json:"authors,omitempty"` - Image *gofeed.Image `json:"image,omitempty"` - Categories []string `json:"categories,omitempty"` -} - -// A function to create fake text content -func CreateFakeContent(id int, feed *gofeed.Feed) *Item { - item := &Item{} - - item.Title = feed.Items[id].Title - item.Description = feed.Items[id].Description - item.Content = feed.Items[id].Content - item.Links = feed.Items[id].Links - item.UpdatedParsed = feed.Items[id].UpdatedParsed - item.PublishedParsed = feed.Items[id].PublishedParsed - item.Authors = feed.Items[id].Authors - item.Image = feed.Items[id].Image - item.Categories = feed.Items[id].Categories - - return item -} - -func (i Item) MoreContent() string { - var mdown string - - // Add the title - mdown += "# " + i.Title + "\n " - - // If there are no authors, then we don't want to add a newline - if i.Authors != nil { - mdown += i.Authors[0].Name + "\n" - } - - // Show when the article was published if available - if i.PublishedParsed != nil { - mdown += "\n" - mdown += "Published: " + i.PublishedParsed.Format("2006-01-02 15:04:05") - } - - mdown += "\n\n" - mdown += htmlToMarkdown(i.Description) - - return mdown -} - -// htmlToMarkdown converts html to markdown using the html-to-markdown library -func htmlToMarkdown(content string) string { - converter := md.NewConverter("", true, nil) - - markdown, err := converter.ConvertString(content) - if err != nil { - panic(err) - } - - return markdown -} - // Close the backend func (b Backend) Close() error { return nil diff --git a/internal/backend/web/backend.go b/internal/backend/web/backend.go index 90d5764..e2fdf61 100644 --- a/internal/backend/web/backend.go +++ b/internal/backend/web/backend.go @@ -2,7 +2,6 @@ package web import ( "github.com/TypicalAM/goread/internal/backend" - "github.com/TypicalAM/goread/internal/backend/fake" simpleList "github.com/TypicalAM/goread/internal/list" "github.com/TypicalAM/goread/internal/rss" "github.com/charmbracelet/bubbles/list" @@ -93,12 +92,11 @@ func (b Backend) FetchArticles(feedName string) tea.Cmd { // Create the list of list items var result []list.Item - for i := range feed.Items { - content := fake.CreateFakeContent(i, feed) + for _, item := range feed.Items { result = append(result, simpleList.NewListItem( - content.Title, - content.Description, - content.MoreContent(), + item.Title, + rss.HTMLToText(item.Description), + rss.Markdownize(*item), )) } diff --git a/internal/rss/rss.go b/internal/rss/rss.go index 9c0a1ac..7f2f993 100644 --- a/internal/rss/rss.go +++ b/internal/rss/rss.go @@ -4,8 +4,10 @@ import ( "errors" "os" "sort" + "strings" md "github.com/JohannesKaufmann/html-to-markdown" + "github.com/PuerkitoBio/goquery" "github.com/mmcdole/gofeed" "gopkg.in/yaml.v3" ) @@ -171,14 +173,14 @@ func (rss Rss) GetFeedURL(feedName string) (string, error) { return "", ErrNotFound } -// Glamourize will return a string that can be used to display the rss feeds -func Glamourize(item gofeed.Item) string { +// Markdownize will return a string that can be used to display the rss feeds +func Markdownize(item gofeed.Item) string { var mdown string // Add the title mdown += "# " + item.Title + "\n " - // If there are no authors, then we don't want to add a newline + // If there are no authors, then don't add the author if item.Authors != nil { mdown += item.Authors[0].Name + "\n" } @@ -189,16 +191,32 @@ func Glamourize(item gofeed.Item) string { mdown += "Published: " + item.PublishedParsed.Format("2006-01-02 15:04:05") } + // Convert the html to markdown mdown += "\n\n" + mdown += htmlToMarkdown(item.Description) + return mdown +} - // Convert the description html to markdown +// htmlToMarkdown converts html to markdown using the html-to-markdown library +func htmlToMarkdown(content string) string { converter := md.NewConverter("", true, nil) - descMarkdown, err := converter.ConvertString(item.Description) + + markdown, err := converter.ConvertString(content) if err != nil { panic(err) } - mdown += descMarkdown + return markdown +} - return mdown +// HTMLToText converts html to text using the goquery library +func HTMLToText(content string) string { + // Create a new document + doc, err := goquery.NewDocumentFromReader(strings.NewReader(content)) + if err != nil { + panic(err) + } + + // Return the text + return doc.Text() } diff --git a/rss.rss b/test/feeds/test.xml similarity index 100% rename from rss.rss rename to test/feeds/test.xml