4c35eaad3b829115eb6aeee5ed4945e037f08fda — Nate Dobbins 4 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 @@   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 @@ 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 @@ 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)