summaryrefslogtreecommitdiff
path: root/internal/processing/status/pin.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-06-11 11:18:44 +0200
committerLibravatar GitHub <noreply@github.com>2023-06-11 10:18:44 +0100
commit5e2897e35cd2bea889fa37a2a857f4dcc076dafc (patch)
treeb1ac6203ffa20f5fff1c460fed942854a6e5c6bd /internal/processing/status/pin.go
parent[docs] Revamp the installation guide (#1877) (diff)
downloadgotosocial-5e2897e35cd2bea889fa37a2a857f4dcc076dafc.tar.xz
[bugfix] Invalidate timeline entries for status when stats change (#1879)
Diffstat (limited to 'internal/processing/status/pin.go')
-rw-r--r--internal/processing/status/pin.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/internal/processing/status/pin.go b/internal/processing/status/pin.go
index 1e7dc40e8..c5981b699 100644
--- a/internal/processing/status/pin.go
+++ b/internal/processing/status/pin.go
@@ -95,7 +95,13 @@ func (p *Processor) PinCreate(ctx context.Context, requestingAccount *gtsmodel.A
targetStatus.PinnedAt = time.Now()
if err := p.state.DB.UpdateStatus(ctx, targetStatus, "pinned_at"); err != nil {
- return nil, gtserror.NewErrorInternalError(fmt.Errorf("db error pinning status: %w", err))
+ err = gtserror.Newf("db error pinning status: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
+ if err := p.invalidateStatus(ctx, requestingAccount.ID, targetStatusID); err != nil {
+ err = gtserror.Newf("error invalidating status from timelines: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
}
return p.apiStatus(ctx, targetStatus, requestingAccount)
@@ -118,11 +124,19 @@ func (p *Processor) PinRemove(ctx context.Context, requestingAccount *gtsmodel.A
return nil, errWithCode
}
- if !targetStatus.PinnedAt.IsZero() {
- targetStatus.PinnedAt = time.Time{}
- if err := p.state.DB.UpdateStatus(ctx, targetStatus, "pinned_at"); err != nil {
- return nil, gtserror.NewErrorInternalError(fmt.Errorf("db error unpinning status: %w", err))
- }
+ if targetStatus.PinnedAt.IsZero() {
+ return p.apiStatus(ctx, targetStatus, requestingAccount)
+ }
+
+ targetStatus.PinnedAt = time.Time{}
+ if err := p.state.DB.UpdateStatus(ctx, targetStatus, "pinned_at"); err != nil {
+ err = gtserror.Newf("db error unpinning status: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
+ if err := p.invalidateStatus(ctx, requestingAccount.ID, targetStatusID); err != nil {
+ err = gtserror.Newf("error invalidating status from timelines: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
}
return p.apiStatus(ctx, targetStatus, requestingAccount)