feat: community mode (#738)
Co-authored-by: CXPLAY <62034099+cxplay@users.noreply.github.com>
This commit is contained in:
parent
686b1f9998
commit
ed8a22d5bc
21 changed files with 303 additions and 101 deletions
|
|
@ -1,8 +1,9 @@
|
|||
import { IS_COMMUNITY_MODE, COMMUNITY_RELAY_SETS, COMMUNITY_RELAYS } from '@/constants'
|
||||
import { getRelaySetFromEvent } from '@/lib/event-metadata'
|
||||
import { isWebsocketUrl, normalizeUrl } from '@/lib/url'
|
||||
import indexedDb from '@/services/indexed-db.service'
|
||||
import storage from '@/services/local-storage.service'
|
||||
import { TFeedInfo, TFeedType } from '@/types'
|
||||
import { TFeedInfo, TFeedType, TRelaySet } from '@/types'
|
||||
import { kinds } from 'nostr-tools'
|
||||
import { createContext, useContext, useEffect, useRef, useState } from 'react'
|
||||
import { useFavoriteRelays } from './FavoriteRelaysProvider'
|
||||
|
|
@ -48,9 +49,21 @@ export function FeedProvider({ children }: { children: React.ReactNode }) {
|
|||
if (storedFeedInfo) {
|
||||
feedInfo = storedFeedInfo
|
||||
} else {
|
||||
feedInfo = { feedType: 'following' }
|
||||
if (!IS_COMMUNITY_MODE) {
|
||||
feedInfo = { feedType: 'following' }
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!feedInfo && IS_COMMUNITY_MODE) {
|
||||
feedInfo =
|
||||
COMMUNITY_RELAY_SETS.length > 0
|
||||
? {
|
||||
feedType: 'relays',
|
||||
id: COMMUNITY_RELAY_SETS[0].id,
|
||||
name: COMMUNITY_RELAY_SETS[0].name
|
||||
}
|
||||
: { feedType: 'relay', id: COMMUNITY_RELAYS[0] }
|
||||
}
|
||||
|
||||
if (feedInfo?.feedType === 'relays') {
|
||||
return await switchFeed('relays', { activeRelaySetId: feedInfo.id })
|
||||
|
|
@ -109,24 +122,33 @@ export function FeedProvider({ children }: { children: React.ReactNode }) {
|
|||
}
|
||||
if (feedType === 'relays') {
|
||||
const relaySetId = options.activeRelaySetId ?? (relaySets.length > 0 ? relaySets[0].id : null)
|
||||
if (!relaySetId || !pubkey) {
|
||||
setIsReady(true)
|
||||
return
|
||||
}
|
||||
let relaySet: TRelaySet | null = null
|
||||
if (IS_COMMUNITY_MODE) {
|
||||
relaySet =
|
||||
COMMUNITY_RELAY_SETS.find((set) => set.id === relaySetId) ??
|
||||
(COMMUNITY_RELAY_SETS.length > 0 ? COMMUNITY_RELAY_SETS[0] : null)
|
||||
} else {
|
||||
if (!relaySetId || !pubkey) {
|
||||
setIsReady(true)
|
||||
return
|
||||
}
|
||||
|
||||
let relaySet =
|
||||
relaySets.find((set) => set.id === relaySetId) ??
|
||||
(relaySets.length > 0 ? relaySets[0] : null)
|
||||
if (!relaySet) {
|
||||
const storedRelaySetEvent = await indexedDb.getReplaceableEvent(
|
||||
pubkey,
|
||||
kinds.Relaysets,
|
||||
relaySetId
|
||||
)
|
||||
if (storedRelaySetEvent) {
|
||||
relaySet = getRelaySetFromEvent(storedRelaySetEvent)
|
||||
relaySet =
|
||||
relaySets.find((set) => set.id === relaySetId) ??
|
||||
(relaySets.length > 0 ? relaySets[0] : null)
|
||||
|
||||
if (!relaySet) {
|
||||
const storedRelaySetEvent = await indexedDb.getReplaceableEvent(
|
||||
pubkey,
|
||||
kinds.Relaysets,
|
||||
relaySetId
|
||||
)
|
||||
if (storedRelaySetEvent) {
|
||||
relaySet = getRelaySetFromEvent(storedRelaySetEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (relaySet) {
|
||||
const newFeedInfo = { feedType, id: relaySet.id }
|
||||
setFeedInfo(newFeedInfo)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue