summaryrefslogtreecommitdiff
path: root/rss.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-01-01 09:49:01 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-01-01 09:49:01 +0100
commit2e61e20da46d10af33a84a18dc2e1b77e43002b3 (patch)
tree7245894614a2c5c294cd48047f3d2b2a2cf4ccea /rss.go
parent50d3b0f4927c3fc4b92cc368062ce2bf42e1a99d (diff)
parente663cdca3df5471ffbf7bfc2d329e7780e5ccf6f (diff)
Merge branch 'kiss'
Diffstat (limited to 'rss.go')
-rw-r--r--rss.go77
1 files changed, 23 insertions, 54 deletions
diff --git a/rss.go b/rss.go
index 143c82b..6f5239b 100644
--- a/rss.go
+++ b/rss.go
@@ -6,7 +6,6 @@ import (
"time"
"dim13.org/rss"
- irc "github.com/fluffle/goirc/client"
)
type Feed struct {
@@ -15,34 +14,6 @@ type Feed struct {
Every time.Duration
}
-var Feeds = []Feed{
- {
- Name: "LOR News",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=1`,
- Every: time.Hour,
- },
- {
- Name: "LOR Forum",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=2&filter=tech`,
- Every: 5 * time.Minute,
- },
- {
- Name: "LOR Gallery",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=3`,
- Every: 2 * time.Hour,
- },
- {
- Name: "LOR Polls",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=5`,
- Every: 2 * time.Hour,
- },
- {
- Name: "OpenNET",
- URL: `http://www.opennet.ru/opennews/opennews_all_noadv.rss`,
- Every: 4 * time.Hour,
- },
-}
-
type News struct {
Feed
rss.Item
@@ -59,32 +30,30 @@ func (n News) String() string {
return s
}
-func ShowNews(conn *irc.Conn, room string) {
- news := make(chan News)
-
- for _, f := range Feeds {
- go func(f Feed) {
- ticker := time.NewTicker(f.Every)
- defer ticker.Stop()
- for t := range ticker.C {
- r, err := rss.Fetch(f.URL)
- if err != nil {
- log.Println(f.Name, err)
- return
- }
- to := t.Add(-f.Every)
- for _, i := range r.Channel.Items {
- if i.PubDate.After(to) {
- news <- News{f, i}
- }
- }
+func (f Feed) watch(news chan News) {
+ ticker := time.NewTicker(f.Every)
+ defer ticker.Stop()
+ for t := range ticker.C {
+ r, err := rss.Fetch(f.URL)
+ if err != nil {
+ log.Println(f.Name, err)
+ return
+ }
+ last := t.Add(-f.Every)
+ for _, i := range r.Channel.Items {
+ if i.PubDate.After(last) {
+ news <- News{f, i}
}
- }(f)
+ }
}
+}
- go func() {
- for n := range news {
- conn.Notice(room, n.String())
- }
- }()
+func Watch(msg chan string, feeds []Feed) {
+ news := make(chan News)
+ for _, feed := range feeds {
+ go feed.watch(news)
+ }
+ for n := range news {
+ msg <- fmt.Sprint(n)
+ }
}