From 13c24ca528eeeadcacf0e7b01c69285430f54be7 Mon Sep 17 00:00:00 2001 From: Rene Vergara Date: Wed, 16 Oct 2024 08:48:54 -0500 Subject: [PATCH] feat(tui): implement shielding command --- src/Zenith/CLI.hs | 77 +++++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/src/Zenith/CLI.hs b/src/Zenith/CLI.hs index dc0158b..a657a71 100644 --- a/src/Zenith/CLI.hs +++ b/src/Zenith/CLI.hs @@ -69,8 +69,8 @@ import Control.Monad.Logger ( LoggingT , NoLoggingT , logDebugN - , runFileLoggingT , runNoLoggingT + , runStderrLoggingT ) import Data.Aeson import Data.HexString (HexString(..), toText) @@ -170,10 +170,8 @@ data AdrBookEntry = AdrBookEntry makeLenses ''AdrBookEntry -data ShDshEntry = ShDshEntry - { _totalTransparent :: !Float - , _totalShielded :: !Float - , _shAmt :: !Float +newtype ShDshEntry = ShDshEntry + { _shAmt :: Float } deriving (Show) makeLenses ''ShDshEntry @@ -259,11 +257,11 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s] (" Zenith - " <> show (st ^. network) <> " - " <> - (T.unpack - (maybe - "(None)" - (\(_, w) -> zcashWalletName $ entityVal w) - (L.listSelectedElement (st ^. wallets)))) ++ + T.unpack + (maybe + "(None)" + (\(_, w) -> zcashWalletName $ entityVal w) + (L.listSelectedElement (st ^. wallets))) ++ " ")) (C.hCenter (str @@ -434,7 +432,21 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s] DeshieldForm -> D.renderDialog (D.dialog (Just (str " De-Shield ZEC ")) Nothing 50) - (renderForm (st ^. deshieldForm) <=> + (C.hCenter + (padAll 1 $ + vBox + [ str $ + "Transparent Bal.: " ++ + if st ^. network == MainNet + then displayZec (st ^. tBalance) + else displayTaz (st ^. tBalance) + , str $ + "Shielded Bal.: " ++ + if st ^. network == MainNet + then displayZec (st ^. sBalance) + else displayTaz (st ^. sBalance) + ]) <=> + renderForm (st ^. deshieldForm) <=> C.hCenter (hBox [capCommand "P" "roceed", capCommand " " "Cancel"])) ShieldForm -> @@ -692,20 +704,10 @@ mkSendForm bal = padBottom (Pad 1) $ vLimit 1 (hLimit 15 $ str s <+> fill ' ') <+> w mkDeshieldForm :: Integer -> ShDshEntry -> Form ShDshEntry e Name -mkDeshieldForm bal = +mkDeshieldForm tbal = newForm - [ label "Total Transp. : " @@= - editShowableFieldWithValidate - totalTransparent - TotalTranspField - (isAmountValid bal) - , label "Total Shielded : " @@= - editShowableFieldWithValidate - totalShielded - TotalShieldedField - (isAmountValid bal) - , label "Amount: " @@= - editShowableFieldWithValidate shAmt AmtField (isAmountValid bal) + [ label "Amount: " @@= + editShowableFieldWithValidate shAmt AmtField (isAmountValid tbal) ] where isAmountValid :: Integer -> Float -> Bool @@ -1491,7 +1493,30 @@ appEvent (BT.VtyEvent e) = do BT.modify $ set dialogBox SendTx V.EvKey (V.KChar 'b') [] -> BT.modify $ set dialogBox AdrBook - V.EvKey (V.KChar 'd') [] -> + V.EvKey (V.KChar 'd') [] -> do + pool <- liftIO $ runNoLoggingT $ initPool $ s ^. dbPath + selAcc <- + do case L.listSelectedElement $ s ^. accounts of + Nothing -> do + let fAcc = + L.listSelectedElement $ + L.listMoveToBeginning $ s ^. accounts + case fAcc of + Nothing -> + throw $ + userError "Failed to select account" + Just (_j, w1) -> return w1 + Just (_k, w) -> return w + tBal <- + liftIO $ + getTransparentBalance pool $ entityKey selAcc + sBal <- + liftIO $ getShieldedBalance pool $ entityKey selAcc + BT.modify $ set tBalance tBal + BT.modify $ set sBalance sBal + BT.modify $ + set deshieldForm $ + mkDeshieldForm sBal (ShDshEntry 0.0) BT.modify $ set dialogBox DeshieldForm V.EvKey (V.KChar 'h') [] -> do pool <- liftIO $ runNoLoggingT $ initPool $ s ^. dbPath @@ -1667,7 +1692,7 @@ runZenithTUI config = do "" Nothing uBal - (mkDeshieldForm 0 (ShDshEntry 0 0 0.0)) + (mkDeshieldForm 0 (ShDshEntry 0.0)) tBal sBal Left _e -> do