From f0c9f4169be6c5c7dd913f348cdd294a19038d63 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 23 May 2022 17:40:03 +0200 Subject: [bugfix] Fix multiple dereferences of boosted status causing media duplication (#589) * add some announces to test models * start on announce test logic * test federatingDB.Announce * change signature of GetRemoteStatus * remove 'refresh' logic and replace it with refetch * go fmt * remove timeline manager from processor test * make zork created at determinate * test get account statuses * test get + serialize zork * make account keys determinate * make admin accountCreate time determinate * test account to as * init test config before test log * test status to frontend * remove daft Within check * hack around a bit * use index of slice --- internal/federation/dereferencing/thread.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'internal/federation/dereferencing/thread.go') diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go index f527b99cd..469defd5e 100644 --- a/internal/federation/dereferencing/thread.go +++ b/internal/federation/dereferencing/thread.go @@ -52,9 +52,9 @@ func (d *deref) DereferenceThread(ctx context.Context, username string, statusIR } // first make sure we have this status in our db - _, statusable, _, err := d.GetRemoteStatus(ctx, username, statusIRI, true, false) + _, statusable, err := d.GetRemoteStatus(ctx, username, statusIRI, true, false) if err != nil { - return fmt.Errorf("DereferenceThread: error getting status with id %s: %s", statusIRI.String(), err) + return fmt.Errorf("DereferenceThread: error getting initial status with id %s: %s", statusIRI.String(), err) } // first iterate up through ancestors, dereferencing if necessary as we go @@ -106,9 +106,8 @@ func (d *deref) iterateAncestors(ctx context.Context, username string, statusIRI return d.iterateAncestors(ctx, username, *nextIRI) } - // If we reach here, we're looking at a remote status -- make sure we have it in our db by calling GetRemoteStatus - // We call it with refresh to true because we want the statusable representation to parse inReplyTo from. - _, statusable, _, err := d.GetRemoteStatus(ctx, username, &statusIRI, true, false) + // If we reach here, we're looking at a remote status + _, statusable, err := d.GetRemoteStatus(ctx, username, &statusIRI, true, false) if err != nil { l.Debugf("error getting remote status: %s", err) return nil @@ -220,8 +219,8 @@ pageLoop: foundReplies++ // get the remote statusable and put it in the db - _, statusable, new, err := d.GetRemoteStatus(ctx, username, itemURI, false, false) - if new && err == nil && statusable != nil { + _, statusable, err := d.GetRemoteStatus(ctx, username, itemURI, false, false) + if err == nil { // now iterate descendants of *that* status if err := d.iterateDescendants(ctx, username, *itemURI, statusable); err != nil { continue -- cgit v1.2.3