summaryrefslogtreecommitdiff
path: root/internal/processing/account/getstatuses.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-07-13 09:57:47 +0200
committerLibravatar GitHub <noreply@github.com>2022-07-13 09:57:47 +0200
commit6418307c64da236a0268f4496f793d982e128ad0 (patch)
tree9c781c812697412936d671e0e42272dce8cf2d78 /internal/processing/account/getstatuses.go
parent[chore] improved router logging, recovery and error handling (#705) (diff)
downloadgotosocial-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.go42
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{},
+ })
+}