diff options
author | 2022-08-23 10:46:10 +0200 | |
---|---|---|
committer | 2022-08-23 10:46:10 +0200 | |
commit | 2fe3a2b5b895a7503f2ca1ea9190eafeeb6d88ec (patch) | |
tree | 62b57f2414cd446959a4e8b26c287c6e64b7f229 /internal/processing/status/boost.go | |
parent | [bugfix] Fix loss of account info on export/import, add tests (#759) (diff) | |
download | gotosocial-2fe3a2b5b895a7503f2ca1ea9190eafeeb6d88ec.tar.xz |
[bugfix] Fix boost of boost issue (#764)
Diffstat (limited to 'internal/processing/status/boost.go')
-rw-r--r-- | internal/processing/status/boost.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/internal/processing/status/boost.go b/internal/processing/status/boost.go index b1abc017c..3573b6fdd 100644 --- a/internal/processing/status/boost.go +++ b/internal/processing/status/boost.go @@ -39,6 +39,21 @@ func (p *processor) Boost(ctx context.Context, requestingAccount *gtsmodel.Accou return nil, gtserror.NewErrorNotFound(fmt.Errorf("no status owner for status %s", targetStatusID)) } + // if targetStatusID refers to a boost, then we should redirect + // the target to being the status that was boosted; if we don't + // do this, then we end up in weird situations where people + // boost boosts, and it looks absolutely bizarre in the UI + if targetStatus.BoostOfID != "" { + if targetStatus.BoostOf == nil { + b, err := p.db.GetStatusByID(ctx, targetStatus.BoostOfID) + if err != nil { + return nil, gtserror.NewErrorNotFound(fmt.Errorf("couldn't fetch boosted status %s", targetStatus.BoostOfID)) + } + targetStatus.BoostOf = b + } + targetStatus = targetStatus.BoostOf + } + boostable, err := p.filter.StatusBoostable(ctx, targetStatus, requestingAccount) if err != nil { return nil, gtserror.NewErrorNotFound(fmt.Errorf("error seeing if status %s is boostable: %s", targetStatus.ID, err)) |