diff --git a/src-tauri/migrations/20230226004139_create_tables.sql b/src-tauri/migrations/20230226004139_create_tables.sql index e7f9fcec..a35c977e 100644 --- a/src-tauri/migrations/20230226004139_create_tables.sql +++ b/src-tauri/migrations/20230226004139_create_tables.sql @@ -35,9 +35,10 @@ CREATE TABLE CREATE TABLE cache_notes ( id TEXT PRIMARY KEY, - note JSON, + pubkey TEXT NOT NULL, + created_at TEXT, kind INTEGER NOT NULL DEFAULT 1, - is_multi BOOLEAN DEFAULT 0, - created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + tags TEXT NOT NULL, + content TEXT NOT NULL, + is_multi BOOLEAN DEFAULT 0 ); \ No newline at end of file diff --git a/src/components/connectors/note.tsx b/src/components/connectors/note.tsx new file mode 100644 index 00000000..b2ae2f6c --- /dev/null +++ b/src/components/connectors/note.tsx @@ -0,0 +1,58 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { DatabaseContext } from '@components/contexts/database'; +import { RelayContext } from '@components/contexts/relay'; + +import { hoursAgo } from '@utils/getDate'; + +import { follows } from '@stores/follows'; +import { relays } from '@stores/relays'; + +import { useStore } from '@nanostores/react'; +import { dateToUnix } from 'nostr-react'; +import { memo, useCallback, useContext, useRef } from 'react'; + +export const NoteConnector = memo(function NoteConnector() { + const db: any = useContext(DatabaseContext); + const relayPool: any = useContext(RelayContext); + + const now = useRef(new Date()); + + const $follows = useStore(follows); + const $relays = useStore(relays); + + const insertDB = useCallback( + async (event: any) => { + await db.execute( + `INSERT OR IGNORE INTO + cache_notes + (id, pubkey, created_at, kind, tags, content) VALUES + ("${event.id}", "${event.pubkey}", "${event.created_at}", "${event.kind}", '${JSON.stringify(event.tags)}', "${event.content}");` + ); + }, + [db] + ); + + relayPool.subscribe( + [ + { + kinds: [1], + authors: $follows, + since: dateToUnix(hoursAgo(12, now.current)), + }, + ], + $relays, + (event: any) => { + insertDB(event).catch(console.error); + }, + undefined, + (events: any, relayURL: any) => { + console.log(events, relayURL); + } + ); + + return ( +
+

Note

+
+ ); +}); diff --git a/src/components/navigatorBar/index.tsx b/src/components/navigatorBar/index.tsx index b11d920e..6b62181f 100644 --- a/src/components/navigatorBar/index.tsx +++ b/src/components/navigatorBar/index.tsx @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import ActiveLink from '@components/activeLink'; +import { NoteConnector } from '@components/connectors/note'; import CreatePost from '@components/navigatorBar/createPost'; import { ProfileMenu } from '@components/navigatorBar/profileMenu'; @@ -10,22 +11,20 @@ import { PlusIcon } from '@radix-ui/react-icons'; export default function NavigatorBar() { const $currentUser: any = useStore(currentUser); - const profile = - $currentUser.metadata !== undefined - ? JSON.parse($currentUser.metadata) - : { display_name: null, username: null }; + const profile = $currentUser.metadata !== undefined ? JSON.parse($currentUser.metadata) : { display_name: null, username: null }; return (
{/* main */}
+
+ +
{/* Create post */}
-
- {profile.display_name || ''} -
+
{profile.display_name || ''}
@{profile.username || ''} @@ -38,9 +37,7 @@ export default function NavigatorBar() {

Newsfeed

-
@@ -65,9 +62,7 @@ export default function NavigatorBar() {

Direct Messages

-
diff --git a/src/pages/feed/following.tsx b/src/pages/feed/following.tsx index 1c69a43a..34410613 100644 --- a/src/pages/feed/following.tsx +++ b/src/pages/feed/following.tsx @@ -3,56 +3,29 @@ import BaseLayout from '@layouts/baseLayout'; import NewsFeedLayout from '@layouts/newsfeedLayout'; import { DatabaseContext } from '@components/contexts/database'; -import { RelayContext } from '@components/contexts/relay'; import { Placeholder } from '@components/note/placeholder'; import { Thread } from '@components/thread'; -import { hoursAgo } from '@utils/getDate'; - -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, Suspense, useContext, useEffect, useRef, useState } from 'react'; export default function Page() { const db: any = useContext(DatabaseContext); - const relayPool: any = useContext(RelayContext); - - const now = useRef(new Date()); - - const $follows = useStore(follows); - const $relays = useStore(relays); - - const [events, setEvents] = useState([]); + const [data, setData] = useState([]); + const limit = useRef(25); useEffect(() => { - const unsub = relayPool.subscribe( - [ - { - kinds: [1], - authors: $follows, - since: dateToUnix(hoursAgo(12, now.current)), - }, - ], - $relays, - async (event: any) => { - setEvents((events) => [event, ...events]); - }, - undefined, - (events: any, relayURL: any) => { - console.log(events, relayURL); - } - ); + const getData = async () => { + const result = await db.select(`SELECT * FROM cache_notes ORDER BY created_at DESC LIMIT ${limit.current}`); + setData(result); + }; - return () => unsub(); - }, [$follows, $relays, db, relayPool]); + getData().catch(console.error); + }, [db]); return (
}> - +
);