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}