diff --git a/.gitignore b/.gitignore index aed04a4..4441dce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ *.key rssmon2 db +vendor *.crt 2do +2add *.pem *.swp *.swo diff --git a/exchange/exchange.go b/exchange/exchange.go index a19f5f9..8b14012 100644 --- a/exchange/exchange.go +++ b/exchange/exchange.go @@ -7,6 +7,7 @@ import ( "local3/rssmon2/rss" "local3/rssmon2/server" "local3/rssmon2/store" + "sort" "strings" "time" ) @@ -139,6 +140,9 @@ func (ex *Exchange) GetFeedTagRSS(tag string) (string, error) { if err != nil { return "", err } + sort.Slice(combinedItems, func(i, j int) bool { + return !combinedItems[i].TS.Before(combinedItems[j].TS) + }) return rss.ToRSS(combinedFeed, combinedItems) } @@ -186,6 +190,7 @@ func (ex *Exchange) UpdateFeed(url string) { logger.Logf("can't save rss item %q.%q: %v", feed.ID(), items[i].ID(), err) return } - logger.Log("Saved feed item", feed.ID(), items[i].ID(), items[i]) + //logger.Log("Saved feed item", feed.ID(), items[i].ID(), items[i]) } + logger.Logf("Saved %d feed items for %s", len(items), feed.Title) } diff --git a/monitor/monitor.go b/monitor/monitor.go index 9cd7386..c40589f 100644 --- a/monitor/monitor.go +++ b/monitor/monitor.go @@ -77,7 +77,7 @@ func (monitor *Monitor) loop() error { if !ok { logger.Fatal("queue contains illegal item") } - monitor.trigger(item.URL) + go monitor.trigger(item.URL) item.increment() queue.Put(item) if nextEvent, err = nextEventTime(queue); err != nil { diff --git a/rss/item.go b/rss/item.go index 8d40dbe..7a72c8b 100644 --- a/rss/item.go +++ b/rss/item.go @@ -7,6 +7,7 @@ import ( "html" "io/ioutil" "net/http" + "net/url" "regexp" "strings" "time" @@ -22,10 +23,10 @@ type Item struct { } func (item *Item) String() string { - return fmt.Sprintf("Name %v, Link %v, Content %q, TS %v", + return fmt.Sprintf("Name %v, Link %v, Content %v, TS %v", item.Name, item.Link, - item.Content, + len(item.Content), item.TS.Local(), ) } @@ -57,15 +58,22 @@ func fromGofeedItem(gfitem *gofeed.Item, filter string) *Item { TS: *gofeedItemTS(gfitem), } content := gfitem.Content + if content == "" { + content = gfitem.Description + } if content == "" { content = contentFromLink(item.Link) } + if unescaped, err := url.QueryUnescape(content); err == nil { + content = unescaped + } if filter != "" { r := regexp.MustCompile(filter) matches := r.FindAllString(content, -1) content = strings.Join(matches, "
") } content = cleanImgTags(content) + content = "" + item.Name + "
" + content item.Content = content return item }