commit 1d4137fb88532de3cc2ffe487bc5c37ed04c759d
parent 1f39275c0f4ff3356a480ef7f0339d54547968e5
Author: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Sat, 3 Jun 2023 11:35:15 +0200
[bugfix] Fix first item of thread dereferencing always being skipped (#1858)
* [bugfix] Fix first item of thread dereferencing always being skipped
* tweak to status descendant item iteration
Signed-off-by: kim <grufwub@gmail.com>
---------
Signed-off-by: kim <grufwub@gmail.com>
Co-authored-by: kim <grufwub@gmail.com>
Diffstat:
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go
@@ -22,6 +22,7 @@ import (
"net/url"
"codeberg.org/gruf/go-kv"
+ "github.com/superseriousbusiness/activity/pub"
"github.com/superseriousbusiness/activity/streams/vocab"
"github.com/superseriousbusiness/gotosocial/internal/ap"
"github.com/superseriousbusiness/gotosocial/internal/config"
@@ -97,7 +98,8 @@ func (d *deref) dereferenceStatusAncestors(ctx context.Context, username string,
l.Tracef("following remote status ancestors: %s", status.InReplyToURI)
// Fetch the remote status found at this IRI
- remoteStatus, _, err := d.getStatusByURI(ctx,
+ remoteStatus, _, err := d.getStatusByURI(
+ ctx,
username,
replyIRI,
)
@@ -184,8 +186,8 @@ stackLoop:
}
if current.page == nil {
- // This is a local status, no looping to do
if current.statusIRI.Host == config.GetHost() {
+ // This is a local status, no looping to do
continue stackLoop
}
@@ -227,33 +229,24 @@ stackLoop:
// Start off the item iterator
current.itemIter = items.Begin()
- if current.itemIter == nil {
- continue stackLoop
- }
}
itemLoop:
for {
- var itemIRI *url.URL
-
- // Get next item iterator object
- current.itemIter = current.itemIter.Next()
+ // Check for remaining iter
if current.itemIter == nil {
break itemLoop
}
- if iri := current.itemIter.GetIRI(); iri != nil {
- // Item is already an IRI type
- itemIRI = iri
- } else if note := current.itemIter.GetActivityStreamsNote(); note != nil {
- // Item is a note, fetch the note ID IRI
- if id := note.GetJSONLDId(); id != nil {
- itemIRI = id.GetIRI()
- }
- }
+ // Get current item iterator
+ itemIter := current.itemIter
+
+ // Set the next available iterator
+ current.itemIter = itemIter.Next()
+ // Check for available IRI on item
+ itemIRI, _ := pub.ToId(itemIter)
if itemIRI == nil {
- // Unusable iter object
continue itemLoop
}