all repos — aflux @ 4a04d09a8d51767286692e8897a917efddd93236

main.go (view raw)

 1package main
 2
 3import (
 4	"flag"
 5	"fmt"
 6	"os"
 7	"sort"
 8
 9	htmltomarkdown "github.com/JohannesKaufmann/html-to-markdown/v2"
10	glamour "github.com/charmbracelet/glamour"
11	goFeed "github.com/mmcdole/gofeed"
12)
13
14type Options struct {
15	sortAsc  bool
16	showDesc bool
17}
18
19func main() {
20	url := os.Getenv("ATOM_URL")
21	sortAsc := flag.Bool("s", false, "Sort from oldest to newest")
22	showDesc := flag.Bool("d", false, "Show description for each event")
23	flag.Parse()
24
25	if url == "" {
26		url = "https://5ika.ch/posts/index.xml"
27	}
28
29	feedString := getFeedString(url, Options{
30		sortAsc:  *sortAsc,
31		showDesc: *showDesc,
32	})
33
34	fmt.Print(feedString)
35}
36
37func getFeedString(url string, options Options) string {
38	fmt.Printf("Get feed from %s\n\n", url)
39	fp := goFeed.NewParser()
40	feed, _ := fp.ParseURL(url)
41
42	if options.sortAsc {
43		sort.Sort(feed)
44	}
45
46	feedString := ""
47	for _, item := range feed.Items {
48		feedString = fmt.Sprintf("%s%s", feedString, renderFeedItem(item, options.showDesc))
49	}
50
51	return feedString
52}
53
54func renderFeedItem(item *goFeed.Item, showDesc bool) string {
55	contentMd, _ := htmltomarkdown.ConvertString(item.Description)
56	glamourRender, _ := glamour.NewTermRenderer(
57		glamour.WithAutoStyle(),
58		glamour.WithStylePath("./catppuccin.glamour.json"),
59	)
60	content, _ := glamourRender.Render(contentMd)
61
62	itemString := fmt.Sprintf("%s%s %s\n",
63		style.date.Render(item.PublishedParsed.Format("02.01.2006 15:04")),
64		style.author.Render(item.Author.Name),
65		style.title.Render(item.Title),
66	)
67	if showDesc {
68		itemString = fmt.Sprintf("%s%s\n", itemString, content)
69	}
70
71	return itemString
72}