From 4bd05d15b452e7892bd3f2710663ef0a9c6183c5 Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 22 Jun 2019 14:03:14 -0600 Subject: [PATCH] tag listing and item getting ready Former-commit-id: f1134377a7afa6202c0f7180885912456add33fe --- rss/feed.go | 37 +++++++++++++++++++++++++++++++++++++ rss/feed_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/rss/feed.go b/rss/feed.go index ddd2f7d..b063610 100644 --- a/rss/feed.go +++ b/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 { diff --git a/rss/feed_test.go b/rss/feed_test.go index 8e21da9..90544c5 100644 --- a/rss/feed_test.go +++ b/rss/feed_test.go @@ -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) + } +}