summaryrefslogtreecommitdiff
path: root/rss.go
diff options
context:
space:
mode:
Diffstat (limited to 'rss.go')
-rw-r--r--rss.go74
1 files changed, 37 insertions, 37 deletions
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())
+ }
+ }()
}