summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-21 22:11:22 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-21 22:11:22 +0100
commit59f36218c854b5af5c6aa048e8ddaa4a19291f10 (patch)
treed151f9dfd71e006efc58635f5a39dd858b8e29ab
parent77ae9516d2e78eb792477a07c1489359f18e5d74 (diff)
Try to simplify, may be broken
-rw-r--r--main.go2
-rw-r--r--rss.go74
2 files changed, 38 insertions, 38 deletions
diff --git a/main.go b/main.go
index d878cfc..448a169 100644
--- a/main.go
+++ b/main.go
@@ -29,7 +29,7 @@ func main() {
c.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, line *irc.Line) {
conn.Join(*room)
- go ShowNews(conn, line)
+ ShowNews(conn, *room)
})
c.HandleFunc(irc.KICK, func(conn *irc.Conn, line *irc.Line) {
diff --git a/rss.go b/rss.go
index 1afc246..df6c9f9 100644
--- a/rss.go
+++ b/rss.go
@@ -10,46 +10,46 @@ import (
)
type Feed struct {
- Name string
- URL string
- Period time.Duration
+ Name string
+ URL string
+ Every time.Duration
}
var Feeds = []Feed{
{
- Name: "LOR News",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=1`,
- Period: time.Hour,
+ 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`,
- Period: time.Minute,
+ Name: "LOR Forum",
+ URL: `https://www.linux.org.ru/section-rss.jsp?section=2&filter=tech`,
+ Every: time.Minute,
},
{
- Name: "LOR Gallery",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=3`,
- Period: 2 * time.Hour,
+ 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`,
- Period: 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`,
- Period: 4 * time.Hour,
+ Name: "OpenNET",
+ URL: `http://www.opennet.ru/opennews/opennews_all_noadv.rss`,
+ Every: 4 * time.Hour,
},
{
- Name: "Undeadly",
- URL: `http://undeadly.org/cgi?action=rss`,
- Period: 2 * time.Hour,
+ Name: "Undeadly",
+ URL: `http://undeadly.org/cgi?action=rss`,
+ Every: 2 * time.Hour,
},
{
- Name: "Kernel",
- URL: `https://www.kernel.org/feeds/kdist.xml`,
- Period: 6 * time.Hour,
+ Name: "Kernel",
+ URL: `https://www.kernel.org/feeds/kdist.xml`,
+ Every: 6 * time.Hour,
},
}
@@ -58,8 +58,6 @@ type News struct {
rss.Item
}
-var news = make(chan News)
-
func (n News) String() string {
s := fmt.Sprintf("%v: %v", n.Name, n.Title)
if n.Author != "" {
@@ -71,16 +69,12 @@ func (n News) String() string {
return s
}
-func ShowNews(conn *irc.Conn, _ *irc.Line) {
- for n := range news {
- conn.Notice(*room, n.String())
- }
-}
+func ShowNews(conn *irc.Conn, room string) {
+ news := make(chan News)
-func init() {
for _, f := range Feeds {
- go func(c chan News, f Feed) {
- ticker := time.NewTicker(f.Period)
+ go func(f Feed) {
+ ticker := time.NewTicker(f.Every)
defer ticker.Stop()
for t := range ticker.C {
r, err := rss.Fetch(f.URL)
@@ -88,13 +82,19 @@ func init() {
log.Println(f.Name, err)
return
}
- to := t.Add(-f.Period)
+ to := t.Add(-f.Every)
for _, i := range r.Channel.Items {
if i.PubDate.After(to) {
- c <- News{f, i}
+ news <- News{f, i}
}
}
}
- }(news, f)
+ }(f)
}
+
+ go func() {
+ for n := range news {
+ conn.Notice(room, n.String())
+ }
+ }()
}