From 16b5acabf2351d9cb34c36621d75a685f2f76f1b Mon Sep 17 00:00:00 2001 From: "Rene Vergara A." Date: Fri, 24 May 2024 21:23:06 -0400 Subject: [PATCH] rvv041 - Address Book updated - Functionality to copy receiver address to Clipboard added - Functionality to Send Zcash to selected AddresBook entry added --- .gitignore | 4 ++- src/Zenith/CLI.hs | 83 +++++++++++++++++++++++++++++------------------ 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index 32d1170..00967d7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ *~ dist-newstyle/ zenith.db -zenith.log \ No newline at end of file +zenith.log +zenith.db-shm +zenith.db-wal diff --git a/src/Zenith/CLI.hs b/src/Zenith/CLI.hs index 2b8dfda..0c7e67b 100644 --- a/src/Zenith/CLI.hs +++ b/src/Zenith/CLI.hs @@ -112,6 +112,7 @@ data Name | AmtField | MemoField | ABViewport + | ABList deriving (Eq, Show, Ord) data DialogInput = DialogInput @@ -174,6 +175,7 @@ data State = State , _eventDispatch :: !(BC.BChan Tick) , _timer :: !Int , _txForm :: !(Form SendInput () Name) + , _abaddresses :: !(L.List Name (Entity AddressBook)) } makeLenses ''State @@ -347,17 +349,6 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s] (hBox [capCommand "↲ " "Send", capCommand " " "Cancel"])) Blank -> emptyWidget AdrBook -> --- D.renderDialog --- (D.dialog (Just (str "Select Wallet")) Nothing 50) --- (selectListBox "Wallets" (st ^. wallets) listDrawWallet <=> --- C.hCenter --- (hBox --- [ capCommand "↑↓ " "move" --- , capCommand "↲ " "select" --- , capCommand "N" "ew" --- , capCommand "S" "how phrase" --- , xCommand --- ])) D.renderDialog (D.dialog (Just $ str " Address Book ") Nothing 60) (withAttr abDefAttr $ @@ -367,11 +358,11 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s] hLimit 50 $ vBox $ [vLimit 16 $ hLimit 50 $ - vBox $ --[ L.renderList listDrawAB True (s^.abaddresses) ], - [str "Addresses 1.................", - str "Addresses 2.....", - str "Addresses 3", - str "Addresses 4"], + vBox $ [ L.renderList listDrawAB True (s ^. abaddresses) ], +-- [str "Addresses 1.................", +-- str "Addresses 2.....", +-- str "Addresses 3", +-- str "Addresses 4"], padTop Max $ vLimit 4 $ hLimit 50 $ @@ -612,6 +603,14 @@ listDrawTx znet sel tx = then withAttr customAttr (txt $ "> " <> s) else txt $ " " <> s +listDrawAB :: Bool -> Entity AddressBook -> Widget Name +listDrawAB sel ab = + let selStr s = + if sel + then withAttr abSelAttr (txt $ "" <> s <> ">") + else txt s + in selStr $ addressBookDescrip (entityVal ab) + customAttr :: A.AttrName customAttr = L.listSelectedAttr <> A.attrName "custom" @@ -989,19 +988,35 @@ appEvent (BT.VtyEvent e) = do case e of V.EvKey (V.KChar 'x') [] -> BT.modify $ set dialogBox Blank - V.EvKey V.KEnter [] -> do - ns <- liftIO $ refreshWallet s - BT.put ns - BT.modify $ set dialogBox Blank - V.EvKey (V.KChar 'n') [] -> do - BT.modify $ - set inputForm $ - updateFormState (DialogInput "New Wallet") $ - s ^. inputForm - BT.modify $ set dialogBox WName - V.EvKey (V.KChar 's') [] -> - BT.modify $ set displayBox PhraseDisplay - ev -> BT.zoom wallets $ L.handleListEvent ev + V.EvKey (V.KChar 'c') [] -> do + -- Copy Address to Clipboard + case L.listSelectedElement $ s ^. abaddresses of + Just (_, a) -> do + liftIO $ + setClipboard $ + T.unpack $ addressBookAddress (entityVal a) + BT.modify $ + set msg $ + "Address copied to Clipboard from >>\n" ++ + T.unpack (addressBookDescrip (entityVal a)) ++ "->\n" ++ + T.unpack (addressBookAddress (entityVal a)) ++ "!" + BT.modify $ set displayBox MsgDisplay + _ -> do + BT.modify $ set msg $ "Error while copying the address!!" + BT.modify $ set displayBox MsgDisplay + -- Send Zcash transaction + V.EvKey (V.KChar 's') [] -> do + case L.listSelectedElement $ s ^. abaddresses of + Just (_, a) -> do + BT.modify $ + set txForm $ + mkSendForm (s ^. balance) (SendInput (addressBookAddress (entityVal a)) 0.0 "") + BT.modify $ set dialogBox SendTx + _ -> do + BT.modify $ set msg $ "No receiver address available!!" + BT.modify $ set displayBox MsgDisplay + -- Process any other event + ev -> BT.zoom abaddresses $ L.handleListEvent ev Blank -> do case e of V.EvKey (V.KChar '\t') [] -> focusRing %= F.focusNext @@ -1033,6 +1048,8 @@ appEvent (BT.VtyEvent e) = do BT.zoom addresses $ L.handleListEvent ev Just TList -> BT.zoom transactions $ L.handleListEvent ev + Just ABList -> + BT.zoom transactions $ L.handleListEvent ev _anyName -> return () where printMsg :: String -> BT.EventM Name State () @@ -1058,7 +1075,7 @@ theMap = , (barDoneAttr, V.white `on` V.blue) , (barToDoAttr, V.white `on` V.black) , (abDefAttr, V.white `on` V.blue) - , (abSelAttr, V.blue `on` V.white) + , (abSelAttr, V.black `on` V.white) , (abMBarAttr, V.white `on` V.black) ] @@ -1105,6 +1122,9 @@ runZenithCLI config = do if not (null walList) then zcashWalletLastSync $ entityVal $ head walList else 0 + + abookList <- getAdrBook pool $ zgb_net chainInfo + bal <- if not (null accList) then getBalance pool $ entityKey $ head accList @@ -1133,7 +1153,7 @@ runZenithCLI config = do else Blank) True (mkInputForm $ DialogInput "Main") - (F.focusRing [AList, TList]) + (F.focusRing [AList, TList,ABList]) (zgb_blocks chainInfo) dbFilePath host @@ -1145,6 +1165,7 @@ runZenithCLI config = do eventChan 0 (mkSendForm 0 $ SendInput "" 0.0 "") + (L.list ABList (Vec.fromList abookList) 1) Left e -> do print $ "No Zebra node available on port " <>