summaryrefslogtreecommitdiff
path: root/internal/processing
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing')
-rw-r--r--internal/processing/account.go4
-rw-r--r--internal/processing/account/account.go3
-rw-r--r--internal/processing/account/getstatuses.go42
-rw-r--r--internal/processing/processor.go3
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.