diff --git a/apps/desktop2/src/components/column.tsx b/apps/desktop2/src/components/column.tsx index 3af62a1d..a8a49bc2 100644 --- a/apps/desktop2/src/components/column.tsx +++ b/apps/desktop2/src/components/column.tsx @@ -3,7 +3,7 @@ import type { LumeColumn } from "@lume/types"; import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; import { Menu, MenuItem, PredefinedMenuItem } from "@tauri-apps/api/menu"; -import { getCurrent } from "@tauri-apps/api/webviewWindow"; +import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import { memo, useCallback, useEffect, useRef, useState } from "react"; type WindowEvent = { @@ -106,7 +106,7 @@ function Header({ const [isChanged, setIsChanged] = useState(false); const saveNewTitle = async () => { - const mainWindow = getCurrent(); + const mainWindow = getCurrentWebviewWindow(); await mainWindow.emit("columns", { type: "set_title", label, title }); // update search params @@ -135,7 +135,7 @@ function Header({ MenuItem.new({ text: "Move left", action: async () => { - await getCurrent().emit("columns", { + await getCurrentWebviewWindow().emit("columns", { type: "move", label, direction: "left", @@ -145,7 +145,7 @@ function Header({ MenuItem.new({ text: "Move right", action: async () => { - await getCurrent().emit("columns", { + await getCurrentWebviewWindow().emit("columns", { type: "move", label, direction: "right", @@ -156,7 +156,10 @@ function Header({ MenuItem.new({ text: "Close", action: async () => { - await getCurrent().emit("columns", { type: "remove", label }); + await getCurrentWebviewWindow().emit("columns", { + type: "remove", + label, + }); }, }), ]); diff --git a/apps/desktop2/src/routes/$account.home.tsx b/apps/desktop2/src/routes/$account.home.tsx index e5dd516c..394b3361 100644 --- a/apps/desktop2/src/routes/$account.home.tsx +++ b/apps/desktop2/src/routes/$account.home.tsx @@ -5,7 +5,7 @@ import { NostrQuery } from "@lume/system"; import type { ColumnEvent, LumeColumn } from "@lume/types"; import { createFileRoute } from "@tanstack/react-router"; import { listen } from "@tauri-apps/api/event"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import useEmblaCarousel from "embla-carousel-react"; import { nanoid } from "nanoid"; import { useCallback, useEffect, useState } from "react"; @@ -38,15 +38,15 @@ function Screen() { }, [emblaApi]); const emitScrollEvent = useCallback(() => { - getCurrent().emit("child_webview", { scroll: true }); + getCurrentWindow().emit("child_webview", { scroll: true }); }, []); const emitResizeEvent = useCallback(() => { - getCurrent().emit("child_webview", { resize: true, direction: "x" }); + getCurrentWindow().emit("child_webview", { resize: true, direction: "x" }); }, []); const openLumeStore = useCallback(async () => { - await getCurrent().emit("columns", { + await getCurrentWindow().emit("columns", { type: "add", column: { label: "store", diff --git a/apps/desktop2/src/routes/$account.tsx b/apps/desktop2/src/routes/$account.tsx index 084b19fa..cac414ae 100644 --- a/apps/desktop2/src/routes/$account.tsx +++ b/apps/desktop2/src/routes/$account.tsx @@ -9,7 +9,7 @@ import { LumeWindow, NostrAccount, NostrQuery } from "@lume/system"; import { cn } from "@lume/utils"; import { Outlet, createFileRoute } from "@tanstack/react-router"; import { Menu, MenuItem, PredefinedMenuItem } from "@tauri-apps/api/menu"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { message } from "@tauri-apps/plugin-dialog"; import { memo, useCallback, useState } from "react"; @@ -30,7 +30,7 @@ function Screen() { const { settings, platform } = Route.useRouteContext(); const openLumeStore = async () => { - await getCurrent().emit("columns", { + await getCurrentWindow().emit("columns", { type: "add", column: { label: "store", @@ -137,7 +137,7 @@ const Accounts = memo(function Accounts() { if (select) { // Reset current columns - await getCurrent().emit("columns", { type: "reset" }); + await getCurrentWindow().emit("columns", { type: "reset" }); // Redirect to new account return navigate({ diff --git a/apps/desktop2/src/routes/editor/-components/media.tsx b/apps/desktop2/src/routes/editor/-components/media.tsx index a216a509..8763e6e5 100644 --- a/apps/desktop2/src/routes/editor/-components/media.tsx +++ b/apps/desktop2/src/routes/editor/-components/media.tsx @@ -3,7 +3,7 @@ import { NostrQuery } from "@lume/system"; import { Spinner } from "@lume/ui"; import { insertImage, isImagePath } from "@lume/utils"; import type { UnlistenFn } from "@tauri-apps/api/event"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { message } from "@tauri-apps/plugin-dialog"; import { useEffect, useState } from "react"; import { useSlateStatic } from "slate-react"; @@ -32,7 +32,7 @@ export function MediaButton() { let unlisten: UnlistenFn = undefined; async function listenFileDrop() { - const window = getCurrent(); + const window = getCurrentWindow(); if (!unlisten) { unlisten = await window.listen("tauri://file-drop", async (event) => { // @ts-ignore, lfg !!! diff --git a/apps/desktop2/src/routes/events/$id.tsx b/apps/desktop2/src/routes/events/$id.tsx index 5efdb39f..a1c96695 100644 --- a/apps/desktop2/src/routes/events/$id.tsx +++ b/apps/desktop2/src/routes/events/$id.tsx @@ -3,7 +3,7 @@ import { LumeEvent, NostrQuery } from "@lume/system"; import type { Meta } from "@lume/types"; import * as ScrollArea from "@radix-ui/react-scroll-area"; import { createFileRoute } from "@tanstack/react-router"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { useEffect, useRef, useState } from "react"; import { Virtualizer } from "virtua"; import NoteParent from "./-components/parent"; @@ -83,14 +83,17 @@ function ReplyList() { const [replies, setReplies] = useState([]); useEffect(() => { - const unlistenEvent = getCurrent().listen("new_reply", (data) => { - const event = LumeEvent.from(data.payload.raw, data.payload.parsed); - setReplies((prev) => [event, ...prev]); - }); + const unlistenEvent = getCurrentWindow().listen( + "new_reply", + (data) => { + const event = LumeEvent.from(data.payload.raw, data.payload.parsed); + setReplies((prev) => [event, ...prev]); + }, + ); - const unlistenWindow = getCurrent().onCloseRequested(async () => { + const unlistenWindow = getCurrentWindow().onCloseRequested(async () => { await event.unlistenEventReply(); - await getCurrent().destroy(); + await getCurrentWindow().destroy(); }); return () => { diff --git a/apps/desktop2/src/routes/newsfeed.tsx b/apps/desktop2/src/routes/newsfeed.tsx index 0676077d..3e804c01 100644 --- a/apps/desktop2/src/routes/newsfeed.tsx +++ b/apps/desktop2/src/routes/newsfeed.tsx @@ -10,7 +10,7 @@ import * as ScrollArea from "@radix-ui/react-scroll-area"; import { type InfiniteData, useInfiniteQuery } from "@tanstack/react-query"; import { createFileRoute, redirect } from "@tanstack/react-router"; import { listen } from "@tauri-apps/api/event"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { useCallback, useEffect, useRef, useState } from "react"; import { Virtualizer } from "virtua"; @@ -195,7 +195,7 @@ function Listerner() { }; useEffect(() => { - const unlisten = getCurrent().listen("new_event", (data) => { + const unlisten = getCurrentWindow().listen("new_event", (data) => { const event = LumeEvent.from(data.payload.raw, data.payload.parsed); setEvents((prev) => [event, ...prev]); }); diff --git a/apps/desktop2/src/routes/panel.$account.tsx b/apps/desktop2/src/routes/panel.$account.tsx index e0ee69d6..59433033 100644 --- a/apps/desktop2/src/routes/panel.$account.tsx +++ b/apps/desktop2/src/routes/panel.$account.tsx @@ -15,7 +15,7 @@ import { useQuery } from "@tanstack/react-query"; import { createFileRoute } from "@tanstack/react-router"; import { invoke } from "@tauri-apps/api/core"; import { Menu, MenuItem, PredefinedMenuItem } from "@tauri-apps/api/menu"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { open } from "@tauri-apps/plugin-shell"; import { type ReactNode, useCallback, useEffect, useRef } from "react"; import { Virtualizer } from "virtua"; @@ -110,7 +110,7 @@ function Screen() { }, []); useEffect(() => { - const unlisten = getCurrent().listen("notification", async (data) => { + const unlisten = getCurrentWindow().listen("notification", async (data) => { const event: LumeEvent = JSON.parse(data.payload as string); await queryClient.setQueryData( ["notification", account], diff --git a/apps/desktop2/src/routes/settings/bitcoin-connect.tsx b/apps/desktop2/src/routes/settings/bitcoin-connect.tsx index 906c6cbe..c025ec02 100644 --- a/apps/desktop2/src/routes/settings/bitcoin-connect.tsx +++ b/apps/desktop2/src/routes/settings/bitcoin-connect.tsx @@ -1,7 +1,7 @@ import { Button, init } from "@getalby/bitcoin-connect-react"; import { NostrAccount } from "@lume/system"; import { createFileRoute } from "@tanstack/react-router"; -import { getCurrent } from "@tauri-apps/api/webviewWindow"; +import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; export const Route = createFileRoute("/settings/bitcoin-connect")({ beforeLoad: () => { @@ -17,7 +17,7 @@ export const Route = createFileRoute("/settings/bitcoin-connect")({ function Screen() { const setNwcUri = async (uri: string) => { const cmd = await NostrAccount.setWallet(uri); - if (cmd) getCurrent().close(); + if (cmd) getCurrentWebviewWindow().close(); }; return ( diff --git a/apps/desktop2/src/routes/store.tsx b/apps/desktop2/src/routes/store.tsx index aab6235a..321b688d 100644 --- a/apps/desktop2/src/routes/store.tsx +++ b/apps/desktop2/src/routes/store.tsx @@ -3,7 +3,7 @@ import type { LumeColumn } from "@lume/types"; import * as ScrollArea from "@radix-ui/react-scroll-area"; import { createFileRoute } from "@tanstack/react-router"; import { resolveResource } from "@tauri-apps/api/path"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { readTextFile } from "@tauri-apps/plugin-fs"; export const Route = createFileRoute("/store")({ @@ -24,7 +24,7 @@ function Screen() { const { officialColumns } = Route.useRouteContext(); const install = async (column: LumeColumn) => { - const mainWindow = getCurrent(); + const mainWindow = getCurrentWindow(); await mainWindow.emit("columns", { type: "add", column }); }; diff --git a/apps/desktop2/src/routes/zap.$id.tsx b/apps/desktop2/src/routes/zap.$id.tsx index 1d963ecd..bf568ff2 100644 --- a/apps/desktop2/src/routes/zap.$id.tsx +++ b/apps/desktop2/src/routes/zap.$id.tsx @@ -1,7 +1,7 @@ import { User } from "@/components/user"; import { NostrQuery } from "@lume/system"; import { createFileRoute } from "@tanstack/react-router"; -import { getCurrent } from "@tauri-apps/api/webviewWindow"; +import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import { message } from "@tauri-apps/plugin-dialog"; import { useState } from "react"; import CurrencyInput from "react-currency-input-field"; @@ -35,7 +35,7 @@ function Screen() { if (val) { setIsCompleted(true); // close current window - await getCurrent().close(); + await getCurrentWebviewWindow().close(); } } catch (e) { setIsLoading(false); diff --git a/biome.json b/biome.json index d269b819..1b56af09 100644 --- a/biome.json +++ b/biome.json @@ -1,28 +1,31 @@ { - "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json", - "organizeImports": { - "enabled": true - }, - "files": { - "ignore": ["apps/desktop2/src/router.gen.ts"] - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "style": { - "noNonNullAssertion": "warn", - "noUselessElse": "off" - }, - "correctness": { - "useExhaustiveDependencies": "off" - }, - "a11y": { - "noSvgWithoutTitle": "off" - }, - "complexity": { - "noStaticOnlyClass": "off" - } - } - } + "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json", + "organizeImports": { + "enabled": true + }, + "files": { + "ignore": [ + "apps/desktop2/src/router.gen.ts", + "packages/system/src/commands.ts" + ] + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noNonNullAssertion": "warn", + "noUselessElse": "off" + }, + "correctness": { + "useExhaustiveDependencies": "off" + }, + "a11y": { + "noSvgWithoutTitle": "off" + }, + "complexity": { + "noStaticOnlyClass": "off" + } + } + } } diff --git a/packages/system/src/query.ts b/packages/system/src/query.ts index faaf1ab6..3a1d5429 100644 --- a/packages/system/src/query.ts +++ b/packages/system/src/query.ts @@ -1,6 +1,6 @@ import type { LumeColumn, Metadata, NostrEvent, Relay } from "@lume/types"; import { resolveResource } from "@tauri-apps/api/path"; -import { getCurrent } from "@tauri-apps/api/window"; +import { getCurrentWindow } from "@tauri-apps/api/window"; import { open } from "@tauri-apps/plugin-dialog"; import { readFile, readTextFile } from "@tauri-apps/plugin-fs"; import { relaunch } from "@tauri-apps/plugin-process"; @@ -201,7 +201,7 @@ export const NostrQuery = { } }, listenLocalEvent: async () => { - const label = getCurrent().label; + const label = getCurrentWindow().label; const query = await commands.listenLocalEvent(label); if (query.status === "ok") { @@ -394,7 +394,7 @@ export const NostrQuery = { } }, unlisten: async (id?: string) => { - const label = id ? id : getCurrent().label; + const label = id ? id : getCurrentWindow().label; const query = await commands.unlisten(label); if (query.status === "ok") { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 589b418c..3f317702 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5406,8 +5406,7 @@ dependencies = [ [[package]] name = "tauri-plugin-decorum" version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fccbcf16f789b3fb01470511cbed050d98803d7580bdd55f53f8ef6d8737e8f1" +source = "git+https://github.com/reyamir/tauri-plugin-decorum?branch=feat/tauri-v2#d19a643f8574c8f6ba9f5793672d7baaf05ba001" dependencies = [ "anyhow", "cocoa", @@ -5663,7 +5662,7 @@ dependencies = [ [[package]] name = "tauri-specta" version = "2.0.0-rc.11" -source = "git+https://github.com/oscartbeaumont/tauri-specta#a49885967adc01c80e33962e3ecac25fe7497839" +source = "git+https://github.com/reyamir/tauri-specta?branch=feat/tauri-v2#5c09319b345814bfce3c4c02527e481d18339051" dependencies = [ "heck 0.5.0", "indoc", @@ -5678,7 +5677,7 @@ dependencies = [ [[package]] name = "tauri-specta-macros" version = "2.0.0-rc.5" -source = "git+https://github.com/oscartbeaumont/tauri-specta#a49885967adc01c80e33962e3ecac25fe7497839" +source = "git+https://github.com/reyamir/tauri-specta?branch=feat/tauri-v2#5c09319b345814bfce3c4c02527e481d18339051" dependencies = [ "heck 0.5.0", "proc-macro2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 246e5c7c..fd4ea4c8 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -33,11 +33,11 @@ tauri-plugin-process = { git = "https://github.com/tauri-apps/plugins-workspace" tauri-plugin-shell = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-upload = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } -tauri-specta = { git = "https://github.com/oscartbeaumont/tauri-specta", features = [ +tauri-specta = { git = "https://github.com/reyamir/tauri-specta", branch = "feat/tauri-v2", features = [ "typescript", ] } tauri-plugin-theme = "0.4.1" -tauri-plugin-decorum = "0.1.3" +tauri-plugin-decorum = { git = "https://github.com/reyamir/tauri-plugin-decorum", branch = "feat/tauri-v2" } specta = "^2.0.0-rc.12" keyring = "2" keyring-search = "0.2.0" diff --git a/src-tauri/src/commands/fns.rs b/src-tauri/src/commands/fns.rs index ed7eb1d0..3999e1ea 100644 --- a/src-tauri/src/commands/fns.rs +++ b/src-tauri/src/commands/fns.rs @@ -1,6 +1,6 @@ use std::ffi::CString; -use tauri::{AppHandle, Manager, WebviewWindow}; +use tauri::{AppHandle, Emitter, Listener, Manager, WebviewWindow}; use tauri_nspanel::{ block::ConcreteBlock, cocoa::{ diff --git a/src-tauri/src/nostr/keys.rs b/src-tauri/src/nostr/keys.rs index fa0a41f7..6778a8a4 100644 --- a/src-tauri/src/nostr/keys.rs +++ b/src-tauri/src/nostr/keys.rs @@ -5,7 +5,7 @@ use serde::Serialize; use specta::Type; use std::collections::HashSet; use std::time::Duration; -use tauri::{EventTarget, Manager, State}; +use tauri::{Emitter, EventTarget, Manager, State}; use tauri_plugin_notification::NotificationExt; use crate::commands::tray::create_tray_panel; diff --git a/src-tauri/src/nostr/relay.rs b/src-tauri/src/nostr/relay.rs index 79c4ca50..57948286 100644 --- a/src-tauri/src/nostr/relay.rs +++ b/src-tauri/src/nostr/relay.rs @@ -39,7 +39,8 @@ pub async fn get_relays(state: State<'_, Nostr>) -> Result { match client.get_events_of(vec![filter], None).await { Ok(events) => { if let Some(event) = events.first() { - let nip65_list = nip65::extract_relay_list(event); + let nip65_list = nip65::extract_relay_list(event).collect::>(); + let read = nip65_list .iter() .filter_map(|(url, meta)| { @@ -50,6 +51,7 @@ pub async fn get_relays(state: State<'_, Nostr>) -> Result { } }) .collect(); + let write = nip65_list .iter() .filter_map(|(url, meta)| { @@ -60,6 +62,7 @@ pub async fn get_relays(state: State<'_, Nostr>) -> Result { } }) .collect(); + let both = nip65_list .iter() .filter_map(|(url, meta)| {