summaryrefslogtreecommitdiff
path: root/internal/db/bundb/account.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r--internal/db/bundb/account.go62
1 files changed, 46 insertions, 16 deletions
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go
index cf02ad100..2c97a6646 100644
--- a/internal/db/bundb/account.go
+++ b/internal/db/bundb/account.go
@@ -301,27 +301,33 @@ func (a *accountDB) GetAccountStatuses(ctx context.Context, accountID string, li
return nil, a.conn.ProcessError(err)
}
- // Catch case of no statuses early
- if len(statusIDs) == 0 {
- return nil, db.ErrNoEntries
- }
+ return a.statusesFromIDs(ctx, statusIDs)
+}
- // Allocate return slice (will be at most len statusIDS)
- statuses := make([]*gtsmodel.Status, 0, len(statusIDs))
+func (a *accountDB) GetAccountWebStatuses(ctx context.Context, accountID string, limit int, maxID string) ([]*gtsmodel.Status, db.Error) {
+ statusIDs := []string{}
- for _, id := range statusIDs {
- // Fetch from status from database by ID
- status, err := a.status.GetStatusByID(ctx, id)
- if err != nil {
- logrus.Errorf("GetAccountStatuses: error getting status %q: %v", id, err)
- continue
- }
+ q := a.conn.
+ NewSelect().
+ Table("statuses").
+ Column("id").
+ Where("account_id = ?", accountID).
+ WhereGroup(" AND ", whereEmptyOrNull("in_reply_to_id")).
+ WhereGroup(" AND ", whereEmptyOrNull("boost_of_id")).
+ Where("visibility = ?", gtsmodel.VisibilityPublic).
+ Where("federated = ?", true)
- // Append to return slice
- statuses = append(statuses, status)
+ if maxID != "" {
+ q = q.Where("id < ?", maxID)
}
- return statuses, nil
+ q = q.Limit(limit).Order("id DESC")
+
+ if err := q.Scan(ctx, &statusIDs); err != nil {
+ return nil, a.conn.ProcessError(err)
+ }
+
+ return a.statusesFromIDs(ctx, statusIDs)
}
func (a *accountDB) GetAccountBlocks(ctx context.Context, accountID string, maxID string, sinceID string, limit int) ([]*gtsmodel.Account, string, string, db.Error) {
@@ -363,3 +369,27 @@ func (a *accountDB) GetAccountBlocks(ctx context.Context, accountID string, maxI
prevMinID := blocks[0].ID
return accounts, nextMaxID, prevMinID, nil
}
+
+func (a *accountDB) statusesFromIDs(ctx context.Context, statusIDs []string) ([]*gtsmodel.Status, db.Error) {
+ // Catch case of no statuses early
+ if len(statusIDs) == 0 {
+ return nil, db.ErrNoEntries
+ }
+
+ // Allocate return slice (will be at most len statusIDS)
+ statuses := make([]*gtsmodel.Status, 0, len(statusIDs))
+
+ for _, id := range statusIDs {
+ // Fetch from status from database by ID
+ status, err := a.status.GetStatusByID(ctx, id)
+ if err != nil {
+ logrus.Errorf("statusesFromIDs: error getting status %q: %v", id, err)
+ continue
+ }
+
+ // Append to return slice
+ statuses = append(statuses, status)
+ }
+
+ return statuses, nil
+}