tag listing and item getting ready
Former-commit-id: f1134377a7afa6202c0f7180885912456add33femaster
parent
84d5906d9b
commit
4bd05d15b4
37
rss/feed.go
37
rss/feed.go
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue