diff --git a/docs/CONFIG.md b/docs/CONFIG.md
index e16406a..6a13aa8 100644
--- a/docs/CONFIG.md
+++ b/docs/CONFIG.md
@@ -80,11 +80,11 @@ This section defines which entries are included in the digest.
| `logic` | String | `OR` | Logic for combining different field conditions.
- `OR`: Match if *any* field condition is met.
- `AND`: Match only if *all* defined field conditions are met. |
| `feed_titles` | String[] | - | Exact matches for the RSS feed title. |
| `category_titles` | String[] | - | Exact matches for the Miniflux category title. |
-| `site_urls` | String[] | - | Prefix matches for the feed's site URL. |
+| `site_urls` | String[] | - | Prefix matches for the site URL. (Legacy: `feed_urls`) |
| `entry_urls` | String[] | - | Prefix matches for the entry's URL. |
| `feed_title_patterns` | String[] | - | Regex matches for the feed title. |
| `category_title_patterns` | String[] | - | Regex matches for the category title. |
-| `site_url_patterns` | String[] | - | Regex matches for the site URL. |
+| `site_url_patterns` | String[] | - | Regex matches for the site URL. (Legacy: `feed_url_patterns`) |
| `entry_url_patterns` | String[] | - | Regex matches for the entry URL. |
**Note:** Conditions *within* a single list (e.g., multiple `feed_titles`) are always treated as **OR**.
diff --git a/internal/config/config.go b/internal/config/config.go
index ac49a52..0c51d97 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -54,10 +54,12 @@ type ConfigFilters struct {
Logic string `koanf:"logic" validate:"omitempty,oneof=AND OR"`
FeedTitles []string `koanf:"feed_titles"`
CategoryTitles []string `koanf:"category_titles"`
+ SiteURLs []string `koanf:"site_urls"`
FeedURLs []string `koanf:"feed_urls"`
EntryURLs []string `koanf:"entry_urls"`
FeedTitlePatterns []string `koanf:"feed_title_patterns"`
CategoryTitlePatterns []string `koanf:"category_title_patterns"`
+ SiteURLPatterns []string `koanf:"site_url_patterns"`
FeedURLPatterns []string `koanf:"feed_url_patterns"`
EntryURLPatterns []string `koanf:"entry_url_patterns"`
}
@@ -135,6 +137,7 @@ func (c *Config) Validate() error {
validatePatterns(digest.Filters.FeedTitlePatterns, "Filters.FeedTitlePatterns")
validatePatterns(digest.Filters.CategoryTitlePatterns, "Filters.CategoryTitlePatterns")
+ validatePatterns(digest.Filters.SiteURLPatterns, "Filters.SiteURLPatterns")
validatePatterns(digest.Filters.FeedURLPatterns, "Filters.FeedURLPatterns")
validatePatterns(digest.Filters.EntryURLPatterns, "Filters.EntryURLPatterns")
}
diff --git a/internal/filter/filter.go b/internal/filter/filter.go
index 163df54..134a6cb 100644
--- a/internal/filter/filter.go
+++ b/internal/filter/filter.go
@@ -30,7 +30,7 @@ func NewMatcher(cfg config.ConfigFilters) (*Matcher, error) {
return nil, err
}
- m.siteURLRegex, err = compileRegexes(cfg.FeedURLPatterns)
+ m.siteURLRegex, err = compileRegexes(append(cfg.SiteURLPatterns, cfg.FeedURLPatterns...))
if err != nil {
return nil, err
}
@@ -80,8 +80,8 @@ func (m *Matcher) Matches(entry *models.Entry, cfg config.ConfigFilters) bool {
return false
}
- if (len(cfg.FeedURLs) > 0 || len(m.siteURLRegex) > 0) &&
- !matchString(entry.SiteURL, cfg.FeedURLs, m.siteURLRegex, false) {
+ if (len(cfg.SiteURLs) > 0 || len(cfg.FeedURLs) > 0 || len(m.siteURLRegex) > 0) &&
+ !matchString(entry.SiteURL, append(cfg.SiteURLs, cfg.FeedURLs...), m.siteURLRegex, false) {
return false
}
@@ -107,8 +107,8 @@ func (m *Matcher) Matches(entry *models.Entry, cfg config.ConfigFilters) bool {
return true
}
- if (len(cfg.FeedURLs) > 0 || len(m.siteURLRegex) > 0) &&
- matchString(entry.SiteURL, cfg.FeedURLs, m.siteURLRegex, false) {
+ if (len(cfg.SiteURLs) > 0 || len(cfg.FeedURLs) > 0 || len(m.siteURLRegex) > 0) &&
+ matchString(entry.SiteURL, append(cfg.SiteURLs, cfg.FeedURLs...), m.siteURLRegex, false) {
return true
}
@@ -155,10 +155,12 @@ func matchString(value string, exacts []string, patterns []*regexp.Regexp, exact
func isEmpty(cfg config.ConfigFilters) bool {
return len(cfg.FeedTitles) == 0 &&
len(cfg.CategoryTitles) == 0 &&
+ len(cfg.SiteURLs) == 0 &&
len(cfg.FeedURLs) == 0 &&
len(cfg.EntryURLs) == 0 &&
len(cfg.FeedTitlePatterns) == 0 &&
len(cfg.CategoryTitlePatterns) == 0 &&
+ len(cfg.SiteURLPatterns) == 0 &&
len(cfg.FeedURLPatterns) == 0 &&
len(cfg.EntryURLPatterns) == 0
}