From 8c134b0ece0da2d774e2bad4df35803d3c30f500 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sat, 25 Apr 2020 17:37:42 +0200 Subject: Push global feed configuration to feeds --- internal/feed/feed.go | 2 +- pkg/config/config.go | 17 +++++++++++++++++ pkg/config/feed.go | 2 +- pkg/config/yaml.go | 5 +++-- pkg/config/yaml_test.go | 26 +++++++++++++------------- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/internal/feed/feed.go b/internal/feed/feed.go index 686de4c..d087d3a 100644 --- a/internal/feed/feed.go +++ b/internal/feed/feed.go @@ -10,7 +10,7 @@ import ( ) type Feed struct { - config.Feed + *config.Feed feed *gofeed.Feed items []feeditem cached CachedFeed diff --git a/pkg/config/config.go b/pkg/config/config.go index 83c952f..1b95f61 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -39,6 +39,15 @@ type Options struct { InclImages *bool `yaml:"include-images"` } +func (opt *Options) mergeFrom(other Options) { + if opt.MinFreq == nil { + opt.MinFreq = other.MinFreq + } + if opt.InclImages == nil { + opt.InclImages = other.InclImages + } +} + // Default feed options var DefaultFeedOptions Options @@ -111,9 +120,17 @@ func Load(path string) (*Config, error) { return nil, fmt.Errorf("while parsing: %w", err) } + cfg.pushFeedOptions() + return cfg, nil } +func (cfg *Config) pushFeedOptions() { + for _, feed := range cfg.Feeds { + feed.Options.mergeFrom(cfg.FeedOptions) + } +} + func hostname() (hostname string) { hostname, err := os.Hostname() if err != nil { diff --git a/pkg/config/feed.go b/pkg/config/feed.go index 4641cbc..a861e2e 100644 --- a/pkg/config/feed.go +++ b/pkg/config/feed.go @@ -9,4 +9,4 @@ type Feed struct { } // Convenience type for all feeds -type Feeds map[string]Feed +type Feeds map[string]*Feed diff --git a/pkg/config/yaml.go b/pkg/config/yaml.go index 53d4d98..84f4af6 100644 --- a/pkg/config/yaml.go +++ b/pkg/config/yaml.go @@ -98,6 +98,7 @@ func buildFeeds(cfg []configGroupFeed, target []string, feeds Feeds) error { return fmt.Errorf("Entry with Target %s is both a Feed and a group", target) case f.isFeed(): + feedCopy := f.Feed name := f.Feed.Name if name == "" { return fmt.Errorf("Unnamed feed") @@ -106,8 +107,8 @@ func buildFeeds(cfg []configGroupFeed, target []string, feeds Feeds) error { if _, ok := feeds[name]; ok { return fmt.Errorf("Duplicate Feed Name '%s'", name) } - f.Feed.Target = target - feeds[name] = f.Feed + feedCopy.Target = target + feeds[name] = &feedCopy case f.isGroup(): if err := buildFeeds(f.Group.Feeds, target, feeds); err != nil { diff --git a/pkg/config/yaml_test.go b/pkg/config/yaml_test.go index 501ead3..40ee325 100644 --- a/pkg/config/yaml_test.go +++ b/pkg/config/yaml_test.go @@ -44,25 +44,25 @@ func TestBuildFeeds(tst *testing.T) { feeds: []configGroupFeed{ {Target: s("foo"), Feed: Feed{Name: "muh"}}, }, - result: Feeds{"muh": Feed{Name: "muh", Target: t("foo")}}, + result: Feeds{"muh": &Feed{Name: "muh", Target: t("foo")}}, }, {name: "Simple With Target", wantErr: false, target: "moep", feeds: []configGroupFeed{ {Target: s("foo"), Feed: Feed{Name: "muh"}}, }, - result: Feeds{"muh": Feed{Name: "muh", Target: t("moep.foo")}}, + result: Feeds{"muh": &Feed{Name: "muh", Target: t("moep.foo")}}, }, {name: "Simple With Nil Target", wantErr: false, target: "moep", feeds: []configGroupFeed{ {Target: nil, Feed: Feed{Name: "muh"}}, }, - result: Feeds{"muh": Feed{Name: "muh", Target: t("moep.muh")}}, + result: Feeds{"muh": &Feed{Name: "muh", Target: t("moep.muh")}}, }, {name: "Simple With Empty Target", wantErr: false, target: "moep", feeds: []configGroupFeed{ {Target: s(""), Feed: Feed{Name: "muh"}}, }, - result: Feeds{"muh": Feed{Name: "muh", Target: t("moep")}}, + result: Feeds{"muh": &Feed{Name: "muh", Target: t("moep")}}, }, {name: "Multiple Feeds", wantErr: false, target: "moep", feeds: []configGroupFeed{ @@ -70,8 +70,8 @@ func TestBuildFeeds(tst *testing.T) { {Target: nil, Feed: Feed{Name: "bar"}}, }, result: Feeds{ - "muh": Feed{Name: "muh", Target: t("moep.foo")}, - "bar": Feed{Name: "bar", Target: t("moep.bar")}, + "muh": &Feed{Name: "muh", Target: t("moep.foo")}, + "bar": &Feed{Name: "bar", Target: t("moep.bar")}, }, }, {name: "Empty Group", wantErr: false, target: "", @@ -89,9 +89,9 @@ func TestBuildFeeds(tst *testing.T) { }}}, }, result: Feeds{ - "F1": Feed{Name: "F1", Target: t("G1.bar")}, - "F2": Feed{Name: "F2", Target: t("G1")}, - "F3": Feed{Name: "F3", Target: t("G1.F3")}, + "F1": &Feed{Name: "F1", Target: t("G1.bar")}, + "F2": &Feed{Name: "F2", Target: t("G1")}, + "F3": &Feed{Name: "F3", Target: t("G1.F3")}, }, }, {name: "Nested Groups", wantErr: false, target: "", @@ -107,10 +107,10 @@ func TestBuildFeeds(tst *testing.T) { }}}, }, result: Feeds{ - "F0": Feed{Name: "F0", Target: t("G1.F0")}, - "F1": Feed{Name: "F1", Target: t("G1.bar.F1")}, - "F2": Feed{Name: "F2", Target: t("G1.baz")}, - "F3": Feed{Name: "F3", Target: t("G1.G4.F3")}, + "F0": &Feed{Name: "F0", Target: t("G1.F0")}, + "F1": &Feed{Name: "F1", Target: t("G1.bar.F1")}, + "F2": &Feed{Name: "F2", Target: t("G1.baz")}, + "F3": &Feed{Name: "F3", Target: t("G1.G4.F3")}, }, }, } -- cgit v1.2.3-70-g09d2 tions'>+40 2010-12-01Removed feed2imap againRené 'Necoro' Neumann4-63/+0 2010-12-01Add feed2imapRené 'Necoro' Neumann4-0/+63 2010-09-04Delete old stuffRené 'Necoro' Neumann27-635/+0 2010-09-04freecadRené 'Necoro' Neumann5-8/+67 2010-08-27copy gititRené 'Necoro' Neumann2-0/+45 2010-08-12Added ikiwikiRené 'Necoro' Neumann4-9/+47 2010-08-12Bumped radicaleRené 'Necoro' Neumann4-72/+7 2010-08-04Add default configRené 'Necoro' Neumann3-1/+50 2010-08-03Removed revisionRené 'Necoro' Neumann1-0/+0 2010-08-03Added init script for radicaleRené 'Necoro' Neumann4-2/+56 2010-07-30Added radicaleRené 'Necoro' Neumann2-0/+29 2010-07-29New packagesRené 'Necoro' Neumann1-0/+0 2010-07-29New packagesRené 'Necoro' Neumann5-0/+75 2010-06-30Fix manifestRené 'Necoro' Neumann1-1/+1 2010-06-30moderncv 0.6 --> 0.10René 'Necoro' Neumann2-1/+1 2010-04-08Bumped lighttpdRené 'Necoro' Neumann5-252/+6 2010-04-01Added gpg and server useflag for fwknopRené 'Necoro' Neumann2-27/+47 2010-04-01Add fwknopRené 'Necoro' Neumann8-0/+133 2010-03-27Fix OpenSSL issue in lighttpdRené 'Necoro' Neumann3-1/+15 2010-03-26add patched lighttpdRené 'Necoro' Neumann17-0/+1208 2010-03-19Bumped app-text/highlightRené 'Necoro' Neumann2-0/+53 2010-03-02Added newer PolyML version for IsabelleRené 'Necoro' Neumann2-0/+31 2010-01-05Removed bpythonRené 'Necoro' Neumann2-33/+0 2009-11-11stgit-0.15 in portage nowRené 'Necoro' Neumann2-59/+0 2009-11-10Add stgit-0.15René 'Necoro' Neumann2-0/+59 2009-11-09Emacs stuff now in PortageRené 'Necoro' Neumann8-2222/+0 2009-11-07Emacs with fixed gtk menusRené 'Necoro' Neumann8-0/+2222 2009-10-27Remove old hibernate-script version.René 'Necoro' Neumann2-72/+0 2009-10-25Rename .bzrignore to .gitignoreRené 'Necoro' Neumann1-0/+0 2009-10-25Rename repo from 'necoro_private' to 'necoro'René 'Necoro' Neumann1-1/+1 2009-10-25Remove own hplip versionRené 'Necoro' Neumann4-210/+0 2009-10-25Remove own ctags versionRené 'Necoro' Neumann7-402/+0 2009-10-02Do not create isabelle desktop entryRené 'Necoro' Neumann2-2/+1 2009-09-28Add isabelle ebuildRené 'Necoro' Neumann3-0/+115 2009-09-05Removed glade ebuild. Newer versions included in treeRené 'Necoro' Neumann2-47/+0