diff --git a/internal/api/client/lists/listaccountsadd_test.go b/internal/api/client/lists/listaccountsadd_test.go index 7e44eeed3..1d0d37c37 100644 --- a/internal/api/client/lists/listaccountsadd_test.go +++ b/internal/api/client/lists/listaccountsadd_test.go @@ -102,10 +102,13 @@ func (suite *ListAccountsAddTestSuite) TestPostListAccountNotFollowed() { } func (suite *ListAccountsAddTestSuite) TestPostListAccountOK() { + entry := suite.testListEntries["local_account_1_list_1_entry_1"] + // Remove turtle from the list. if err := suite.db.DeleteListEntry( context.Background(), - suite.testListEntries["local_account_1_list_1_entry_1"].ID, + entry.ListID, + entry.FollowID, ); err != nil { suite.FailNow(err.Error()) } diff --git a/internal/db/bundb/timeline.go b/internal/db/bundb/timeline.go index f1a6092f0..bcb7953d4 100644 --- a/internal/db/bundb/timeline.go +++ b/internal/db/bundb/timeline.go @@ -70,7 +70,7 @@ func (t *timelineDB) GetHomeTimeline(ctx context.Context, accountID string, maxI // To take account of exclusive lists, get all of // this account's lists, so we can filter out follows // that are in contained in exclusive lists. - lists, err := t.state.DB.GetListsForAccountID(ctx, accountID) + lists, err := t.state.DB.GetListsByAccountID(ctx, accountID) if err != nil && !errors.Is(err, db.ErrNoEntries) { return nil, gtserror.Newf("db error getting lists for account %s: %w", accountID, err) } @@ -84,9 +84,15 @@ func (t *timelineDB) GetHomeTimeline(ctx context.Context, accountID string, maxI continue } + // Fetch all follow IDs of the entries ccontained in this list. + listFollowIDs, err := t.state.DB.GetFollowIDsInList(ctx, list.ID, nil) + if err != nil && !errors.Is(err, db.ErrNoEntries) { + return nil, gtserror.Newf("db error getting list entry follow ids: %w", err) + } + // Exclusive list, index all its follow IDs. - for _, listEntry := range list.ListEntries { - ignoreFollowIDs[listEntry.FollowID] = struct{}{} + for _, followID := range listFollowIDs { + ignoreFollowIDs[followID] = struct{}{} } } diff --git a/internal/db/bundb/timeline_test.go b/internal/db/bundb/timeline_test.go index 4874c2b35..50747b50d 100644 --- a/internal/db/bundb/timeline_test.go +++ b/internal/db/bundb/timeline_test.go @@ -184,8 +184,8 @@ func (suite *TimelineTestSuite) TestGetHomeTimelineIgnoreExclusive() { suite.checkStatuses(s, id.Highest, id.Lowest, 8) // Remove admin account from the exclusive list. - listEntryID := suite.testListEntries["local_account_1_list_1_entry_2"].ID - if err := suite.db.DeleteListEntry(ctx, listEntryID); err != nil { + listEntry := suite.testListEntries["local_account_1_list_1_entry_2"] + if err := suite.db.DeleteListEntry(ctx, listEntry.ListID, listEntry.FollowID); err != nil { suite.FailNow(err.Error()) }