ready to pass from server to monitor but monitor still needs save to disk and reload

Former-commit-id: 1cebef822fdc157f0622b4e0fb9f93db48e0e70d
This commit is contained in:
bel
2019-06-22 14:32:46 -06:00
parent 4bd05d15b4
commit 5e87f1659d
7 changed files with 192 additions and 69 deletions

View File

@@ -23,25 +23,8 @@ type Feed struct {
Tags []string
}
func TaggedFeeds(tag string) ([]*Feed, error) {
db := config.Values().DB
feedNames, err := db.List([]string{nsFeeds})
if err != nil {
return nil, err
}
results := []*Feed{}
for _, feedName := range feedNames {
f := newFeed(feedName)
if err := f.Load(); err != nil {
return nil, err
}
for i := range f.Tags {
if f.Tags[i] == tag {
results = append(results, f)
}
}
}
return results, nil
func SubmitFeed(f *Feed) error {
return f.save()
}
func newFeed(key string) *Feed {

View File

@@ -177,29 +177,3 @@ func TestRSSFeedPull(t *testing.T) {
t.Fatal(i)
}
}
func TestRSSTaggedFeeds(t *testing.T) {
initRSSFeed()
for _, k := range []string{"a", "b"} {
f := newFeed(k)
f.Tags = []string{"TAG"}
if err := f.save(); err != nil {
t.Fatal(err)
}
}
if feeds, err := TaggedFeeds("NOTTAG"); err != nil {
t.Fatal(err)
} else if len(feeds) != 0 {
t.Fatal(len(feeds))
}
if feeds, err := TaggedFeeds("TAG"); err != nil {
t.Fatal(err)
} else if len(feeds) != 2 {
t.Fatal(len(feeds))
} else {
t.Logf("%v", feeds)
}
}

52
rss/serialize.go Normal file
View File

@@ -0,0 +1,52 @@
package rss
import (
"io"
"local/rssmon3/config"
"github.com/gorilla/feeds"
)
func TaggedFeeds(tag string) ([]*Feed, error) {
db := config.Values().DB
feedNames, err := db.List([]string{nsFeeds})
if err != nil {
return nil, err
}
results := []*Feed{}
for _, feedName := range feedNames {
f := newFeed(feedName)
if err := f.Load(); err != nil {
return nil, err
}
for i := range f.Tags {
if f.Tags[i] == tag {
results = append(results, f)
}
}
}
return results, nil
}
func WriteFeed(w io.Writer, tag string, items []*Item) error {
feed := &feeds.Feed{
Title: tag,
Link: &feeds.Link{},
Description: tag,
Items: make([]*feeds.Item, len(items)),
}
for i, item := range items {
feed.Items[i] = &feeds.Item{
Title: item.Title,
Link: &feeds.Link{Href: item.Link},
Description: item.Content,
Created: item.TS,
}
}
s, err := feed.ToRss()
if err != nil {
return err
}
w.Write([]byte(s))
return nil
}

71
rss/serialize_test.go Normal file
View File

@@ -0,0 +1,71 @@
package rss
import (
"bytes"
"log"
"os"
"testing"
)
func initRSSSerialize() {
initRSSFeed()
}
func TestRSSTaggedFeeds(t *testing.T) {
initRSSFeed()
for _, k := range []string{"a", "b"} {
f := newFeed(k)
f.Tags = []string{"TAG"}
if err := f.save(); err != nil {
t.Fatal(err)
}
}
if feeds, err := TaggedFeeds("NOTTAG"); err != nil {
t.Fatal(err)
} else if len(feeds) != 0 {
t.Fatal(len(feeds))
}
if feeds, err := TaggedFeeds("TAG"); err != nil {
t.Fatal(err)
} else if len(feeds) != 2 {
t.Fatal(len(feeds))
} else {
t.Logf("%v", feeds)
}
}
func TestRSSWriteFeed(t *testing.T) {
initRSSFeed()
s := mockRSS()
defer s.Close()
f := newFeed("key")
f.TitleFilter = "5[0-9]{2}"
f.ContentFilter = "b"
f.Tags = []string{"c"}
f.URL = s.URL
log.SetOutput(bytes.NewBuffer(nil))
defer log.SetOutput(os.Stderr)
if err := f.pull(); err != nil {
t.Fatal(err)
}
log.SetOutput(os.Stderr)
items, err := f.Items(5)
if err != nil {
t.Fatal(err)
}
if len(items) != 5 {
t.Fatal(len(items))
}
buff := bytes.NewBuffer(nil)
if err := WriteFeed(buff, "c", items); err != nil {
t.Fatal(err)
}
t.Logf("%s", buff.Bytes())
}