summaryrefslogtreecommitdiff
path: root/internal/timeline/index.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/timeline/index.go')
-rw-r--r--internal/timeline/index.go41
1 files changed, 40 insertions, 1 deletions
diff --git a/internal/timeline/index.go b/internal/timeline/index.go
index 8d0506a9e..261722b74 100644
--- a/internal/timeline/index.go
+++ b/internal/timeline/index.go
@@ -10,6 +10,45 @@ import (
)
func (t *timeline) IndexBefore(statusID string, include bool, amount int) error {
+ filtered := []*gtsmodel.Status{}
+ offsetStatus := statusID
+
+ if include {
+ s := &gtsmodel.Status{}
+ if err := t.db.GetByID(statusID, s); err != nil {
+ return fmt.Errorf("IndexBefore: error getting initial status with id %s: %s", statusID, err)
+ }
+ filtered = append(filtered, s)
+ }
+
+grabloop:
+ for len(filtered) < amount {
+ statuses, err := t.db.GetStatusesWhereFollowing(t.accountID, "", offsetStatus, "", amount, false)
+ if err != nil {
+ if _, ok := err.(db.ErrNoEntries); ok {
+ break grabloop // we just don't have enough statuses left in the db so index what we've got and then bail
+ }
+ return fmt.Errorf("IndexBefore: error getting statuses from db: %s", err)
+ }
+
+ for _, s := range statuses {
+ timelineable, err := t.filter.StatusHometimelineable(s, t.account)
+ if err != nil {
+ continue
+ }
+ if timelineable {
+ filtered = append(filtered, s)
+ }
+ offsetStatus = s.ID
+ }
+ }
+
+ for _, s := range filtered {
+ if _, err := t.IndexOne(s.CreatedAt, s.ID, s.BoostOfID); err != nil {
+ return fmt.Errorf("IndexBefore: error indexing status with id %s: %s", s.ID, err)
+ }
+ }
+
return nil
}
@@ -41,7 +80,7 @@ grabloop:
for _, s := range filtered {
if _, err := t.IndexOne(s.CreatedAt, s.ID, s.BoostOfID); err != nil {
- return fmt.Errorf("IndexBehindAndIncluding: error indexing status with id %s: %s", s.ID, err)
+ return fmt.Errorf("IndexBehind: error indexing status with id %s: %s", s.ID, err)
}
}