diff --git a/src/components/dms/MessageItem.tsx b/src/components/dms/MessageItem.tsx
index c5ff810915..e9536e26d0 100644
--- a/src/components/dms/MessageItem.tsx
+++ b/src/components/dms/MessageItem.tsx
@@ -6,12 +6,17 @@ import {
TextStyle,
View,
} from 'react-native'
-import {ChatBskyConvoDefs, RichText as RichTextAPI} from '@atproto/api'
+import {
+ AppBskyEmbedRecord,
+ ChatBskyConvoDefs,
+ RichText as RichTextAPI,
+} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {ConvoItem} from '#/state/messages/convo/types'
import {useSession} from '#/state/session'
+import {PostEmbeds} from 'view/com/util/post-embeds'
import {TimeElapsed} from 'view/com/util/TimeElapsed'
import {atoms as a, useTheme} from '#/alf'
import {ActionsWrapper} from '#/components/dms/ActionsWrapper'
@@ -107,6 +112,11 @@ let MessageItem = ({
interactiveStyle={a.underline}
enableTags
/>
+
+ {item.message.embed &&
+ AppBskyEmbedRecord.isView(item.message.embed) && (
+
+ )}
diff --git a/src/screens/Messages/Conversation/MessagesList.tsx b/src/screens/Messages/Conversation/MessagesList.tsx
index 56edd45b81..2ce4952280 100644
--- a/src/screens/Messages/Conversation/MessagesList.tsx
+++ b/src/screens/Messages/Conversation/MessagesList.tsx
@@ -17,7 +17,6 @@ import {AppBskyEmbedRecord, AppBskyRichtextFacet, RichText} from '@atproto/api'
import {PostView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
import {shortenLinks} from '#/lib/strings/rich-text-manip'
-import {logger} from '#/logger'
import {isIOS, isNative} from '#/platform/detection'
import {isConvoActive, useConvoActive} from '#/state/messages/convo'
import {ConvoItem, ConvoStatus} from '#/state/messages/convo/types'
@@ -274,7 +273,7 @@ export function MessagesList({
await rt.detectFacets(getAgent())
rt = shortenLinks(rt)
- const {facets, embed} = handleFacets(rt, getPost)
+ const {facets, embed} = await handleFacets(rt, getPost)
if (!hasScrolled) {
setHasScrolled(true)
@@ -368,7 +367,7 @@ export function MessagesList({
)
}
-function handleFacets(
+async function handleFacets(
rt: RichText,
getPost: ({uri}: {uri: string}) => Promise,
) {
@@ -376,18 +375,17 @@ function handleFacets(
let embed: AppBskyEmbedRecord.Main | undefined
if (rt.facets) {
for (const facet of rt.facets) {
- if (AppBskyRichtextFacet.isMention(facet)) {
- if (facet.did) {
- facets.push(facet)
- }
- } else {
- if (
- AppBskyRichtextFacet.isLink(facet) &&
- isBskyPostUrl(facet.uri) &&
- !embed
- ) {
- getPostAsQuote(getPost, facet.uri).then(
- post => {
+ let skip = false
+ for (const feature of facet.features) {
+ if (AppBskyRichtextFacet.isMention(feature)) {
+ if (!feature.did) {
+ skip = true
+ break
+ }
+ } else if (AppBskyRichtextFacet.isLink(feature)) {
+ if (isBskyPostUrl(feature.uri)) {
+ const post = await getPostAsQuote(getPost, feature.uri)
+ if (post) {
embed = {
$type: 'app.bsky.embed.record',
record: {
@@ -395,14 +393,12 @@ function handleFacets(
cid: post.cid,
},
}
- },
- err => {
- logger.error('Failed to fetch post for quote embedding', {
- message: err.toString(),
- })
- },
- )
+ }
+ }
}
+ }
+
+ if (!skip) {
facets.push(facet)
}
}