summaryrefslogtreecommitdiff
path: root/internal/visibility/home_timeline.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/visibility/home_timeline.go')
-rw-r--r--internal/visibility/home_timeline.go27
1 files changed, 14 insertions, 13 deletions
diff --git a/internal/visibility/home_timeline.go b/internal/visibility/home_timeline.go
index d8bbc3979..56290e836 100644
--- a/internal/visibility/home_timeline.go
+++ b/internal/visibility/home_timeline.go
@@ -19,10 +19,12 @@ package visibility
import (
"context"
+ "errors"
"fmt"
"time"
"github.com/superseriousbusiness/gotosocial/internal/cache"
+ "github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtscontext"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
@@ -169,24 +171,23 @@ func (f *Filter) isStatusHomeTimelineable(ctx context.Context, owner *gtsmodel.A
// a status thread *including* the owner, or a conversation thread between
// accounts the timeline owner follows.
- if status.Visibility == gtsmodel.VisibilityFollowersOnly ||
- status.Visibility == gtsmodel.VisibilityMutualsOnly {
- // Followers/mutuals only post that already passed the status
- // visibility check, (i.e. we follow / mutuals with author).
- return true, nil
- }
-
- // Ensure owner follows author of public/unlocked status.
- follow, err := f.state.DB.IsFollowing(ctx,
+ // Ensure owner follows author.
+ follow, err := f.state.DB.GetFollow(ctx,
owner.ID,
status.AccountID,
)
- if err != nil {
- return false, gtserror.Newf("error checking follow %s->%s: %w", owner.ID, status.AccountID, err)
+ if err != nil && !errors.Is(err, db.ErrNoEntries) {
+ return false, gtserror.Newf("error retrieving follow %s->%s: %w", owner.ID, status.AccountID, err)
+ }
+
+ if follow == nil {
+ log.Trace(ctx, "ignoring status from unfollowed author")
+ return false, nil
}
- if !follow {
- log.Trace(ctx, "ignoring visible status from unfollowed author")
+ if status.BoostOfID != "" && !*follow.ShowReblogs {
+ // Status is a boost, but the owner of this follow
+ // doesn't want to see boosts from this account.
return false, nil
}