From 71338b3b072ab0c579a17aacaf578af6215ecb24 Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Sun, 6 Aug 2023 07:59:43 +0700 Subject: [PATCH] wip: network --- package.json | 1 + pnpm-lock.yaml | 3 + public/lume.png | Bin 0 -> 56759 bytes src-tauri/src/main.rs | 19 +- src-tauri/tauri.conf.json | 24 ++- src/app.tsx | 75 ++++---- src/app/auth/components/user.tsx | 6 +- src/app/auth/create/step-1.tsx | 34 ++-- src/app/auth/create/step-2.tsx | 22 +-- src/app/auth/create/step-3.tsx | 28 +-- src/app/auth/create/step-4.tsx | 4 +- src/app/auth/create/step-5.tsx | 12 +- src/app/auth/import/step-1.tsx | 8 +- src/app/auth/import/step-2.tsx | 22 +-- src/app/auth/import/step-3.tsx | 70 ++++---- src/app/auth/migrate.tsx | 4 +- src/app/auth/welcome.tsx | 40 ++++- src/app/channel/components/createModal.tsx | 10 +- src/app/channel/components/item.tsx | 2 +- src/app/channel/components/messages/form.tsx | 4 +- .../channel/components/messages/userReply.tsx | 4 +- src/app/chats/components/item.tsx | 2 +- src/app/chats/components/modal.tsx | 6 +- src/app/chats/components/self.tsx | 2 +- src/app/chats/components/sidebar.tsx | 2 +- src/app/chats/components/unknowns.tsx | 2 +- src/app/root.tsx | 169 ------------------ src/app/settings/account.tsx | 4 +- src/app/settings/shortcuts.tsx | 20 +-- src/app/space/components/blocks/network.tsx | 2 +- src/app/space/components/modals/feed.tsx | 2 +- src/app/space/hooks/useNewsfeed.tsx | 4 +- src/app/splash.tsx | 58 ++++++ src/app/users/components/profile.tsx | 4 +- src/app/users/index.tsx | 2 +- src/libs/storage.tsx | 6 +- src/shared/accounts/active.tsx | 2 +- src/shared/appLayout.tsx | 9 +- src/shared/button.tsx | 6 +- src/shared/editProfileModal.tsx | 14 +- src/shared/navigation.tsx | 4 +- src/shared/notes/actions/more.tsx | 4 +- src/shared/notes/actions/reaction.tsx | 24 ++- src/shared/notification/modal.tsx | 2 +- src/shared/notification/types/repost.tsx | 2 +- src/shared/user.tsx | 4 +- src/shared/userProfile.tsx | 2 +- src/utils/hooks/useNostr.tsx | 135 ++++++++++++++ src/utils/types.d.ts | 4 +- 49 files changed, 465 insertions(+), 424 deletions(-) create mode 100644 public/lume.png delete mode 100644 src/app/root.tsx create mode 100644 src/app/splash.tsx create mode 100644 src/utils/hooks/useNostr.tsx diff --git a/package.json b/package.json index 3142ea8e..a82ac475 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "html-to-text": "^9.0.5", "immer": "^10.0.2", "light-bolt11-decoder": "^3.0.0", + "lru-cache": "^10.0.0", "million": "2.5.4-beta.2", "nostr-fetch": "^0.12.2", "nostr-tools": "^1.14.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdf55f7c..e08b31c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,6 +136,9 @@ dependencies: light-bolt11-decoder: specifier: ^3.0.0 version: 3.0.0 + lru-cache: + specifier: ^10.0.0 + version: 10.0.0 million: specifier: 2.5.4-beta.2 version: 2.5.4-beta.2 diff --git a/public/lume.png b/public/lume.png new file mode 100644 index 0000000000000000000000000000000000000000..e830d7ef2b9c526221fbe22a035da62db6e5f765 GIT binary patch literal 56759 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 literal 0 HcmV?d00001 diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 43a99a62..8988832d 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -4,11 +4,11 @@ )] // use rand::distributions::{Alphanumeric, DistString}; -use tauri::{Manager}; +use tauri::Manager; use tauri_plugin_autostart::MacosLauncher; use tauri_plugin_sql::{Migration, MigrationKind}; use window_shadows::set_shadow; -use window_vibrancy::{apply_blur, apply_vibrancy, NSVisualEffectMaterial}; +use window_vibrancy::{apply_mica, apply_vibrancy, NSVisualEffectMaterial}; #[derive(Clone, serde::Serialize)] struct Payload { @@ -16,6 +16,16 @@ struct Payload { cwd: String, } +#[tauri::command] +async fn close_splashscreen(window: tauri::Window) { + // Close splashscreen + if let Some(splashscreen) = window.get_window("splashscreen") { + splashscreen.close().unwrap(); + } + // Show main window + window.get_window("main").unwrap().show().unwrap(); +} + fn main() { tauri::Builder::default() .plugin( @@ -147,7 +157,7 @@ fn main() { .plugin(tauri_plugin_shell::init()) .setup(|app| { let window = app.get_window("main").unwrap(); - + // native shadow set_shadow(&window, true).expect("Unsupported platform!"); @@ -156,11 +166,12 @@ fn main() { .expect("Unsupported platform! 'apply_vibrancy' is only supported on macOS"); #[cfg(target_os = "windows")] - apply_blur(&window, Some((18, 18, 18, 125))) + apply_mica(&window, None, None) .expect("Unsupported platform! 'apply_blur' is only supported on Windows"); Ok(()) }) + .invoke_handler(tauri::generate_handler![close_splashscreen]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index a4831bde..3d663431 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -94,20 +94,32 @@ }, "windows": [ { - "fullscreen": false, - "hiddenTitle": true, - "minHeight": 400, - "minWidth": 500, + "width": 1080, + "height": 800, + "minWidth": 1080, + "minHeight": 800, "resizable": true, "theme": "Dark", "title": "Lume", "titleBarStyle": "Overlay", "transparent": true, + "center": true, + "fullscreen": false, + "hiddenTitle": true, + "visible": false + }, + { "width": 400, "height": 500, - "center": true + "decorations": true, + "hiddenTitle": true, + "center": true, + "resizable": false, + "titleBarStyle": "Overlay", + "label": "splashscreen", + "url": "splashscreen" } ], "macOSPrivateApi": true } -} \ No newline at end of file +} diff --git a/src/app.tsx b/src/app.tsx index 1001d0aa..fb7a57e9 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,4 +1,4 @@ -import { RouterProvider, createBrowserRouter } from 'react-router-dom'; +import { RouterProvider, createBrowserRouter, redirect } from 'react-router-dom'; import { AuthCreateScreen } from '@app/auth/create'; import { CreateStep1Screen } from '@app/auth/create/step-1'; @@ -15,33 +15,62 @@ import { OnboardingScreen } from '@app/auth/onboarding'; import { ResetScreen } from '@app/auth/reset'; import { UnlockScreen } from '@app/auth/unlock'; import { WelcomeScreen } from '@app/auth/welcome'; -import { ChannelScreen } from '@app/channel'; import { ChatScreen } from '@app/chats'; import { ErrorScreen } from '@app/error'; import { EventScreen } from '@app/events'; -import { Root } from '@app/root'; import { AccountSettingsScreen } from '@app/settings/account'; import { GeneralSettingsScreen } from '@app/settings/general'; import { ShortcutsSettingsScreen } from '@app/settings/shortcuts'; import { SpaceScreen } from '@app/space'; +import { SplashScreen } from '@app/splash'; import { TrendingScreen } from '@app/trending'; import { UserScreen } from '@app/users'; +import { getActiveAccount } from '@libs/storage'; + import { AppLayout } from '@shared/appLayout'; import { AuthLayout } from '@shared/authLayout'; -import { Protected } from '@shared/protected'; +import { LoaderIcon } from '@shared/icons'; import { SettingsLayout } from '@shared/settingsLayout'; import './index.css'; +const appLoader = async () => { + const account = await getActiveAccount(); + const privkey = sessionStorage.getItem('stronghold'); + + if (!account) { + return redirect('/auth/welcome'); + } + + if (account && account.privkey.length > 35) { + return redirect('/auth/migrate'); + } + + if (account && !privkey) { + return redirect('/auth/unlock'); + } + + return null; +}; + const router = createBrowserRouter([ { path: '/', - element: ( - - - - ), + element: , + errorElement: , + loader: appLoader, + children: [ + { path: '', element: }, + { path: 'trending', element: }, + { path: 'events/:id', element: }, + { path: 'users/:pubkey', element: }, + { path: 'chats/:pubkey', element: }, + ], + }, + { + path: '/splashscreen', + element: , errorElement: , }, { @@ -75,29 +104,9 @@ const router = createBrowserRouter([ { path: 'reset', element: }, ], }, - { - path: '/app', - element: ( - - - - ), - children: [ - { path: 'space', element: }, - { path: 'trending', element: }, - { path: 'events/:id', element: }, - { path: 'users/:pubkey', element: }, - { path: 'chats/:pubkey', element: }, - { path: 'channel/:id', element: }, - ], - }, { path: '/settings', - element: ( - - - - ), + element: , children: [ { path: 'general', element: }, { path: 'shortcuts', element: }, @@ -110,7 +119,11 @@ export default function App() { return ( Loading..

} + fallbackElement={ +
+ +
+ } future={{ v7_startTransition: true }} /> ); diff --git a/src/app/auth/components/user.tsx b/src/app/auth/components/user.tsx index ae66942c..99e2e399 100644 --- a/src/app/auth/components/user.tsx +++ b/src/app/auth/components/user.tsx @@ -11,10 +11,10 @@ export function User({ pubkey, fallback }: { pubkey: string; fallback?: string } if (status === 'loading') { return (
-
+
- - + +
); diff --git a/src/app/auth/create/step-1.tsx b/src/app/auth/create/step-1.tsx index b4ad76a1..36f34831 100644 --- a/src/app/auth/create/step-1.tsx +++ b/src/app/auth/create/step-1.tsx @@ -37,13 +37,9 @@ export function CreateStep1Screen() { }; const download = async () => { - await writeTextFile( - 'lume-keys.txt', - `Public key: ${pubkey}\nPrivate key: ${privkey}`, - { - dir: BaseDirectory.Download, - } - ); + await writeTextFile('lume-keys.txt', `Public key: ${npub}\nPrivate key: ${nsec}`, { + dir: BaseDirectory.Download, + }); setDownloaded(true); }; @@ -89,7 +85,7 @@ export function CreateStep1Screen() {
@@ -99,29 +95,21 @@ export function CreateStep1Screen() { readOnly type={privkeyInput} value={nsec} - className="relative w-full rounded-lg bg-zinc-800 py-3 pl-3.5 pr-11 text-white !outline-none placeholder:text-white/50" + className="relative h-11 w-full rounded-lg bg-white/10 py-1 pl-3.5 pr-11 text-white !outline-none placeholder:text-white/50" />
-
+

Your private key is your password. If you lose this key, you will lose access to your account! Copy it and keep it in a safe place. There is no way @@ -138,7 +126,9 @@ export function CreateStep1Screen() { )} {downloaded ? ( - Saved in download folder + + Saved in Download folder + ) : (

-
+

Password is use to secure your key store in local machine, when you move to other clients, you just need to copy your private key as nsec or @@ -122,10 +114,10 @@ export function CreateStep2Screen() {