diff --git a/src-tauri/migrations/20230420040005_insert_last_login_to_settings.sql b/src-tauri/migrations/20230420040005_insert_last_login_to_settings.sql new file mode 100644 index 00000000..7a8125d8 --- /dev/null +++ b/src-tauri/migrations/20230420040005_insert_last_login_to_settings.sql @@ -0,0 +1,5 @@ +-- Add migration script here +INSERT INTO + settings (key, value) +VALUES + ("last_login", "0"); diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 54cd3367..eac65c05 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -63,6 +63,12 @@ fn main() { sql: include_str!("../migrations/20230418080146_create_chats.sql"), kind: MigrationKind::Up, }, + Migration { + version: 20230420040005, + description: "insert last login to settings", + sql: include_str!("../migrations/20230420040005_insert_last_login_to_settings.sql"), + kind: MigrationKind::Up, + }, ], ) .build(), diff --git a/src/app/page.tsx b/src/app/page.tsx index 7e645ee0..f5410845 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -10,21 +10,21 @@ import { createChat, createNote, getActiveAccount, + getLastLogin, getPlebs, + updateLastLogin, } from '@utils/storage'; import { getParentID } from '@utils/transform'; import LumeSymbol from '@assets/icons/Lume'; -import useLocalStorage, { writeStorage } from '@rehooks/local-storage'; +import { writeStorage } from '@rehooks/local-storage'; import { useRouter } from 'next/navigation'; import { useCallback, useContext, useEffect, useRef } from 'react'; export default function Page() { const router = useRouter(); - const [pool, relays]: any = useContext(RelayContext); - const [lastLogin] = useLocalStorage('lastLogin', new Date()); const now = useRef(new Date()); const timeout = useRef(null); @@ -32,6 +32,7 @@ export default function Page() { const fetchData = useCallback( async (account: { id: number; pubkey: string; chats: string[] }, tags: any) => { + const lastLogin = await getLastLogin(); const notes = await countTotalNotes(); const channels = await countTotalChannels(); const chats = account.chats?.length || 0; @@ -44,7 +45,11 @@ export default function Page() { if (notes.total === 0) { since = dateToUnix(hoursAgo(24, now.current)); } else { - since = dateToUnix(new Date(lastLogin)); + if (parseInt(lastLogin) > 0) { + since = parseInt(lastLogin); + } else { + since = dateToUnix(hoursAgo(24, now.current)); + } } query.push({ kinds: [1, 6], @@ -119,7 +124,8 @@ export default function Page() { }, undefined, () => { - timeout.current = setTimeout(() => router.replace('/nostr/newsfeed/following'), 5000); + updateLastLogin(dateToUnix(now.current)); + //timeout.current = setTimeout(() => router.replace('/nostr/newsfeed/following'), 5000); }, { unsubscribeOnEose: true, @@ -127,7 +133,7 @@ export default function Page() { } ); }, - [router, pool, relays, lastLogin] + [router, pool, relays] ); useEffect(() => { diff --git a/src/components/eventCollector.tsx b/src/components/eventCollector.tsx index d8131c50..4ace023c 100644 --- a/src/components/eventCollector.tsx +++ b/src/components/eventCollector.tsx @@ -9,9 +9,7 @@ import { dateToUnix } from '@utils/getDate'; import { createChannel, createChat, createNote, updateAccount } from '@utils/storage'; import { getParentID, nip02ToArray } from '@utils/transform'; -import useLocalStorage, { writeStorage } from '@rehooks/local-storage'; -import { window } from '@tauri-apps/api'; -import { TauriEvent } from '@tauri-apps/api/event'; +import useLocalStorage from '@rehooks/local-storage'; import { useSetAtom } from 'jotai'; import { useCallback, useContext, useEffect, useRef } from 'react'; @@ -23,10 +21,9 @@ export default function EventCollector() { const follows = JSON.parse(activeAccount.follows); const now = useRef(new Date()); - const unsubscribe = useRef(null); const subscribe = useCallback(async () => { - unsubscribe.current = pool.subscribe( + pool.subscribe( [ { kinds: [1, 6], @@ -106,27 +103,9 @@ export default function EventCollector() { ); }, [activeAccount.follows, activeAccount.pubkey, activeAccount.id, pool, relays, setHasNewerNote]); - const listenWindowClose = useCallback(async () => { - window.getCurrent().listen(TauriEvent.WINDOW_CLOSE_REQUESTED, () => { - writeStorage('lastLogin', now.current); - window.getCurrent().close(); - }); - }, []); - useEffect(() => { subscribe(); - listenWindowClose(); + }, [setHasNewerNote, subscribe]); - return () => { - if (unsubscribe.current) { - unsubscribe.current(); - } - }; - }, [setHasNewerNote, subscribe, listenWindowClose]); - - return ( - <> - - - ); + return ; } diff --git a/src/utils/storage.tsx b/src/utils/storage.tsx index c7562c59..8cf6a05f 100644 --- a/src/utils/storage.tsx +++ b/src/utils/storage.tsx @@ -144,3 +144,16 @@ export async function createChat(account_id: number, pubkey: string, created_at: created_at, ]); } + +// get last login +export async function getLastLogin() { + const db = await connect(); + const result = await db.select(`SELECT value FROM settings WHERE key = "last_login";`); + return result[0]?.value; +} + +// update last login +export async function updateLastLogin(value: number) { + const db = await connect(); + return await db.execute(`UPDATE settings SET value = ${value} WHERE key = "last_login";`); +}