summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-01-01 15:23:07 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-01-01 15:23:07 +0100
commit1d20a28df8583ee5b8381bb3e4b4a23eec478597 (patch)
treea387fc72370ff408564d9e95ad75b0e27420e83c
parent207b1d560e310d89799584a152b4e1006c75c6ab (diff)
use io.Writer
-rw-r--r--main.go36
-rw-r--r--rss.go13
2 files changed, 25 insertions, 24 deletions
diff --git a/main.go b/main.go
index 8d142ce..dc83ac2 100644
--- a/main.go
+++ b/main.go
@@ -8,19 +8,24 @@ import (
irc "github.com/fluffle/goirc/client"
)
-func notify(conn *irc.Conn, target string) chan string {
+type Notify struct {
+ conn *irc.Conn
+ target string
+}
+
+func NewNotify(conn *irc.Conn, target string) *Notify {
+ return &Notify{conn: conn, target: target}
+}
+
+func (n *Notify) Write(p []byte) (int, error) {
const maxLen = 500
- c := make(chan string, 1)
- go func() {
- for msg := range c {
- if len(msg) > maxLen {
- msg = msg[:maxLen] + "..."
- }
- log.Println("send", msg)
- conn.Notice(target, msg)
- }
- }()
- return c
+ sz := len(p)
+ if sz > maxLen {
+ p = append(p[:maxLen], []byte("...")...)
+ }
+ log.Printf("Send %s", p)
+ n.conn.Notice(n.target, string(p))
+ return sz, nil
}
func privmsg(room string) irc.HandlerFunc {
@@ -33,13 +38,12 @@ func privmsg(room string) irc.HandlerFunc {
}
default:
for _, v := range getLinks(t) {
- log.Println("URL", v)
title, err := getTitle(v)
if err != nil {
- log.Println(err)
+ log.Printf("URL %v: %v", v, err)
}
if title != "" {
- conn.Notice(line.Target(), fmt.Sprintf("Title: %v", t))
+ fmt.Fprintf(NewNotify(conn, line.Target()), "Title: %v", t)
}
}
}
@@ -66,7 +70,7 @@ func main() {
conn.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, _ *irc.Line) {
conn.Join(*room)
- go Watch(notify(conn, *room), Feeds)
+ go Watch(NewNotify(conn, *room), Feeds)
})
conn.HandleFunc(irc.PRIVMSG, privmsg(*room))
diff --git a/rss.go b/rss.go
index 6f5239b..a445054 100644
--- a/rss.go
+++ b/rss.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "io"
"log"
"time"
@@ -30,7 +31,7 @@ func (n News) String() string {
return s
}
-func (f Feed) watch(news chan News) {
+func (f Feed) watch(w io.Writer) {
ticker := time.NewTicker(f.Every)
defer ticker.Stop()
for t := range ticker.C {
@@ -42,18 +43,14 @@ func (f Feed) watch(news chan News) {
last := t.Add(-f.Every)
for _, i := range r.Channel.Items {
if i.PubDate.After(last) {
- news <- News{f, i}
+ fmt.Fprint(w, News{f, i})
}
}
}
}
-func Watch(msg chan string, feeds []Feed) {
- news := make(chan News)
+func Watch(w io.Writer, feeds []Feed) {
for _, feed := range feeds {
- go feed.watch(news)
- }
- for n := range news {
- msg <- fmt.Sprint(n)
+ go feed.watch(w)
}
}