diff options
Diffstat (limited to 'internal/db/bundb')
| -rw-r--r-- | internal/db/bundb/account.go | 62 | 
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 +} | 
