Use a post and handle-resolution cache to enable quick postthread loading (#1097)

* Use a post and handle-resolution cache to enable quick postthread loading

* Fix positioning of thread when loaded from cache and give more visual cues

* Include parent posts in cache

* Include notifications in cache
This commit is contained in:
Paul Frazee 2023-08-03 09:44:43 -07:00 committed by GitHub
parent 7256169506
commit a63f97aef2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 167 additions and 18 deletions

View file

@ -503,7 +503,9 @@ export class NotificationsFeedModel {
const postsRes = await this.rootStore.agent.app.bsky.feed.getPosts({
uris: [addedUri],
})
notif.setAdditionalData(postsRes.data.posts[0])
const post = postsRes.data.posts[0]
notif.setAdditionalData(post)
this.rootStore.posts.set(post.uri, post)
}
const filtered = this._filterNotifications([notif])
return filtered[0]
@ -611,6 +613,7 @@ export class NotificationsFeedModel {
),
)
for (const post of postsChunks.flat()) {
this.rootStore.posts.set(post.uri, post)
const models = addedPostMap.get(post.uri)
if (models?.length) {
for (const model of models) {

View file

@ -374,6 +374,9 @@ export class PostsFeedModel {
this.rootStore.me.follows.hydrateProfiles(
res.data.feed.map(item => item.post.author),
)
for (const item of res.data.feed) {
this.rootStore.posts.fromFeedItem(item)
}
const slices = this.tuner.tune(res.data.feed, this.feedTuners)
@ -405,6 +408,7 @@ export class PostsFeedModel {
res: GetTimeline.Response | GetAuthorFeed.Response | GetCustomFeed.Response,
) {
for (const item of res.data.feed) {
this.rootStore.posts.fromFeedItem(item)
const existingSlice = this.slices.find(slice =>
slice.containsUri(item.post.uri),
)