diff --git a/.gitignore b/.gitignore index 13b39e4..9fcf886 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.key +rssmon2 +db *.crt *.pem *.swp diff --git a/main.go b/main.go index da29a2c..9067a8c 100644 --- a/main.go +++ b/main.go @@ -1,4 +1,102 @@ package main +import ( + "local1/logger" + "local3/rssmon2/config" + "local3/rssmon2/fetch" + "local3/rssmon2/monitor" + "local3/rssmon2/rss" + "local3/rssmon2/server" + "local3/rssmon2/store" +) + +const nsForFeeds = "FEEDS" + func main() { + config := config.New() + + var sclient store.Client + var err error + if sclient, err = store.NewBolt(config.DBPath); err != nil { + panic(err) + } + defer sclient.Close() + + // need to load old from file + allFeeds := make(map[string]*rss.Feed) + fetcher, err := fetch.New( + config.FetchPort, + func(url string, raw []byte) error { + var err error + var items []*rss.Item + feed, ok := allFeeds[url] + if !ok { + feed, items, err = rss.New(url, "Blue", "") + if err != nil { + return err + } + } else { + items, err = allFeeds[url].Update() + if err != nil { + return err + } + } + b, err := feed.Serialize() + if err != nil { + return err + } + if err := sclient.Set(nsForFeeds, feed.ID(), b); err != nil { + return err + } + logger.Log("Saved feed", feed) + for i := range items { + b, err := items[i].Serialize() + if err != nil { + return err + } + if err := sclient.Set(feed.ID(), items[i].ID(), b); err != nil { + return err + } + logger.Log("Saved feed item", feed.ID(), items[i].ID(), items[i]) + } + return nil + }, + ) + if err != nil { + panic(err) + } + if err := fetcher.Start(); err != nil { + panic(err) + } + defer fetcher.Stop() + + mon, err := monitor.New(config.MonitorPort) + if err != nil { + panic(err) + } + if err := mon.Start(); err != nil { + panic(err) + } + defer mon.Stop() + /* + go func() { // API submissions to itemsNew + itemsNew <- *(monitor.NewItem("https://xkcd.com/rss.xml", time.Minute)) + }() + go func() { + for doneItem := range itemsDone { + if err := fetcher.FetchProcess(doneItem.URL); err != nil { + logger.Log(err) + } + } + }() + */ + + server, err := server.New(config.Port) + if err != nil { + panic(err) + } + + if err := server.Serve(); err != nil { + panic(err) + } }