about summary refs log tree commit diff
path: root/src/state/models/cache/posts.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/cache/posts.ts')
-rw-r--r--src/state/models/cache/posts.ts41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/state/models/cache/posts.ts b/src/state/models/cache/posts.ts
index 48621226a..d3632f436 100644
--- a/src/state/models/cache/posts.ts
+++ b/src/state/models/cache/posts.ts
@@ -1,6 +1,11 @@
 import {LRUMap} from 'lru_map'
 import {RootStoreModel} from '../root-store'
-import {AppBskyFeedDefs} from '@atproto/api'
+import {
+  AppBskyFeedDefs,
+  AppBskyEmbedRecord,
+  AppBskyEmbedRecordWithMedia,
+  AppBskyFeedPost,
+} from '@atproto/api'
 
 type PostView = AppBskyFeedDefs.PostView
 
@@ -27,5 +32,39 @@ export class PostsCache {
     ) {
       this.set(feedItem.reply.parent.uri, feedItem.reply.parent)
     }
+    const embed = feedItem.post.embed
+    if (
+      AppBskyEmbedRecord.isView(embed) &&
+      AppBskyEmbedRecord.isViewRecord(embed.record) &&
+      AppBskyFeedPost.isRecord(embed.record.value) &&
+      AppBskyFeedPost.validateRecord(embed.record.value).success
+    ) {
+      this.set(embed.record.uri, embedViewToPostView(embed.record))
+    }
+    if (
+      AppBskyEmbedRecordWithMedia.isView(embed) &&
+      AppBskyEmbedRecord.isViewRecord(embed.record?.record) &&
+      AppBskyFeedPost.isRecord(embed.record.record.value) &&
+      AppBskyFeedPost.validateRecord(embed.record.record.value).success
+    ) {
+      this.set(
+        embed.record.record.uri,
+        embedViewToPostView(embed.record.record),
+      )
+    }
+  }
+}
+
+function embedViewToPostView(
+  embedView: AppBskyEmbedRecord.ViewRecord,
+): PostView {
+  return {
+    $type: 'app.bsky.feed.post#view',
+    uri: embedView.uri,
+    cid: embedView.cid,
+    author: embedView.author,
+    record: embedView.value,
+    indexedAt: embedView.indexedAt,
+    labels: embedView.labels,
   }
 }