[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>
This commit is contained in:
tobi 2023-06-03 11:35:15 +02:00 committed by GitHub
parent 1f39275c0f
commit 1d4137fb88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 19 deletions

View File

@ -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
}