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:
21
rss/feed.go
21
rss/feed.go
@@ -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 {
|
||||
|
||||
@@ -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
52
rss/serialize.go
Normal 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
71
rss/serialize_test.go
Normal 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())
|
||||
}
|
||||
Reference in New Issue
Block a user