diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/fetchers/app.bsky.feed.go | 20 | ||||
| -rw-r--r-- | backend/notes/note.go | 8 |
2 files changed, 11 insertions, 17 deletions
diff --git a/backend/fetchers/app.bsky.feed.go b/backend/fetchers/app.bsky.feed.go index 5d87cca..4c6b92f 100644 --- a/backend/fetchers/app.bsky.feed.go +++ b/backend/fetchers/app.bsky.feed.go @@ -136,24 +136,18 @@ func parseAppBskyFeedPostCollection(logger *slog.Logger, slingshotURL string, se return notes.DeduplicateThreads(posts), nil } -func FetchParents(logger *slog.Logger, replyToURI string, slingshotURL string, session *auth.OAuthState, cache *Cache, maxDepth int) ([]string, error) { - parents := []string{} - seen := make(map[string]bool) +func FetchParents(logger *slog.Logger, replyToURI string, slingshotURL string, session *auth.OAuthState, cache *Cache, maxDepth int) ([]notes.Note, error) { + parents := []notes.Note{} currentURI := replyToURI for currentURI != "" { - // check for circular reference - if seen[currentURI] { - logger.Warn("circular reference detected in thread", "uri", currentURI) - break - } - seen[currentURI] = true - note, err := GetAppBskyFeedPostByURI(logger, currentURI, slingshotURL, session, cache) if err != nil { logger.Warn("failed to fetch parent", "uri", currentURI, "error", err) - cache.Set(currentURI, notes.MissingNote(currentURI)) - parents = append(parents, currentURI) + note = notes.MissingNote(currentURI) + + cache.Set(currentURI, note) + parents = append(parents, *note) break } @@ -168,7 +162,7 @@ func FetchParents(logger *slog.Logger, replyToURI string, slingshotURL string, s go FetchAppBskyFeedPosts(logger, note.AuthorDID, authorPDS, slingshotURL, session, cache) } - parents = append(parents, currentURI) + parents = append(parents, *note) if note.ReplyTo == nil { break diff --git a/backend/notes/note.go b/backend/notes/note.go index 569188c..36b9f2b 100644 --- a/backend/notes/note.go +++ b/backend/notes/note.go @@ -16,7 +16,7 @@ type Note struct { CreatedAt time.Time `json:"createdAt"` ReplyTo *string `json:"replyTo,omitempty"` Facets []Facet `json:"facets,omitempty"` - Parents []string `json:"parents,omitempty"` + Parents []Note `json:"parents,omitempty"` } type Facet struct { @@ -35,15 +35,15 @@ func MissingNote(uri string) *Note { } } -func isChainContained(smallChain, bigChain []string) bool { +func isChainContained(smallChain, bigChain []Note) bool { if len(smallChain) > len(bigChain) { return false } // check if smallChain is a suffix of bigChain offset := len(bigChain) - len(smallChain) - for i, uri := range smallChain { - if bigChain[offset+i] != uri { + for i, note := range smallChain { + if bigChain[offset+i].URI != note.URI { return false } } |
