diff --git a/src/components/contexts/database.tsx b/src/components/contexts/database.tsx new file mode 100644 index 00000000..c4059a99 --- /dev/null +++ b/src/components/contexts/database.tsx @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { createContext } from 'react'; +import Database from 'tauri-plugin-sql-api'; + +export const DatabaseContext = createContext({}); + +const db = typeof window !== 'undefined' ? await Database.load('sqlite:lume.db') : null; + +export default function DatabaseProvider({ children }: { children: React.ReactNode }) { + const value = db; + + return {children}; +} diff --git a/src/stores/context.tsx b/src/components/contexts/relay.tsx similarity index 100% rename from src/stores/context.tsx rename to src/components/contexts/relay.tsx diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 97c17e48..ff4c5514 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,5 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import RelayProvider from '@stores/context'; +import DatabaseProvider from '@components/contexts/database'; +import RelayProvider from '@components/contexts/relay'; + import { relays } from '@stores/relays'; import { useStore } from '@nanostores/react'; @@ -24,5 +26,9 @@ export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { // Get all relays const $relays = useStore(relays); - return {getLayout()}; + return ( + + {getLayout()} + + ); } diff --git a/src/pages/feed/following.tsx b/src/pages/feed/following.tsx index 1ad966fc..a90ad029 100644 --- a/src/pages/feed/following.tsx +++ b/src/pages/feed/following.tsx @@ -2,37 +2,59 @@ import BaseLayout from '@layouts/baseLayout'; import NewsFeedLayout from '@layouts/newsfeedLayout'; +import { RelayContext } from '@components/contexts/relay'; + import { hoursAgo } from '@utils/getDate'; -import { RelayContext } from '@stores/context'; +import { currentUser } from '@stores/currentUser'; import { follows } from '@stores/follows'; import { relays } from '@stores/relays'; import { useStore } from '@nanostores/react'; import { dateToUnix } from 'nostr-react'; -import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useEffect, useRef, useState } from 'react'; +import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useEffect, useRef } from 'react'; export default function Page() { const relayPool: any = useContext(RelayContext); - - const [data, setData] = useState([]); const now = useRef(new Date()); const $follows = useStore(follows); const $relays = useStore(relays); + const $currentUser = useStore(currentUser); useEffect(() => { const unsub = relayPool.subscribe( [ { - kinds: [1], + kinds: [0, 1, 3, 5, 7], authors: $follows, since: dateToUnix(hoursAgo(12, now.current)), }, ], $relays, - (event: any) => { - setData((data) => [event, ...data]); + async (event: any) => { + switch (event.kind) { + case 0: + //await db.execute(`INSERT OR IGNORE INTO cache_profiles (id, metadata) VALUES ("${event.pubkey}", '${JSON.stringify(event.content)}')`); + break; + case 3: + //await db.execute(`INSERT OR IGNORE INTO follows (pubkey, account, kind) VALUES ("${event.pubkey}", "${$currentUser.pubkey}", "1")`); + break; + case 1: + case 5: + case 7: + /* + const isMulti = event.tags.length > 0; + await db.execute( + `INSERT OR IGNORE INTO cache_notes (id, note, kind, is_multi) VALUES ("${event.pubkey}", '${JSON.stringify(event)}', "${ + event.kind + }", "${isMulti}")` + ); + */ + break; + default: + break; + } }, undefined, (events: any, relayURL: any) => { @@ -41,15 +63,9 @@ export default function Page() { ); return () => unsub(); - }, [$follows, $relays, relayPool]); + }, [$currentUser.pubkey, $follows, $relays, relayPool]); - return ( -
{item.id}