summaryrefslogtreecommitdiff
path: root/internal/processing/status/common.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/status/common.go')
-rw-r--r--internal/processing/status/common.go37
1 files changed, 36 insertions, 1 deletions
diff --git a/internal/processing/status/common.go b/internal/processing/status/common.go
index 1c08a1e65..e557563f3 100644
--- a/internal/processing/status/common.go
+++ b/internal/processing/status/common.go
@@ -21,15 +21,17 @@ import (
"context"
"fmt"
+ "codeberg.org/gruf/go-kv"
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/log"
)
func (p *Processor) apiStatus(ctx context.Context, targetStatus *gtsmodel.Status, requestingAccount *gtsmodel.Account) (*apimodel.Status, gtserror.WithCode) {
apiStatus, err := p.tc.StatusToAPIStatus(ctx, targetStatus, requestingAccount)
if err != nil {
- err = fmt.Errorf("error converting status %s to frontend representation: %w", targetStatus.ID, err)
+ err = gtserror.Newf("error converting status %s to frontend representation: %w", targetStatus.ID, err)
return nil, gtserror.NewErrorInternalError(err)
}
@@ -66,3 +68,36 @@ func (p *Processor) getVisibleStatus(ctx context.Context, requestingAccount *gts
return targetStatus, nil
}
+
+// invalidateStatus is a shortcut function for invalidating the prepared/cached
+// representation one status in the home timeline and all list timelines of the
+// given accountID. It should only be called in cases where a status update
+// does *not* need to be passed into the processor via the worker queue, since
+// such invalidation will, in that case, be handled by the processor instead.
+func (p *Processor) invalidateStatus(ctx context.Context, accountID string, statusID string) error {
+ // Get lists first + bail if this fails.
+ lists, err := p.state.DB.GetListsForAccountID(ctx, accountID)
+ if err != nil {
+ return gtserror.Newf("db error getting lists for account %s: %w", accountID, err)
+ }
+
+ l := log.WithContext(ctx).WithFields(kv.Fields{
+ {"accountID", accountID},
+ {"statusID", statusID},
+ }...)
+
+ // Unprepare item from home + list timelines, just log
+ // if something goes wrong since this is not a showstopper.
+
+ if err := p.state.Timelines.Home.UnprepareItem(ctx, accountID, statusID); err != nil {
+ l.Errorf("error unpreparing item from home timeline: %v", err)
+ }
+
+ for _, list := range lists {
+ if err := p.state.Timelines.List.UnprepareItem(ctx, list.ID, statusID); err != nil {
+ l.Errorf("error unpreparing item from list timeline %s: %v", list.ID, err)
+ }
+ }
+
+ return nil
+}