4c35eaad3b829115eb6aeee5ed4945e037f08fda — Nate Dobbins 5 months ago b0904bf
Add flag to specify number of articles per source
1 files changed, 25 insertions(+), 14 deletions(-)

M openring.go
M openring.go => openring.go +25 -14
@@ 27,12 27,13 @@ type Article struct {
 
 func main() {
 	var (
-		narticles  int        = 3
-		summaryLen int        = 256
+		narticles  int = 3
+		perSource  int = 1
+		summaryLen int = 256
 		sources    []*url.URL
 	)
 
-	opts, optind, err := getopt.Getopts(os.Args[1:], "l:n:s:")
+	opts, optind, err := getopt.Getopts(os.Args[1:], "l:n:p:s:")
 	if err != nil {
 		panic(err)
 	}


@@ 48,6 49,11 @@ func main() {
 			if err != nil {
 				panic(err)
 			}
+		case 'p':
+			perSource, err = strconv.Atoi(opt.Value)
+			if err != nil {
+				panic(err)
+			}
 		case 's':
 			u, err := url.Parse(opt.Value)
 			if err != nil {


@@ 103,17 109,22 @@ func main() {
 			log.Printf("Warning: feed %s has no items", feed.Title)
 			continue
 		}
-		item := feed.Items[0]
-		summary := runewidth.Truncate(
-			policy.Sanitize(item.Summary), summaryLen, "…")
-		articles = append(articles, &Article{
-			Date:        item.Date,
-			SourceLink:  feed.Link,
-			SourceTitle: feed.Title,
-			Summary:     template.HTML(summary),
-			Title:       item.Title,
-			Link:        item.Link,
-		})
+		items := feed.Items
+		if len(items) > perSource {
+			items = items[:perSource]
+		}
+		for _, item := range items {
+			summary := runewidth.Truncate(
+				policy.Sanitize(item.Summary), summaryLen, "…")
+			articles = append(articles, &Article{
+				Date:        item.Date,
+				SourceLink:  feed.Link,
+				SourceTitle: feed.Title,
+				Summary:     template.HTML(summary),
+				Title:       item.Title,
+				Link:        item.Link,
+			})
+		}
 	}
 	sort.Slice(articles, func(i, j int) bool {
 		return articles[i].Date.After(articles[j].Date)