summaryrefslogtreecommitdiff
path: root/internal/processing/timeline
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/timeline')
-rw-r--r--internal/processing/timeline/faved.go3
-rw-r--r--internal/processing/timeline/home.go9
-rw-r--r--internal/processing/timeline/list.go9
-rw-r--r--internal/processing/timeline/notification.go16
-rw-r--r--internal/processing/timeline/public.go16
-rw-r--r--internal/processing/timeline/tag.go12
6 files changed, 58 insertions, 7 deletions
diff --git a/internal/processing/timeline/faved.go b/internal/processing/timeline/faved.go
index 205b15069..c3b0e1837 100644
--- a/internal/processing/timeline/faved.go
+++ b/internal/processing/timeline/faved.go
@@ -24,6 +24,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/db"
+ statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
@@ -54,7 +55,7 @@ func (p *Processor) FavedTimelineGet(ctx context.Context, authed *oauth.Auth, ma
continue
}
- apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, authed.Account)
+ apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, authed.Account, statusfilter.FilterContextNone, nil)
if err != nil {
log.Errorf(ctx, "error convering to api status: %v", err)
continue
diff --git a/internal/processing/timeline/home.go b/internal/processing/timeline/home.go
index d12dd98c4..e174b3428 100644
--- a/internal/processing/timeline/home.go
+++ b/internal/processing/timeline/home.go
@@ -23,6 +23,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/db"
+ statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
"github.com/superseriousbusiness/gotosocial/internal/filter/visibility"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
@@ -98,7 +99,13 @@ func HomeTimelineStatusPrepare(state *state.State, converter *typeutils.Converte
return nil, err
}
- return converter.StatusToAPIStatus(ctx, status, requestingAccount)
+ filters, err := state.DB.GetFiltersForAccountID(ctx, requestingAccount.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAccount.ID, err)
+ return nil, err
+ }
+
+ return converter.StatusToAPIStatus(ctx, status, requestingAccount, statusfilter.FilterContextHome, filters)
}
}
diff --git a/internal/processing/timeline/list.go b/internal/processing/timeline/list.go
index 7356d1978..60cdbac7a 100644
--- a/internal/processing/timeline/list.go
+++ b/internal/processing/timeline/list.go
@@ -23,6 +23,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/db"
+ statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
"github.com/superseriousbusiness/gotosocial/internal/filter/visibility"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
@@ -110,7 +111,13 @@ func ListTimelineStatusPrepare(state *state.State, converter *typeutils.Converte
return nil, err
}
- return converter.StatusToAPIStatus(ctx, status, requestingAccount)
+ filters, err := state.DB.GetFiltersForAccountID(ctx, requestingAccount.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAccount.ID, err)
+ return nil, err
+ }
+
+ return converter.StatusToAPIStatus(ctx, status, requestingAccount, statusfilter.FilterContextHome, filters)
}
}
diff --git a/internal/processing/timeline/notification.go b/internal/processing/timeline/notification.go
index 42f708999..f99664d62 100644
--- a/internal/processing/timeline/notification.go
+++ b/internal/processing/timeline/notification.go
@@ -43,6 +43,12 @@ func (p *Processor) NotificationsGet(ctx context.Context, authed *oauth.Auth, ma
return util.EmptyPageableResponse(), nil
}
+ filters, err := p.state.DB.GetFiltersForAccountID(ctx, authed.Account.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", authed.Account.ID, err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
var (
items = make([]interface{}, 0, count)
nextMaxIDValue string
@@ -70,7 +76,7 @@ func (p *Processor) NotificationsGet(ctx context.Context, authed *oauth.Auth, ma
continue
}
- item, err := p.converter.NotificationToAPINotification(ctx, n)
+ item, err := p.converter.NotificationToAPINotification(ctx, n, filters)
if err != nil {
log.Debugf(ctx, "skipping notification %s because it couldn't be converted to its api representation: %s", n.ID, err)
continue
@@ -104,7 +110,13 @@ func (p *Processor) NotificationGet(ctx context.Context, account *gtsmodel.Accou
return nil, gtserror.NewErrorNotFound(err)
}
- apiNotif, err := p.converter.NotificationToAPINotification(ctx, notif)
+ filters, err := p.state.DB.GetFiltersForAccountID(ctx, account.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", account.ID, err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
+ apiNotif, err := p.converter.NotificationToAPINotification(ctx, notif, filters)
if err != nil {
if errors.Is(err, db.ErrNoEntries) {
return nil, gtserror.NewErrorNotFound(err)
diff --git a/internal/processing/timeline/public.go b/internal/processing/timeline/public.go
index 87de04f4a..a0e594629 100644
--- a/internal/processing/timeline/public.go
+++ b/internal/processing/timeline/public.go
@@ -24,6 +24,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/db"
+ statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
"github.com/superseriousbusiness/gotosocial/internal/log"
@@ -46,6 +47,16 @@ func (p *Processor) PublicTimelineGet(
items = make([]any, 0, limit)
)
+ var filters []*gtsmodel.Filter
+ if requester != nil {
+ var err error
+ filters, err = p.state.DB.GetFiltersForAccountID(ctx, requester.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requester.ID, err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+ }
+
// Try a few times to select appropriate public
// statuses from the db, paging up or down to
// reattempt if nothing suitable is found.
@@ -87,7 +98,10 @@ outer:
continue inner
}
- apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requester)
+ apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requester, statusfilter.FilterContextPublic, filters)
+ if errors.Is(err, statusfilter.ErrHideStatus) {
+ continue
+ }
if err != nil {
log.Errorf(ctx, "error converting to api status: %v", err)
continue inner
diff --git a/internal/processing/timeline/tag.go b/internal/processing/timeline/tag.go
index 45632ce06..5308cac59 100644
--- a/internal/processing/timeline/tag.go
+++ b/internal/processing/timeline/tag.go
@@ -24,6 +24,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/db"
+ statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
"github.com/superseriousbusiness/gotosocial/internal/log"
@@ -111,6 +112,12 @@ func (p *Processor) packageTagResponse(
prevMinIDValue = statuses[0].ID
)
+ filters, err := p.state.DB.GetFiltersForAccountID(ctx, requestingAcct.ID)
+ if err != nil {
+ err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAcct.ID, err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
for _, s := range statuses {
timelineable, err := p.filter.StatusTagTimelineable(ctx, requestingAcct, s)
if err != nil {
@@ -122,7 +129,10 @@ func (p *Processor) packageTagResponse(
continue
}
- apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requestingAcct)
+ apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requestingAcct, statusfilter.FilterContextPublic, filters)
+ if errors.Is(err, statusfilter.ErrHideStatus) {
+ continue
+ }
if err != nil {
log.Errorf(ctx, "error converting to api status: %v", err)
continue