diff options
Diffstat (limited to 'internal/processing')
-rw-r--r-- | internal/processing/account.go | 4 | ||||
-rw-r--r-- | internal/processing/account/account.go | 3 | ||||
-rw-r--r-- | internal/processing/account/getstatuses.go | 42 | ||||
-rw-r--r-- | internal/processing/processor.go | 3 |
4 files changed, 52 insertions, 0 deletions
diff --git a/internal/processing/account.go b/internal/processing/account.go index 2c21aee2e..df351d7b9 100644 --- a/internal/processing/account.go +++ b/internal/processing/account.go @@ -50,6 +50,10 @@ func (p *processor) AccountStatusesGet(ctx context.Context, authed *oauth.Auth, return p.accountProcessor.StatusesGet(ctx, authed.Account, targetAccountID, limit, excludeReplies, excludeReblogs, maxID, minID, pinnedOnly, mediaOnly, publicOnly) } +func (p *processor) AccountWebStatusesGet(ctx context.Context, targetAccountID string, maxID string) (*apimodel.TimelineResponse, gtserror.WithCode) { + return p.accountProcessor.WebStatusesGet(ctx, targetAccountID, maxID) +} + func (p *processor) AccountFollowersGet(ctx context.Context, authed *oauth.Auth, targetAccountID string) ([]apimodel.Account, gtserror.WithCode) { return p.accountProcessor.FollowersGet(ctx, authed.Account, targetAccountID) } diff --git a/internal/processing/account/account.go b/internal/processing/account/account.go index 56dfb90e9..868308efe 100644 --- a/internal/processing/account/account.go +++ b/internal/processing/account/account.go @@ -56,6 +56,9 @@ type Processor interface { // StatusesGet fetches a number of statuses (in time descending order) from the given account, filtered by visibility for // the account given in authed. StatusesGet(ctx context.Context, requestingAccount *gtsmodel.Account, targetAccountID string, limit int, excludeReplies bool, excludeReblogs bool, maxID string, minID string, pinned bool, mediaOnly bool, publicOnly bool) (*apimodel.TimelineResponse, gtserror.WithCode) + // WebStatusesGet fetches a number of statuses (in descending order) from the given account. It selects only + // statuses which are suitable for showing on the public web profile of an account. + WebStatusesGet(ctx context.Context, targetAccountID string, maxID string) (*apimodel.TimelineResponse, gtserror.WithCode) // FollowersGet fetches a list of the target account's followers. FollowersGet(ctx context.Context, requestingAccount *gtsmodel.Account, targetAccountID string) ([]apimodel.Account, gtserror.WithCode) // FollowingGet fetches a list of the accounts that target account is following. 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{}, + }) +} diff --git a/internal/processing/processor.go b/internal/processing/processor.go index b8d0daf99..5a4abb55b 100644 --- a/internal/processing/processor.go +++ b/internal/processing/processor.go @@ -84,6 +84,9 @@ type Processor interface { // AccountStatusesGet fetches a number of statuses (in time descending order) from the given account, filtered by visibility for // the account given in authed. AccountStatusesGet(ctx context.Context, authed *oauth.Auth, targetAccountID string, limit int, excludeReplies bool, excludeReblogs bool, maxID string, minID string, pinned bool, mediaOnly bool, publicOnly bool) (*apimodel.TimelineResponse, gtserror.WithCode) + // AccountWebStatusesGet fetches a number of statuses (in descending order) from the given account. It selects only + // statuses which are suitable for showing on the public web profile of an account. + AccountWebStatusesGet(ctx context.Context, targetAccountID string, maxID string) (*apimodel.TimelineResponse, gtserror.WithCode) // AccountFollowersGet fetches a list of the target account's followers. AccountFollowersGet(ctx context.Context, authed *oauth.Auth, targetAccountID string) ([]apimodel.Account, gtserror.WithCode) // AccountFollowingGet fetches a list of the accounts that target account is following. |