Selaa lähdekoodia

Allow specifying sort order and tags through config

Svilen Markov 1 vuosi sitten
vanhempi
commit
720549ec7e
2 muutettua tiedostoa jossa 22 lisäystä ja 5 poistoa
  1. 17 1
      internal/feed/lobsters.go
  2. 5 4
      internal/widget/lobsters.go

+ 17 - 1
internal/feed/lobsters.go

@@ -2,6 +2,7 @@ package feed
 
 import (
 	"net/http"
+	"strings"
 	"time"
 )
 
@@ -54,7 +55,22 @@ func getLobstersPostsFromFeed(feedUrl string) (ForumPosts, error) {
 	return posts, nil
 }
 
-func FetchLobstersTopPosts(feedUrl string) (ForumPosts, error) {
+func FetchLobstersPosts(sortBy string, tags []string) (ForumPosts, error) {
+	var feedUrl string
+
+	if sortBy == "hot" {
+		sortBy = "hottest"
+	} else if sortBy == "new" {
+		sortBy = "newest"
+	}
+
+	if len(tags) == 0 {
+		feedUrl = "https://lobste.rs/" + sortBy + ".json"
+	} else {
+		tags := strings.Join(tags, ",")
+		feedUrl = "https://lobste.rs/t/" + tags + ".json"
+	}
+
 	posts, err := getLobstersPostsFromFeed(feedUrl)
 
 	if err != nil {

+ 5 - 4
internal/widget/lobsters.go

@@ -11,18 +11,19 @@ import (
 
 type Lobsters struct {
 	widgetBase     `yaml:",inline"`
-	FeedUrl        string          `yaml:"feed"`
 	Posts          feed.ForumPosts `yaml:"-"`
 	Limit          int             `yaml:"limit"`
 	CollapseAfter  int             `yaml:"collapse-after"`
+	SortBy         string          `yaml:"sort-by"`
+	Tags           []string        `yaml:"tags"`
 	ShowThumbnails bool            `yaml:"-"`
 }
 
 func (widget *Lobsters) Initialize() error {
 	widget.withTitle("Lobsters").withCacheDuration(30 * time.Minute)
 
-	if widget.FeedUrl == "" {
-		widget.FeedUrl = "https://lobste.rs/hottest.json"
+	if widget.SortBy == "" || (widget.SortBy != "hot" && widget.SortBy != "new") {
+		widget.SortBy = "hot"
 	}
 
 	if widget.Limit <= 0 {
@@ -37,7 +38,7 @@ func (widget *Lobsters) Initialize() error {
 }
 
 func (widget *Lobsters) Update(ctx context.Context) {
-	posts, err := feed.FetchLobstersTopPosts(widget.FeedUrl)
+	posts, err := feed.FetchLobstersPosts(widget.SortBy, widget.Tags)
 
 	if !widget.canContinueUpdateAfterHandlingErr(err) {
 		return