feat: show relay close reasons in certain feeds
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import NoteList, { TNoteListRef } from '@/components/NoteList'
|
import NoteList, { TNoteListRef } from '@/components/NoteList'
|
||||||
import Tabs from '@/components/Tabs'
|
import Tabs from '@/components/Tabs'
|
||||||
|
import { isTouchDevice } from '@/lib/utils'
|
||||||
import { useKindFilter } from '@/providers/KindFilterProvider'
|
import { useKindFilter } from '@/providers/KindFilterProvider'
|
||||||
import { useUserTrust } from '@/providers/UserTrustProvider'
|
import { useUserTrust } from '@/providers/UserTrustProvider'
|
||||||
import storage from '@/services/local-storage.service'
|
import storage from '@/services/local-storage.service'
|
||||||
@@ -7,16 +8,17 @@ import { TFeedSubRequest, TNoteListMode } from '@/types'
|
|||||||
import { useMemo, useRef, useState } from 'react'
|
import { useMemo, useRef, useState } from 'react'
|
||||||
import KindFilter from '../KindFilter'
|
import KindFilter from '../KindFilter'
|
||||||
import { RefreshButton } from '../RefreshButton'
|
import { RefreshButton } from '../RefreshButton'
|
||||||
import { isTouchDevice } from '@/lib/utils'
|
|
||||||
|
|
||||||
export default function NormalFeed({
|
export default function NormalFeed({
|
||||||
subRequests,
|
subRequests,
|
||||||
areAlgoRelays = false,
|
areAlgoRelays = false,
|
||||||
isMainFeed = false
|
isMainFeed = false,
|
||||||
|
showRelayCloseReason = false
|
||||||
}: {
|
}: {
|
||||||
subRequests: TFeedSubRequest[]
|
subRequests: TFeedSubRequest[]
|
||||||
areAlgoRelays?: boolean
|
areAlgoRelays?: boolean
|
||||||
isMainFeed?: boolean
|
isMainFeed?: boolean
|
||||||
|
showRelayCloseReason?: boolean
|
||||||
}) {
|
}) {
|
||||||
const { hideUntrustedNotes } = useUserTrust()
|
const { hideUntrustedNotes } = useUserTrust()
|
||||||
const { showKinds } = useKindFilter()
|
const { showKinds } = useKindFilter()
|
||||||
@@ -63,6 +65,7 @@ export default function NormalFeed({
|
|||||||
hideReplies={listMode === 'posts'}
|
hideReplies={listMode === 'posts'}
|
||||||
hideUntrustedNotes={hideUntrustedNotes}
|
hideUntrustedNotes={hideUntrustedNotes}
|
||||||
areAlgoRelays={areAlgoRelays}
|
areAlgoRelays={areAlgoRelays}
|
||||||
|
showRelayCloseReason={showRelayCloseReason}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import {
|
|||||||
} from 'react'
|
} from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import PullToRefresh from 'react-simple-pull-to-refresh'
|
import PullToRefresh from 'react-simple-pull-to-refresh'
|
||||||
|
import { toast } from 'sonner'
|
||||||
import NoteCard, { NoteCardLoadingSkeleton } from '../NoteCard'
|
import NoteCard, { NoteCardLoadingSkeleton } from '../NoteCard'
|
||||||
|
|
||||||
const LIMIT = 200
|
const LIMIT = 200
|
||||||
@@ -41,7 +42,8 @@ const NoteList = forwardRef(
|
|||||||
filterMutedNotes = true,
|
filterMutedNotes = true,
|
||||||
hideReplies = false,
|
hideReplies = false,
|
||||||
hideUntrustedNotes = false,
|
hideUntrustedNotes = false,
|
||||||
areAlgoRelays = false
|
areAlgoRelays = false,
|
||||||
|
showRelayCloseReason = false
|
||||||
}: {
|
}: {
|
||||||
subRequests: TFeedSubRequest[]
|
subRequests: TFeedSubRequest[]
|
||||||
showKinds: number[]
|
showKinds: number[]
|
||||||
@@ -49,6 +51,7 @@ const NoteList = forwardRef(
|
|||||||
hideReplies?: boolean
|
hideReplies?: boolean
|
||||||
hideUntrustedNotes?: boolean
|
hideUntrustedNotes?: boolean
|
||||||
areAlgoRelays?: boolean
|
areAlgoRelays?: boolean
|
||||||
|
showRelayCloseReason?: boolean
|
||||||
},
|
},
|
||||||
ref
|
ref
|
||||||
) => {
|
) => {
|
||||||
@@ -184,6 +187,11 @@ const NoteList = forwardRef(
|
|||||||
[event, ...oldEvents].sort((a, b) => b.created_at - a.created_at)
|
[event, ...oldEvents].sort((a, b) => b.created_at - a.created_at)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onClose: (url, reason) => {
|
||||||
|
if (!showRelayCloseReason) return
|
||||||
|
if (reason === 'closed by caller') return
|
||||||
|
toast.error(`${url}: ${reason}`)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ export default function Relay({ url, className }: { url?: string; className?: st
|
|||||||
subRequests={[
|
subRequests={[
|
||||||
{ urls: [normalizedUrl], filter: debouncedInput ? { search: debouncedInput } : {} }
|
{ urls: [normalizedUrl], filter: debouncedInput ? { search: debouncedInput } : {} }
|
||||||
]}
|
]}
|
||||||
|
showRelayCloseReason
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export default function SearchResult({ searchParams }: { searchParams: TSearchPa
|
|||||||
return (
|
return (
|
||||||
<NormalFeed
|
<NormalFeed
|
||||||
subRequests={[{ urls: SEARCHABLE_RELAY_URLS, filter: { search: searchParams.search } }]}
|
subRequests={[{ urls: SEARCHABLE_RELAY_URLS, filter: { search: searchParams.search } }]}
|
||||||
|
showRelayCloseReason
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -27,6 +28,7 @@ export default function SearchResult({ searchParams }: { searchParams: TSearchPa
|
|||||||
return (
|
return (
|
||||||
<NormalFeed
|
<NormalFeed
|
||||||
subRequests={[{ urls: BIG_RELAY_URLS, filter: { '#t': [searchParams.search] } }]}
|
subRequests={[{ urls: BIG_RELAY_URLS, filter: { '#t': [searchParams.search] } }]}
|
||||||
|
showRelayCloseReason
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ export default function RelaysFeed() {
|
|||||||
subRequests={[{ urls: relayUrls, filter: {} }]}
|
subRequests={[{ urls: relayUrls, filter: {} }]}
|
||||||
areAlgoRelays={areAlgoRelays}
|
areAlgoRelays={areAlgoRelays}
|
||||||
isMainFeed
|
isMainFeed
|
||||||
|
showRelayCloseReason
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ export function NotificationProvider({ children }: { children: React.ReactNode }
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onclose: (reasons) => {
|
onAllClose: (reasons) => {
|
||||||
if (reasons.every((reason) => reason === 'closed by caller')) {
|
if (reasons.every((reason) => reason === 'closed by caller')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,10 +238,12 @@ class ClientService extends EventTarget {
|
|||||||
subRequests: { urls: string[]; filter: TSubRequestFilter }[],
|
subRequests: { urls: string[]; filter: TSubRequestFilter }[],
|
||||||
{
|
{
|
||||||
onEvents,
|
onEvents,
|
||||||
onNew
|
onNew,
|
||||||
|
onClose
|
||||||
}: {
|
}: {
|
||||||
onEvents: (events: NEvent[], eosed: boolean) => void
|
onEvents: (events: NEvent[], eosed: boolean) => void
|
||||||
onNew: (evt: NEvent) => void
|
onNew: (evt: NEvent) => void
|
||||||
|
onClose?: (url: string, reason: string) => void
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
startLogin,
|
startLogin,
|
||||||
@@ -285,7 +287,8 @@ class ClientService extends EventTarget {
|
|||||||
if (newEventIdSet.has(evt.id)) return
|
if (newEventIdSet.has(evt.id)) return
|
||||||
newEventIdSet.add(evt.id)
|
newEventIdSet.add(evt.id)
|
||||||
onNew(evt)
|
onNew(evt)
|
||||||
}
|
},
|
||||||
|
onClose
|
||||||
},
|
},
|
||||||
{ startLogin, needSort }
|
{ startLogin, needSort }
|
||||||
)
|
)
|
||||||
@@ -337,12 +340,14 @@ class ClientService extends EventTarget {
|
|||||||
onevent,
|
onevent,
|
||||||
oneose,
|
oneose,
|
||||||
onclose,
|
onclose,
|
||||||
startLogin
|
startLogin,
|
||||||
|
onAllClose
|
||||||
}: {
|
}: {
|
||||||
onevent?: (evt: NEvent) => void
|
onevent?: (evt: NEvent) => void
|
||||||
oneose?: (eosed: boolean) => void
|
oneose?: (eosed: boolean) => void
|
||||||
onclose?: (reasons: string[]) => void
|
onclose?: (url: string, reason: string) => void
|
||||||
startLogin?: () => void
|
startLogin?: () => void
|
||||||
|
onAllClose?: (reasons: string[]) => void
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const relays = Array.from(new Set(urls))
|
const relays = Array.from(new Set(urls))
|
||||||
@@ -437,8 +442,9 @@ class ClientService extends EventTarget {
|
|||||||
// close the subscription
|
// close the subscription
|
||||||
closedCount++
|
closedCount++
|
||||||
closeReasons.push(reason)
|
closeReasons.push(reason)
|
||||||
|
onclose?.(url, reason)
|
||||||
if (closedCount >= startedCount) {
|
if (closedCount >= startedCount) {
|
||||||
onclose?.(closeReasons)
|
onAllClose?.(closeReasons)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
},
|
},
|
||||||
@@ -467,10 +473,12 @@ class ClientService extends EventTarget {
|
|||||||
filter: TSubRequestFilter, // filter with limit,
|
filter: TSubRequestFilter, // filter with limit,
|
||||||
{
|
{
|
||||||
onEvents,
|
onEvents,
|
||||||
onNew
|
onNew,
|
||||||
|
onClose
|
||||||
}: {
|
}: {
|
||||||
onEvents: (events: NEvent[], eosed: boolean) => void
|
onEvents: (events: NEvent[], eosed: boolean) => void
|
||||||
onNew: (evt: NEvent) => void
|
onNew: (evt: NEvent) => void
|
||||||
|
onClose?: (url: string, reason: string) => void
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
startLogin,
|
startLogin,
|
||||||
@@ -575,7 +583,8 @@ class ClientService extends EventTarget {
|
|||||||
timeline.refs = newRefs.concat(timeline.refs)
|
timeline.refs = newRefs.concat(timeline.refs)
|
||||||
onEvents([...events.concat(cachedEvents).slice(0, filter.limit)], true)
|
onEvents([...events.concat(cachedEvents).slice(0, filter.limit)], true)
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
onclose: onClose
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user