rssmon3/handlers/handler.go

53 lines
796 B
Go

package handlers
import (
"local/rssmon3/config"
"local/rssmon3/monitor"
"local/rssmon3/rss"
"log"
)
type Handler struct {
Jobs <-chan *monitor.Item
config.Stoppable
}
func New(jobs <-chan *monitor.Item) *Handler {
return &Handler{
Jobs: jobs,
}
}
func (h *Handler) Run() error {
for {
select {
case <-h.Stopped():
return nil
case j := <-h.Jobs:
go func(key string) {
if err := h.Job(key); err != nil {
log.Println(err)
}
}(j.Key)
}
}
}
func (h *Handler) Job(key string) error {
f := &rss.Feed{Key: key}
if err := f.Load(); err != nil {
return err
}
if err := f.Pull(); err != nil {
return err
}
for _, tag := range f.Tags {
if foo := ByTag(tag); foo != nil {
if err := foo(key); err != nil {
return err
}
}
}
return nil
}