diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-05-31 18:41:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-31 10:41:06 -0500 |
commit | 8eb3cebb362cc438e368a9fbb78e2f85403ffeed (patch) | |
tree | 3c82cd4701c830a43e7f13825fc912304069625c /src/lib | |
parent | 455937dd0f7248033f412f53f7d2be89978aa4f2 (diff) | |
download | voidsky-8eb3cebb362cc438e368a9fbb78e2f85403ffeed.tar.zst |
[🐴] send record via link in text (Record DMs - base PR) (#4227)
* send record via link in text * re-trim text after removing link
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/api/index.ts | 15 | ||||
-rw-r--r-- | src/lib/strings/rich-text-manip.ts | 24 |
2 files changed, 22 insertions, 17 deletions
diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index bc50f9cb3..dfaae2e01 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -4,7 +4,6 @@ import { AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, AppBskyFeedThreadgate, - AppBskyRichtextFacet, BskyAgent, ComAtprotoLabelDefs, ComAtprotoRepoUploadBlob, @@ -15,7 +14,7 @@ import {AtUri} from '@atproto/api' import {logger} from '#/logger' import {ThreadgateSetting} from '#/state/queries/threadgate' import {isNetworkError} from 'lib/strings/errors' -import {shortenLinks} from 'lib/strings/rich-text-manip' +import {shortenLinks, stripInvalidMentions} from 'lib/strings/rich-text-manip' import {isNative, isWeb} from 'platform/detection' import {ImageModel} from 'state/models/media/image' import {LinkMeta} from '../link-meta/link-meta' @@ -81,17 +80,7 @@ export async function post(agent: BskyAgent, opts: PostOpts) { opts.onStateChange?.('Processing...') await rt.detectFacets(agent) rt = shortenLinks(rt) - - // filter out any mention facets that didn't map to a user - rt.facets = rt.facets?.filter(facet => { - const mention = facet.features.find(feature => - AppBskyRichtextFacet.isMention(feature), - ) - if (mention && !mention.did) { - return false - } - return true - }) + rt = stripInvalidMentions(rt) // add quote embed if present if (opts.quote) { diff --git a/src/lib/strings/rich-text-manip.ts b/src/lib/strings/rich-text-manip.ts index 508e0772e..2e84656f2 100644 --- a/src/lib/strings/rich-text-manip.ts +++ b/src/lib/strings/rich-text-manip.ts @@ -1,4 +1,4 @@ -import {RichText, UnicodeString} from '@atproto/api' +import {AppBskyRichtextFacet, RichText, UnicodeString} from '@atproto/api' import {toShortUrl} from './url-helpers' @@ -10,9 +10,7 @@ export function shortenLinks(rt: RichText): RichText { // enumerate the link facets if (rt.facets) { for (const facet of rt.facets) { - const isLink = !!facet.features.find( - f => f.$type === 'app.bsky.richtext.facet#link', - ) + const isLink = !!facet.features.find(AppBskyRichtextFacet.isLink) if (!isLink) { continue } @@ -33,3 +31,21 @@ export function shortenLinks(rt: RichText): RichText { } return rt } + +// filter out any mention facets that didn't map to a user +export function stripInvalidMentions(rt: RichText): RichText { + if (!rt.facets?.length) { + return rt + } + rt = rt.clone() + if (rt.facets) { + rt.facets = rt.facets?.filter(facet => { + const mention = facet.features.find(AppBskyRichtextFacet.isMention) + if (mention && !mention.did) { + return false + } + return true + }) + } + return rt +} |