From 2fe3a2b5b895a7503f2ca1ea9190eafeeb6d88ec Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 23 Aug 2022 10:46:10 +0200 Subject: [bugfix] Fix boost of boost issue (#764) --- internal/processing/status/boost.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'internal/processing/status/boost.go') 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)) -- cgit v1.2.3