From 1d20a28df8583ee5b8381bb3e4b4a23eec478597 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 1 Jan 2018 15:23:07 +0100 Subject: use io.Writer --- main.go | 36 ++++++++++++++++++++---------------- rss.go | 13 +++++-------- 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) } } -- cgit v1.2.3