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}  | 
