diff options
Diffstat (limited to 'internal/processing/account')
| -rw-r--r-- | internal/processing/account/account.go | 3 | ||||
| -rw-r--r-- | internal/processing/account/getstatuses.go | 42 | 
2 files changed, 45 insertions, 0 deletions
| 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{}, +	}) +} | 
