[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

@ -20,6 +20,7 @@ package common
import (
"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/media"
"code.superseriousbusiness.org/gotosocial/internal/state"
@ -30,12 +31,13 @@ import (
// common to multiple logical domains of the
// processing subsection of the codebase.
type Processor struct {
state *state.State
media *media.Manager
converter *typeutils.Converter
federator *federation.Federator
visFilter *visibility.Filter
muteFilter *mutes.Filter
state *state.State
media *media.Manager
converter *typeutils.Converter
federator *federation.Federator
visFilter *visibility.Filter
muteFilter *mutes.Filter
statusFilter *status.Filter
}
// New returns a new Processor instance.
@ -46,13 +48,15 @@ func New(
federator *federation.Federator,
visFilter *visibility.Filter,
muteFilter *mutes.Filter,
statusFilter *status.Filter,
) Processor {
return Processor{
state: state,
media: media,
converter: converter,
federator: federator,
visFilter: visFilter,
muteFilter: muteFilter,
state: state,
media: media,
converter: converter,
federator: federator,
visFilter: visFilter,
muteFilter: muteFilter,
statusFilter: statusFilter,
}
}

View file

@ -27,7 +27,6 @@ import (
"code.superseriousbusiness.org/gotosocial/internal/gtserror"
"code.superseriousbusiness.org/gotosocial/internal/gtsmodel"
"code.superseriousbusiness.org/gotosocial/internal/log"
"code.superseriousbusiness.org/gotosocial/internal/typeutils"
)
// GetOwnStatus fetches the given status with ID,
@ -213,7 +212,6 @@ func (p *Processor) GetAPIStatus(
apiStatus, err := p.converter.StatusToAPIStatus(ctx,
target,
requester,
gtsmodel.FilterContextNone,
)
if err != nil {
err := gtserror.Newf("error converting: %w", err)
@ -271,22 +269,33 @@ func (p *Processor) GetVisibleAPIStatuses(
continue
}
// Check whether status is filtered in context by requesting account.
filtered, hide, err := p.statusFilter.StatusFilterResultsInContext(ctx,
requester,
status,
filterCtx,
)
if err != nil {
l.Errorf("error filtering: %v", err)
continue
}
if hide {
continue
}
// Convert to API status, taking mute / filter into account.
apiStatus, err := p.converter.StatusToAPIStatus(ctx,
status,
requester,
filterCtx,
)
if err != nil && !errors.Is(err, typeutils.ErrHideStatus) {
if err != nil {
l.Errorf("error converting: %v", err)
continue
}
if apiStatus == nil {
// Status was
// filtered out.
continue
}
// Set filter results on status.
apiStatus.Filtered = filtered
// Append converted status to return slice.
apiStatuses = append(apiStatuses, *apiStatus)