[chore] move status filtering from type converter (#4306)

This finalizes the moving status filtering out of the type converter, and into its own `./internal/filter/` subpkg :)

Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4306
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
kim 2025-07-04 15:30:39 +02:00 committed by kim
commit 66e1ec14aa
38 changed files with 565 additions and 846 deletions

View file

@ -19,6 +19,7 @@ package account
import (
"code.superseriousbusiness.org/gotosocial/internal/federation"
"code.superseriousbusiness.org/gotosocial/internal/filter/status"
"code.superseriousbusiness.org/gotosocial/internal/filter/visibility"
"code.superseriousbusiness.org/gotosocial/internal/gtsmodel"
"code.superseriousbusiness.org/gotosocial/internal/media"
@ -39,6 +40,7 @@ type Processor struct {
converter *typeutils.Converter
mediaManager *media.Manager
visFilter *visibility.Filter
statusFilter *status.Filter
formatter *text.Formatter
federator *federation.Federator
parseMention gtsmodel.ParseMentionFunc
@ -53,6 +55,7 @@ func New(
mediaManager *media.Manager,
federator *federation.Federator,
visFilter *visibility.Filter,
statusFilter *status.Filter,
parseMention gtsmodel.ParseMentionFunc,
) Processor {
return Processor{
@ -61,6 +64,7 @@ func New(
converter: converter,
mediaManager: mediaManager,
visFilter: visFilter,
statusFilter: statusFilter,
formatter: text.NewFormatter(state.DB),
federator: federator,
parseMention: parseMention,

View file

@ -26,6 +26,7 @@ import (
"code.superseriousbusiness.org/gotosocial/internal/email"
"code.superseriousbusiness.org/gotosocial/internal/federation"
"code.superseriousbusiness.org/gotosocial/internal/filter/mutes"
"code.superseriousbusiness.org/gotosocial/internal/filter/status"
"code.superseriousbusiness.org/gotosocial/internal/filter/visibility"
"code.superseriousbusiness.org/gotosocial/internal/gtsmodel"
"code.superseriousbusiness.org/gotosocial/internal/media"
@ -107,8 +108,9 @@ func (suite *AccountStandardTestSuite) SetupTest() {
visFilter := visibility.NewFilter(&suite.state)
mutesFilter := mutes.NewFilter(&suite.state)
common := common.New(&suite.state, suite.mediaManager, suite.tc, suite.federator, visFilter, mutesFilter)
suite.accountProcessor = account.New(&common, &suite.state, suite.tc, suite.mediaManager, suite.federator, visFilter, processing.GetParseMentionFunc(&suite.state, suite.federator))
statusFilter := status.NewFilter(&suite.state)
common := common.New(&suite.state, suite.mediaManager, suite.tc, suite.federator, visFilter, mutesFilter, statusFilter)
suite.accountProcessor = account.New(&common, &suite.state, suite.tc, suite.mediaManager, suite.federator, visFilter, statusFilter, processing.GetParseMentionFunc(&suite.state, suite.federator))
testrig.StandardDBSetup(suite.db, nil)
testrig.StandardStorageSetup(suite.storage, "../../../testrig/media")
}

View file

@ -74,7 +74,7 @@ func (p *Processor) BookmarksGet(ctx context.Context, requestingAccount *gtsmode
}
// Convert the status.
item, err := p.converter.StatusToAPIStatus(ctx, status, requestingAccount, gtsmodel.FilterContextNone)
item, err := p.converter.StatusToAPIStatus(ctx, status, requestingAccount)
if err != nil {
log.Errorf(ctx, "error converting bookmarked status to api: %s", err)
continue

View file

@ -96,13 +96,33 @@ func (p *Processor) StatusesGet(
return nil, gtserror.NewErrorInternalError(err)
}
for _, s := range filtered {
for _, status := range filtered {
// ...
filtered, hide, err := p.statusFilter.StatusFilterResultsInContext(ctx,
requestingAccount,
status,
gtsmodel.FilterContextAccount,
)
if err != nil {
log.Errorf(ctx, "error filtering status: %v", err)
continue
}
if hide {
// Don't show.
continue
}
// Convert filtered statuses to API statuses.
item, err := p.converter.StatusToAPIStatus(ctx, s, requestingAccount, gtsmodel.FilterContextAccount)
item, err := p.converter.StatusToAPIStatus(ctx, status, requestingAccount)
if err != nil {
log.Errorf(ctx, "error convering to api status: %v", err)
continue
}
// Set any filter results.
item.Filtered = filtered
items = append(items, item)
}