diff --git a/src-gui/.gitignore b/src-gui/.gitignore index 7e445ac3..b18b8708 100644 --- a/src-gui/.gitignore +++ b/src-gui/.gitignore @@ -1,25 +1,2 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - node_modules .vite -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/src-gui/src/models/tauriModel.ts b/src-gui/src/models/tauriModel.ts index c83e2af4..cfd5d895 100644 --- a/src-gui/src/models/tauriModel.ts +++ b/src-gui/src/models/tauriModel.ts @@ -138,102 +138,6 @@ export interface SuspendCurrentSwapResponse { swap_id: string; } -export interface BuyXmrArgs { - seller: string; - bitcoin_change_address: string; - monero_receive_address: string; -} - -export interface BuyXmrResponse { - swap_id: string; - quote: BidQuote; -} - -export interface ResumeSwapArgs { - swap_id: string; -} - -export interface ResumeSwapResponse { - result: string; -} - -export interface CancelAndRefundArgs { - swap_id: string; -} - -export interface MoneroRecoveryArgs { - swap_id: string; -} - -export interface WithdrawBtcArgs { - amount?: number; - address: string; -} - -export interface WithdrawBtcResponse { - amount: number; - txid: string; -} - -export interface ListSellersArgs { - rendezvous_point: string; -} - -export interface StartDaemonArgs { - server_address: string; -} - -export interface GetSwapInfoArgs { - swap_id: string; -} - -export interface GetSwapInfoResponse { - swap_id: string; - seller: Seller; - completed: boolean; - start_date: string; - state_name: string; - xmr_amount: number; - btc_amount: number; - tx_lock_id: string; - tx_cancel_fee: number; - tx_refund_fee: number; - tx_lock_fee: number; - btc_refund_address: string; - cancel_timelock: CancelTimelock; - punish_timelock: PunishTimelock; - timelock?: ExpiredTimelocks; -} - -export interface BalanceArgs { - force_refresh: boolean; -} - -export interface BalanceResponse { - balance: number; -} - -export interface GetHistoryArgs { -} - -export interface GetHistoryEntry { - swap_id: string; - state: string; -} - -export interface GetHistoryResponse { - swaps: GetHistoryEntry[]; -} - -export interface Seller { - peer_id: string; - addresses: string[]; -} - -export interface SuspendCurrentSwapResponse { - swap_id: string; -} - export type TauriSwapProgressEvent = | { type: "Initiated", content?: undefined } | { type: "ReceivedQuote", content: BidQuote } @@ -275,7 +179,9 @@ export type TauriSwapProgressEvent = | { type: "CooperativeRedeemRejected", content: { reason: string; }} - | { type: "Released", content?: undefined }; + | { type: "Released", content: { + error?: string; +}}; export interface TauriSwapProgressEventWrapper { swap_id: string; diff --git a/src-gui/src/models/tauriModelExt.ts b/src-gui/src/models/tauriModelExt.ts index fe24da11..4f50dbe2 100644 --- a/src-gui/src/models/tauriModelExt.ts +++ b/src-gui/src/models/tauriModelExt.ts @@ -4,6 +4,11 @@ import { TauriSwapProgressEvent, } from "./tauriModel"; +export type TauriSwapProgressEventType = Extract< + TauriSwapProgressEvent, + { type: T } +>; + export type TauriSwapProgressEventContent< T extends TauriSwapProgressEvent["type"], > = Extract["content"]; diff --git a/src-gui/src/renderer/components/modal/swap/pages/SwapStatePage.tsx b/src-gui/src/renderer/components/modal/swap/pages/SwapStatePage.tsx index f779d3d8..c5f5aa68 100644 --- a/src-gui/src/renderer/components/modal/swap/pages/SwapStatePage.tsx +++ b/src-gui/src/renderer/components/modal/swap/pages/SwapStatePage.tsx @@ -71,7 +71,13 @@ export default function SwapStatePage({ case "CooperativeRedeemRejected": return ; case "Released": - return ; + return ( + + ); default: // TODO: Use this when we have all states implemented, ensures we don't forget to implement a state // return exhaustiveGuard(state.curr.type); diff --git a/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedAndNotDonePage.tsx b/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedAndNotDonePage.tsx index 62423d34..07f428cb 100644 --- a/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedAndNotDonePage.tsx +++ b/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedAndNotDonePage.tsx @@ -1,13 +1,13 @@ import { Box, DialogContentText } from "@material-ui/core"; import { SwapSpawnType } from "models/cliModel"; -import { SwapStateProcessExited } from "models/storeModel"; +import { TauriSwapProgressEventContent } from "models/tauriModelExt"; import { useActiveSwapInfo, useAppSelector } from "store/hooks"; import CliLogsBox from "../../../../other/RenderedCliLog"; export default function ProcessExitedAndNotDonePage({ - state, + currState, }: { - state: SwapStateProcessExited; + currState: TauriSwapProgressEventContent<"Released">; }) { const swap = useActiveSwapInfo(); const logs = useAppSelector((s) => s.swap.logs); @@ -15,7 +15,7 @@ export default function ProcessExitedAndNotDonePage({ function getText() { const isCancelRefund = spawnType === SwapSpawnType.CANCEL_REFUND; - const hasRpcError = state.rpcError != null; + const hasRpcError = currState.error != null; const hasSwap = swap != null; const messages = []; @@ -58,11 +58,8 @@ export default function ProcessExitedAndNotDonePage({ gap: "0.5rem", }} > - {state.rpcError && ( - + {currState.error != null && ( + )} diff --git a/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedPage.tsx b/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedPage.tsx index 6835a693..27d11ac7 100644 --- a/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedPage.tsx +++ b/src-gui/src/renderer/components/modal/swap/pages/exited/ProcessExitedPage.tsx @@ -1,11 +1,15 @@ import { TauriSwapProgressEvent } from "models/tauriModel"; +import { TauriSwapProgressEventType } from "models/tauriModelExt"; import SwapStatePage from "../SwapStatePage"; +import ProcessExitedAndNotDonePage from "./ProcessExitedAndNotDonePage"; export default function ProcessExitedPage({ prevState, + currState, swapId, }: { prevState: TauriSwapProgressEvent | null; + currState: TauriSwapProgressEventType<"Released">; swapId: string; }) { // If we have a previous state, we can show the user the last state of the swap @@ -27,15 +31,5 @@ export default function ProcessExitedPage({ ); } - // TODO: Display something useful here - return ( - <> - If the swap is not a "done" state (or we don't have a db state because the - swap did complete the SwapSetup yet) we should tell the user and show logs - Not implemented yet - - ); - - // If the swap is not a "done" state (or we don't have a db state because the swap did complete the SwapSetup yet) we should tell the user and show logs - // return ; + return ; } diff --git a/swap/src/cli/api/tauri_bindings.rs b/swap/src/cli/api/tauri_bindings.rs index 384bfdae..819d2ffc 100644 --- a/swap/src/cli/api/tauri_bindings.rs +++ b/swap/src/cli/api/tauri_bindings.rs @@ -4,6 +4,8 @@ use anyhow::Result; use bitcoin::Txid; use serde::Serialize; +use std::sync::Arc; +use tauri::{AppHandle, Emitter}; use typeshare::typeshare; use uuid::Uuid; @@ -12,27 +14,15 @@ use crate::{monero, network::quote::BidQuote}; static SWAP_PROGRESS_EVENT_NAME: &str = "swap-progress-update"; #[derive(Debug, Clone)] -pub struct TauriHandle( - #[cfg(feature = "tauri")] - #[cfg_attr(feature = "tauri", allow(unused))] - std::sync::Arc, -); +pub struct TauriHandle(Arc); impl TauriHandle { - #[cfg(feature = "tauri")] - pub fn new(tauri_handle: tauri::AppHandle) -> Self { - Self( - #[cfg(feature = "tauri")] - std::sync::Arc::new(tauri_handle), - ) + pub fn new(tauri_handle: AppHandle) -> Self { + Self(Arc::new(tauri_handle)) } - #[allow(unused_variables)] pub fn emit_tauri_event(&self, event: &str, payload: S) -> Result<()> { - #[cfg(tauri)] - self.0.emit(event, payload).map_err(|e| e.into())?; - - Ok(()) + self.0.emit(event, payload).map_err(|e| e.into()) } }