feat: audio

This commit is contained in:
codytseng
2025-07-29 22:44:43 +08:00
parent de09942124
commit 4ea5ea1705
37 changed files with 629 additions and 145 deletions

View File

@@ -6,7 +6,7 @@ import {
IMAGE_REGEX,
LN_INVOICE_REGEX,
URL_REGEX,
VIDEO_REGEX,
MEDIA_REGEX,
WS_URL_REGEX
} from '@/constants'
@@ -14,7 +14,7 @@ export type TEmbeddedNodeType =
| 'text'
| 'image'
| 'images'
| 'video'
| 'media'
| 'event'
| 'mention'
| 'legacy-mention'
@@ -61,9 +61,9 @@ export const EmbeddedImageParser: TContentParser = {
regex: IMAGE_REGEX
}
export const EmbeddedVideoParser: TContentParser = {
type: 'video',
regex: VIDEO_REGEX
export const EmbeddedMediaParser: TContentParser = {
type: 'media',
regex: MEDIA_REGEX
}
export const EmbeddedWebsocketUrlParser: TContentParser = {

View File

@@ -494,28 +494,16 @@ async function extractRelatedEventIds(content: string, parentEvent?: Event) {
async function extractCommentMentions(content: string, parentEvent: Event) {
const quoteEventIds: string[] = []
const rootCoordinateTag =
parentEvent.kind === ExtendedKind.COMMENT
? parentEvent.tags.find(tagNameEquals('A'))
: isReplaceableEvent(parentEvent.kind)
? buildATag(parentEvent, true)
: undefined
const rootEventId =
parentEvent.kind === ExtendedKind.COMMENT
? parentEvent.tags.find(tagNameEquals('E'))?.[1]
: parentEvent.id
const rootKind =
parentEvent.kind === ExtendedKind.COMMENT
? parentEvent.tags.find(tagNameEquals('K'))?.[1]
: parentEvent.kind
const rootPubkey =
parentEvent.kind === ExtendedKind.COMMENT
? parentEvent.tags.find(tagNameEquals('P'))?.[1]
: parentEvent.pubkey
const rootUrl =
parentEvent.kind === ExtendedKind.COMMENT
? parentEvent.tags.find(tagNameEquals('I'))?.[1]
const isComment = [ExtendedKind.COMMENT, ExtendedKind.VOICE_COMMENT].includes(parentEvent.kind)
const rootCoordinateTag = isComment
? parentEvent.tags.find(tagNameEquals('A'))
: isReplaceableEvent(parentEvent.kind)
? buildATag(parentEvent, true)
: undefined
const rootEventId = isComment ? parentEvent.tags.find(tagNameEquals('E'))?.[1] : parentEvent.id
const rootKind = isComment ? parentEvent.tags.find(tagNameEquals('K'))?.[1] : parentEvent.kind
const rootPubkey = isComment ? parentEvent.tags.find(tagNameEquals('P'))?.[1] : parentEvent.pubkey
const rootUrl = isComment ? parentEvent.tags.find(tagNameEquals('I'))?.[1] : undefined
const addToSet = (arr: string[], item: string) => {
if (!arr.includes(item)) arr.push(item)

View File

@@ -21,7 +21,10 @@ export function isNsfwEvent(event: Event) {
}
export function isReplyNoteEvent(event: Event) {
if (![kinds.ShortTextNote, ExtendedKind.COMMENT].includes(event.kind)) return false
if ([ExtendedKind.COMMENT, ExtendedKind.VOICE_COMMENT].includes(event.kind)) {
return true
}
if (event.kind !== kinds.ShortTextNote) return false
const cache = EVENT_IS_REPLY_NOTE_CACHE.get(event.id)
if (cache !== undefined) return cache
@@ -44,12 +47,14 @@ export function isProtectedEvent(event: Event) {
}
export function getParentETag(event?: Event) {
if (!event || ![kinds.ShortTextNote, ExtendedKind.COMMENT].includes(event.kind)) return undefined
if (!event) return undefined
if (event.kind === ExtendedKind.COMMENT) {
if (event.kind === ExtendedKind.COMMENT || event.kind === ExtendedKind.VOICE_COMMENT) {
return event.tags.find(tagNameEquals('e')) ?? event.tags.find(tagNameEquals('E'))
}
if (event.kind !== kinds.ShortTextNote) return undefined
let tag = event.tags.find(([tagName, , , marker]) => {
return tagName === 'e' && marker === 'reply'
})
@@ -63,7 +68,12 @@ export function getParentETag(event?: Event) {
}
export function getParentATag(event?: Event) {
if (!event || ![kinds.ShortTextNote, ExtendedKind.COMMENT].includes(event.kind)) return undefined
if (
!event ||
![kinds.ShortTextNote, ExtendedKind.COMMENT, ExtendedKind.VOICE_COMMENT].includes(event.kind)
) {
return undefined
}
return event.tags.find(tagNameEquals('a')) ?? event.tags.find(tagNameEquals('A'))
}
@@ -86,12 +96,14 @@ export function getParentBech32Id(event?: Event) {
}
export function getRootETag(event?: Event) {
if (!event || ![kinds.ShortTextNote, ExtendedKind.COMMENT].includes(event.kind)) return undefined
if (!event) return undefined
if (event.kind === ExtendedKind.COMMENT) {
if (event.kind === ExtendedKind.COMMENT || ExtendedKind.VOICE_COMMENT) {
return event.tags.find(tagNameEquals('E'))
}
if (event.kind !== kinds.ShortTextNote) return undefined
let tag = event.tags.find(([tagName, , , marker]) => {
return tagName === 'e' && marker === 'root'
})
@@ -105,7 +117,12 @@ export function getRootETag(event?: Event) {
}
export function getRootATag(event?: Event) {
if (!event || event.kind !== ExtendedKind.COMMENT) return undefined
if (
!event ||
![kinds.ShortTextNote, ExtendedKind.COMMENT, ExtendedKind.VOICE_COMMENT].includes(event.kind)
) {
return undefined
}
return event.tags.find(tagNameEquals('A'))
}