diff options
author | 2022-07-13 09:57:47 +0200 | |
---|---|---|
committer | 2022-07-13 09:57:47 +0200 | |
commit | 6418307c64da236a0268f4496f793d982e128ad0 (patch) | |
tree | 9c781c812697412936d671e0e42272dce8cf2d78 /internal/processing/account/getstatuses.go | |
parent | [chore] improved router logging, recovery and error handling (#705) (diff) | |
download | gotosocial-6418307c64da236a0268f4496f793d982e128ad0.tar.xz |
[feature] Add back/next buttons to profiles for paging through statuses (#708)
* add GetAccountWebStatuses to db
* add WebStatusesGet func to processor
* don't add limit to next/prev links if 0
* take query params for next/prev statuses
* add separate next + prev links for convenience
* show 'nothing here' message if no statuses exist
* add back / next links to profiles
* allow paging down only
* go fmt ./...
* 'recent public toots' -> 'latest public toots'
Diffstat (limited to 'internal/processing/account/getstatuses.go')
-rw-r--r-- | internal/processing/account/getstatuses.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/internal/processing/account/getstatuses.go b/internal/processing/account/getstatuses.go index 90bf8e06e..7dbe68462 100644 --- a/internal/processing/account/getstatuses.go +++ b/internal/processing/account/getstatuses.go @@ -84,3 +84,45 @@ func (p *processor) StatusesGet(ctx context.Context, requestingAccount *gtsmodel }, }) } + +func (p *processor) WebStatusesGet(ctx context.Context, targetAccountID string, maxID string) (*apimodel.TimelineResponse, gtserror.WithCode) { + acct, err := p.db.GetAccountByID(ctx, targetAccountID) + if err != nil { + if err == db.ErrNoEntries { + err := fmt.Errorf("account %s not found in the db, not getting web statuses for it", targetAccountID) + return nil, gtserror.NewErrorNotFound(err) + } + return nil, gtserror.NewErrorInternalError(err) + } + + if acct.Domain != "" { + err := fmt.Errorf("account %s was not a local account, not getting web statuses for it", targetAccountID) + return nil, gtserror.NewErrorNotFound(err) + } + + statuses, err := p.db.GetAccountWebStatuses(ctx, targetAccountID, 10, maxID) + if err != nil { + if err == db.ErrNoEntries { + return util.EmptyTimelineResponse(), nil + } + return nil, gtserror.NewErrorInternalError(err) + } + + timelineables := []timeline.Timelineable{} + for _, i := range statuses { + apiStatus, err := p.tc.StatusToAPIStatus(ctx, i, nil) + if err != nil { + return nil, gtserror.NewErrorInternalError(fmt.Errorf("error converting status to api: %s", err)) + } + + timelineables = append(timelineables, apiStatus) + } + + return util.PackageTimelineableResponse(util.TimelineableResponseParams{ + Items: timelineables, + Path: "/@" + acct.Username, + NextMaxIDValue: timelineables[len(timelineables)-1].GetID(), + PrevMinIDValue: timelineables[0].GetID(), + ExtraQueryParams: []string{}, + }) +} |