package main import ( "flag" "fmt" "os" "sort" htmltomarkdown "github.com/JohannesKaufmann/html-to-markdown/v2" glamour "github.com/charmbracelet/glamour" goFeed "github.com/mmcdole/gofeed" ) type Options struct { sortAsc bool showDesc bool } func main() { url := os.Getenv("ATOM_URL") sortAsc := flag.Bool("s", false, "Sort from oldest to newest") showDesc := flag.Bool("d", false, "Show description for each event") flag.Parse() if url == "" { url = "https://5ika.ch/posts/index.xml" } feedString := getFeedString(url, Options{ sortAsc: *sortAsc, showDesc: *showDesc, }) fmt.Print(feedString) } func getFeedString(url string, options Options) string { fmt.Printf("Get feed from %s\n\n", url) fp := goFeed.NewParser() feed, _ := fp.ParseURL(url) if options.sortAsc { sort.Sort(feed) } feedString := "" for _, item := range feed.Items { feedString = fmt.Sprintf("%s%s", feedString, renderFeedItem(item, options.showDesc)) } return feedString } func renderFeedItem(item *goFeed.Item, showDesc bool) string { contentMd, _ := htmltomarkdown.ConvertString(item.Description) glamourRender, _ := glamour.NewTermRenderer( glamour.WithAutoStyle(), glamour.WithStylePath("./catppuccin.glamour.json"), ) content, _ := glamourRender.Render(contentMd) itemString := fmt.Sprintf("%s%s %s\n", style.date.Render(item.PublishedParsed.Format("02.01.2006 15:04")), style.author.Render(item.Author.Name), style.title.Render(item.Title), ) if showDesc { itemString = fmt.Sprintf("%s%s\n", itemString, content) } return itemString }