summaryrefslogtreecommitdiff
path: root/internal/processing/timeline/timeline.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-07-04 15:30:39 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-07-04 15:30:39 +0200
commit66e1ec14aa07e115580afc8e1399677f3b54eeda (patch)
tree54aabccf5c0540abbfdea771745f354e05c8eb1a /internal/processing/timeline/timeline.go
parent[bugfix] set correct scope for StatusFavePOSTHandler (#4310) (diff)
downloadgotosocial-66e1ec14aa07e115580afc8e1399677f3b54eeda.tar.xz
[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>
Diffstat (limited to 'internal/processing/timeline/timeline.go')
-rw-r--r--internal/processing/timeline/timeline.go47
1 files changed, 35 insertions, 12 deletions
diff --git a/internal/processing/timeline/timeline.go b/internal/processing/timeline/timeline.go
index 64d33e430..06580b3c7 100644
--- a/internal/processing/timeline/timeline.go
+++ b/internal/processing/timeline/timeline.go
@@ -19,13 +19,13 @@ package timeline
import (
"context"
- "errors"
"net/http"
"net/url"
apimodel "code.superseriousbusiness.org/gotosocial/internal/api/model"
timelinepkg "code.superseriousbusiness.org/gotosocial/internal/cache/timeline"
"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/gtserror"
"code.superseriousbusiness.org/gotosocial/internal/gtsmodel"
@@ -46,18 +46,26 @@ var (
)
type Processor struct {
- state *state.State
- converter *typeutils.Converter
- visFilter *visibility.Filter
- muteFilter *mutes.Filter
+ state *state.State
+ converter *typeutils.Converter
+ visFilter *visibility.Filter
+ muteFilter *mutes.Filter
+ statusFilter *status.Filter
}
-func New(state *state.State, converter *typeutils.Converter, visFilter *visibility.Filter, muteFilter *mutes.Filter) Processor {
+func New(
+ state *state.State,
+ converter *typeutils.Converter,
+ visFilter *visibility.Filter,
+ muteFilter *mutes.Filter,
+ statusFilter *status.Filter,
+) Processor {
return Processor{
- state: state,
- converter: converter,
- visFilter: visFilter,
- muteFilter: muteFilter,
+ state: state,
+ converter: converter,
+ visFilter: visFilter,
+ muteFilter: muteFilter,
+ statusFilter: statusFilter,
}
}
@@ -116,15 +124,30 @@ func (p *Processor) getStatusTimeline(
return nil, nil
}
+ // Check whether this status is filtered by requester in this context.
+ filters, hide, err := p.statusFilter.StatusFilterResultsInContext(ctx,
+ requester,
+ status,
+ filterCtx,
+ )
+ if err != nil {
+ return nil, err
+ } else if hide {
+ return nil, nil
+ }
+
// Finally, pass status to get converted to API model.
apiStatus, err := p.converter.StatusToAPIStatus(ctx,
status,
requester,
- filterCtx,
)
- if err != nil && !errors.Is(err, typeutils.ErrHideStatus) {
+ if err != nil {
return nil, err
}
+
+ // Set any filters on status.
+ apiStatus.Filtered = filters
+
return apiStatus, nil
},
)