summaryrefslogtreecommitdiff
path: root/internal/processing/status/boost.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-08-23 10:46:10 +0200
committerLibravatar GitHub <noreply@github.com>2022-08-23 10:46:10 +0200
commit2fe3a2b5b895a7503f2ca1ea9190eafeeb6d88ec (patch)
tree62b57f2414cd446959a4e8b26c287c6e64b7f229 /internal/processing/status/boost.go
parent[bugfix] Fix loss of account info on export/import, add tests (#759) (diff)
downloadgotosocial-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.go15
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))