tag listing and item getting ready

Former-commit-id: f1134377a7afa6202c0f7180885912456add33fe
master
bel 2019-06-22 14:03:14 -06:00
parent 84d5906d9b
commit 4bd05d15b4
2 changed files with 74 additions and 0 deletions

View File

@ -23,6 +23,27 @@ 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 newFeed(key string) *Feed {
return &Feed{
Key: key,
@ -102,6 +123,22 @@ func (f *Feed) save() error {
return db.Set(f.Key, b, nsFeeds)
}
func (f *Feed) Items(limit int) ([]*Item, error) {
keys, err := f.List(limit)
if err != nil {
return nil, err
}
results := []*Item{}
for j := range keys {
i := &Item{}
if err := i.Load(keys[j], f.Key); err != nil {
return nil, err
}
results = append(results, i)
}
return results, nil
}
func (f *Feed) List(limit int) ([]string, error) {
keys, err := config.Values().DB.List([]string{nsItems, f.Key})
if err != nil {

View File

@ -155,6 +155,17 @@ func TestRSSFeedPull(t *testing.T) {
t.Fatal(itemKeys[0])
}
items, err := f.Items(1)
if err != nil {
t.Fatal(err)
}
if len(items) < 1 {
t.Fatal(len(items))
}
if items[0].ID() != itemKeys[0] {
t.Fatalf("%v vs %v", items[0].ID(), itemKeys[0])
}
i := &Item{}
if err := i.Load(itemKeys[0], f.Key); err != nil {
t.Fatal(err)
@ -166,3 +177,29 @@ 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)
}
}