diff options
author | 2024-05-21 13:20:19 +0000 | |
---|---|---|
committer | 2024-05-21 14:20:19 +0100 | |
commit | b092da6d281a437c3f847e655c4ad182decb0978 (patch) | |
tree | cd5dcc7bebb055cd1b1714fa7b41362a44fdb788 /internal/typeutils | |
parent | [chore] dependabot updates (#2922) (diff) | |
download | gotosocial-b092da6d281a437c3f847e655c4ad182decb0978.tar.xz |
[performance] cache v2 filter keyword regular expressions (#2903)
* add caching of filterkeyword regular expressions
* formatting
* fix WholeWord nil check
Diffstat (limited to 'internal/typeutils')
-rw-r--r-- | internal/typeutils/internaltofrontend.go | 12 | ||||
-rw-r--r-- | internal/typeutils/internaltofrontend_test.go | 2 |
2 files changed, 3 insertions, 11 deletions
diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 7a5572267..d7f1fac6c 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "math" - "regexp" "strconv" "strings" "time" @@ -746,18 +745,9 @@ func (c *Converter) statusToAPIFilterResults( keywordMatches := make([]string, 0, len(filter.Keywords)) fields := filterableTextFields(s) for _, filterKeyword := range filter.Keywords { - wholeWord := util.PtrValueOr(filterKeyword.WholeWord, false) - wordBreak := `` - if wholeWord { - wordBreak = `\b` - } - re, err := regexp.Compile(`(?i)` + wordBreak + regexp.QuoteMeta(filterKeyword.Keyword) + wordBreak) - if err != nil { - return nil, err - } var isMatch bool for _, field := range fields { - if re.MatchString(field) { + if filterKeyword.Regexp.MatchString(field) { isMatch = true break } diff --git a/internal/typeutils/internaltofrontend_test.go b/internal/typeutils/internaltofrontend_test.go index 2c4f28a9b..676870c7b 100644 --- a/internal/typeutils/internaltofrontend_test.go +++ b/internal/typeutils/internaltofrontend_test.go @@ -546,6 +546,7 @@ func (suite *InternalToFrontendTestSuite) TestWarnFilteredStatusToFrontend() { requestingAccount := suite.testAccounts["local_account_1"] expectedMatchingFilter := suite.testFilters["local_account_1_filter_1"] expectedMatchingFilterKeyword := suite.testFilterKeywords["local_account_1_filter_1_keyword_1"] + suite.NoError(expectedMatchingFilterKeyword.Compile()) expectedMatchingFilterKeyword.Filter = expectedMatchingFilter expectedMatchingFilter.Keywords = []*gtsmodel.FilterKeyword{expectedMatchingFilterKeyword} requestingAccountFilters := []*gtsmodel.Filter{expectedMatchingFilter} @@ -700,6 +701,7 @@ func (suite *InternalToFrontendTestSuite) TestHideFilteredStatusToFrontend() { expectedMatchingFilter := suite.testFilters["local_account_1_filter_1"] expectedMatchingFilter.Action = gtsmodel.FilterActionHide expectedMatchingFilterKeyword := suite.testFilterKeywords["local_account_1_filter_1_keyword_1"] + suite.NoError(expectedMatchingFilterKeyword.Compile()) expectedMatchingFilterKeyword.Filter = expectedMatchingFilter expectedMatchingFilter.Keywords = []*gtsmodel.FilterKeyword{expectedMatchingFilterKeyword} requestingAccountFilters := []*gtsmodel.Filter{expectedMatchingFilter} |