mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:52:30 -05:00 
			
		
		
		
	[chore] Refactor thread dereference a bit for clarity (#647)
* refactor thread dereference a bit for clarity * lint for the lint gods
This commit is contained in:
		
					parent
					
						
							
								cf5c6d724d
							
						
					
				
			
			
				commit
				
					
						7f9925afe5
					
				
			
		
					 1 changed files with 32 additions and 30 deletions
				
			
		|  | @ -41,11 +41,11 @@ func (d *deref) DereferenceThread(ctx context.Context, username string, statusIR | |||
| 		"username":  username, | ||||
| 		"statusIRI": statusIRI.String(), | ||||
| 	}) | ||||
| 	l.Debug("entering DereferenceThread") | ||||
| 	l.Trace("entering DereferenceThread") | ||||
| 
 | ||||
| 	// if it's our status we already have everything stashed so we can bail early | ||||
| 	if statusIRI.Host == config.GetHost() { | ||||
| 		l.Debug("iri belongs to us, bailing") | ||||
| 		l.Trace("iri belongs to us, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
|  | @ -75,11 +75,11 @@ func (d *deref) iterateAncestors(ctx context.Context, username string, statusIRI | |||
| 		"username":  username, | ||||
| 		"statusIRI": statusIRI.String(), | ||||
| 	}) | ||||
| 	l.Debug("entering iterateAncestors") | ||||
| 	l.Trace("entering iterateAncestors") | ||||
| 
 | ||||
| 	// if it's our status we don't need to dereference anything so we can immediately move up the chain | ||||
| 	if statusIRI.Host == config.GetHost() { | ||||
| 		l.Debug("iri belongs to us, moving up to next ancestor") | ||||
| 		l.Trace("iri belongs to us, moving up to next ancestor") | ||||
| 
 | ||||
| 		// since this is our status, we know we can extract the id from the status path | ||||
| 		_, id, err := uris.ParseStatusesPath(&statusIRI) | ||||
|  | @ -96,17 +96,19 @@ func (d *deref) iterateAncestors(ctx context.Context, username string, statusIRI | |||
| 			// status doesn't reply to anything | ||||
| 			return nil | ||||
| 		} | ||||
| 
 | ||||
| 		nextIRI, err := url.Parse(status.URI) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		return d.iterateAncestors(ctx, username, *nextIRI) | ||||
| 	} | ||||
| 
 | ||||
| 	// 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) | ||||
| 		l.Debugf("couldn't get remote status %s: %s; can't iterate any more ancestors", statusIRI.String(), err) | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
|  | @ -126,41 +128,41 @@ func (d *deref) iterateDescendants(ctx context.Context, username string, statusI | |||
| 		"username":  username, | ||||
| 		"statusIRI": statusIRI.String(), | ||||
| 	}) | ||||
| 	l.Debug("entering iterateDescendants") | ||||
| 	l.Trace("entering iterateDescendants") | ||||
| 
 | ||||
| 	// if it's our status we already have descendants stashed so we can bail early | ||||
| 	if statusIRI.Host == config.GetHost() { | ||||
| 		l.Debug("iri belongs to us, bailing") | ||||
| 		l.Trace("iri belongs to us, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	replies := statusable.GetActivityStreamsReplies() | ||||
| 	if replies == nil || !replies.IsActivityStreamsCollection() { | ||||
| 		l.Debug("no replies, bailing") | ||||
| 		l.Trace("no replies, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	repliesCollection := replies.GetActivityStreamsCollection() | ||||
| 	if repliesCollection == nil { | ||||
| 		l.Debug("replies collection is nil, bailing") | ||||
| 		l.Trace("replies collection is nil, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	first := repliesCollection.GetActivityStreamsFirst() | ||||
| 	if first == nil { | ||||
| 		l.Debug("replies collection has no first, bailing") | ||||
| 		l.Trace("replies collection has no first, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	firstPage := first.GetActivityStreamsCollectionPage() | ||||
| 	if firstPage == nil { | ||||
| 		l.Debug("first has no collection page, bailing") | ||||
| 		l.Trace("first has no collection page, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	firstPageNext := firstPage.GetActivityStreamsNext() | ||||
| 	if firstPageNext == nil || !firstPageNext.IsIRI() { | ||||
| 		l.Debug("next is not an iri, bailing") | ||||
| 		l.Trace("next is not an iri, bailing") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
|  | @ -169,24 +171,23 @@ func (d *deref) iterateDescendants(ctx context.Context, username string, statusI | |||
| 
 | ||||
| pageLoop: | ||||
| 	for { | ||||
| 		l.Debugf("dereferencing page %s", currentPageIRI) | ||||
| 		nextPage, err := d.DereferenceCollectionPage(ctx, username, currentPageIRI) | ||||
| 		l.Tracef("dereferencing page %s", currentPageIRI) | ||||
| 		collectionPage, err := d.DereferenceCollectionPage(ctx, username, currentPageIRI) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 			l.Debugf("couldn't get remote collection page %s: %s; breaking pageLoop", currentPageIRI, err) | ||||
| 			break pageLoop | ||||
| 		} | ||||
| 
 | ||||
| 		// next items could be either a list of URLs or a list of statuses | ||||
| 
 | ||||
| 		nextItems := nextPage.GetActivityStreamsItems() | ||||
| 		if nextItems.Len() == 0 { | ||||
| 		pageItems := collectionPage.GetActivityStreamsItems() | ||||
| 		if pageItems.Len() == 0 { | ||||
| 			// no items on this page, which means we're done | ||||
| 			break pageLoop | ||||
| 		} | ||||
| 
 | ||||
| 		// have a look through items and see what we can find | ||||
| 		for iter := nextItems.Begin(); iter != nextItems.End(); iter = iter.Next() { | ||||
| 		for iter := pageItems.Begin(); iter != pageItems.End(); iter = iter.Next() { | ||||
| 			// We're looking for a url to feed to GetRemoteStatus. | ||||
| 			// Items can be either an IRI, or a Note. | ||||
| 			// Each item can be either an IRI, or a Note. | ||||
| 			// If a note, we grab the ID from it and call it, rather than parsing the note. | ||||
| 			var itemURI *url.URL | ||||
| 			switch { | ||||
|  | @ -195,10 +196,10 @@ pageLoop: | |||
| 				itemURI = iter.GetIRI() | ||||
| 			case iter.IsActivityStreamsNote(): | ||||
| 				// note, get the id from it to use as iri | ||||
| 				n := iter.GetActivityStreamsNote() | ||||
| 				id := n.GetJSONLDId() | ||||
| 				if id != nil && id.IsIRI() { | ||||
| 					itemURI = id.GetIRI() | ||||
| 				note := iter.GetActivityStreamsNote() | ||||
| 				noteID := note.GetJSONLDId() | ||||
| 				if noteID != nil && noteID.IsIRI() { | ||||
| 					itemURI = noteID.GetIRI() | ||||
| 				} | ||||
| 			default: | ||||
| 				// if it's not an iri or a note, we don't know how to process it | ||||
|  | @ -223,12 +224,13 @@ pageLoop: | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		next := nextPage.GetActivityStreamsNext() | ||||
| 		if next != nil && next.IsIRI() { | ||||
| 			l.Debug("setting next page") | ||||
| 			currentPageIRI = next.GetIRI() | ||||
| 		nextPage := collectionPage.GetActivityStreamsNext() | ||||
| 		if nextPage != nil && nextPage.IsIRI() { | ||||
| 			nextPageIRI := nextPage.GetIRI() | ||||
| 			l.Tracef("moving on to next page %s", nextPageIRI) | ||||
| 			currentPageIRI = nextPageIRI | ||||
| 		} else { | ||||
| 			l.Debug("no next page, bailing") | ||||
| 			l.Trace("no next page, bailing") | ||||
| 			break pageLoop | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue