diff --git a/CHANGELOG.md b/CHANGELOG.md index c8a191c..3432612 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Upgraded to GHC 9.6.5 +- Implemented config and data folder ### Fixed diff --git a/app/Main.hs b/app/Main.hs index 6305fa3..0b6a6f0 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -202,7 +202,7 @@ processUri user pwd = main :: IO () main = do - config <- load ["zenith.cfg"] + config <- load ["$(HOME)/Zenith/zenith.cfg"] args <- getArgs dbFilePath <- require config "dbFilePath" {-nodeUser <- require config "nodeUser"-} diff --git a/src/Zenith/GUI.hs b/src/Zenith/GUI.hs index 0227002..c0b4623 100644 --- a/src/Zenith/GUI.hs +++ b/src/Zenith/GUI.hs @@ -25,6 +25,8 @@ import Lens.Micro ((&), (+~), (.~), (?~), (^.), set) import Lens.Micro.TH import Monomer import qualified Monomer.Lens as L +import System.Directory (getHomeDirectory) +import System.FilePath (()) import System.Hclip import Text.Printf import Text.Wrap (FillScope(..), FillStrategy(..), WrapSettings(..), wrapText) @@ -141,6 +143,7 @@ data AppModel = AppModel , _recipientValid :: !Bool , _amountValid :: !Bool , _showId :: !(Maybe T.Text) + , _home :: !FilePath } deriving (Eq, Show) makeLenses ''AppModel @@ -440,7 +443,11 @@ buildUI wenv model = widgetTree (fromIntegral $ qrCodeWidth qr)) [fitWidth] Nothing -> - image_ "./assets/1F928_color.png" [fitEither]) `styleBasic` + image_ + (T.pack $ + (model ^. home) + "Zenith/assets/1F928_color.png") + [fitEither]) `styleBasic` [bgColor white, height 100, width 100] , filler ] `styleBasic` @@ -504,7 +511,9 @@ buildUI wenv model = widgetTree , spacer , label (showt $ model ^. timer) `styleBasic` [padding 3, textSize 8] , filler - , image_ "./assets/1F993.png" [fitHeight] `styleBasic` + , image_ + (T.pack $ (model ^. home) "Zenith/assets/1F993.png") + [fitHeight] `styleBasic` [height 24, width 24] `nodeVisible` (model ^. zebraOn) , label @@ -1242,66 +1251,121 @@ txtWrap = wrapText (WrapSettings False True NoFill FillAfterFirst) 32 runZenithGUI :: Config -> IO () runZenithGUI config = do - let host = c_zebraHost config - let port = c_zebraPort config - let dbFilePath = c_dbPath config - pool <- runNoLoggingT $ initPool dbFilePath - w <- try $ checkZebra host port :: IO (Either IOError ZebraGetInfo) - case w of - Right zebra -> do - bc <- - try $ checkBlockChain host port :: IO - (Either IOError ZebraGetBlockChainInfo) - case bc of - Left e1 -> throwIO e1 - Right chainInfo -> do + homeDir <- try getHomeDirectory :: IO (Either IOError FilePath) + case homeDir of + Left e -> print e + Right hD -> do + let host = c_zebraHost config + let port = c_zebraPort config + let dbFilePath = c_dbPath config + pool <- runNoLoggingT $ initPool dbFilePath + w <- try $ checkZebra host port :: IO (Either IOError ZebraGetInfo) + case w of + Right zebra -> do + bc <- + try $ checkBlockChain host port :: IO + (Either IOError ZebraGetBlockChainInfo) + case bc of + Left e1 -> throwIO e1 + Right chainInfo -> do + initDb dbFilePath + generateQRCodes config + walList <- getWallets pool $ zgb_net chainInfo + accList <- + if not (null walList) + then runNoLoggingT $ + getAccounts pool $ entityKey $ head walList + else return [] + addrList <- + if not (null accList) + then runNoLoggingT $ + getAddresses pool $ entityKey $ head accList + else return [] + txList <- + if not (null addrList) + then getUserTx pool $ entityKey $ head addrList + else return [] + qr <- + if not (null addrList) + then getQrCode pool Orchard $ entityKey $ head addrList + else return Nothing + bal <- + if not (null accList) + then getBalance pool $ entityKey $ head accList + else return 0 + unconfBal <- + if not (null accList) + then getUnconfirmedBalance pool $ entityKey $ head accList + else return 0 + let model = + AppModel + config + (zgb_net chainInfo) + walList + 0 + accList + 0 + addrList + 0 + txList + 0 + Nothing + True + bal + (if unconfBal == 0 + then Nothing + else Just unconfBal) + Orchard + qr + False + False + False + False + "" + Nothing + "" + "" + (SaveAddress $ + if not (null accList) + then Just (head accList) + else Nothing) + False + False + Nothing + Nothing + 0 + 1.0 + False + "" + 0.0 + "" + False + False + Nothing + hD + startApp model handleEvent buildUI (params hD) + Left e -> do initDb dbFilePath - generateQRCodes config - walList <- getWallets pool $ zgb_net chainInfo - accList <- - if not (null walList) - then runNoLoggingT $ getAccounts pool $ entityKey $ head walList - else return [] - addrList <- - if not (null accList) - then runNoLoggingT $ getAddresses pool $ entityKey $ head accList - else return [] - txList <- - if not (null addrList) - then getUserTx pool $ entityKey $ head addrList - else return [] - qr <- - if not (null addrList) - then getQrCode pool Orchard $ entityKey $ head addrList - else return Nothing - bal <- - if not (null accList) - then getBalance pool $ entityKey $ head accList - else return 0 - unconfBal <- - if not (null accList) - then getUnconfirmedBalance pool $ entityKey $ head accList - else return 0 let model = AppModel config - (zgb_net chainInfo) - walList + TestNet + [] 0 - accList + [] 0 - addrList + [] 0 - txList + [] 0 - Nothing - True - bal - (if unconfBal == 0 - then Nothing - else Just unconfBal) + (Just $ + "Couldn't connect to Zebra on " <> + host <> ":" <> showt port <> ". Check your configuration.") + False + 314259000 + (Just 30000) Orchard - qr + Nothing False False False @@ -1310,10 +1374,7 @@ runZenithGUI config = do Nothing "" "" - (SaveAddress $ - if not (null accList) - then Just (head accList) - else Nothing) + (SaveAddress Nothing) False False Nothing @@ -1327,61 +1388,26 @@ runZenithGUI config = do False False Nothing - startApp model handleEvent buildUI params - Left e -> do - initDb dbFilePath - let model = - AppModel - config - TestNet - [] - 0 - [] - 0 - [] - 0 - [] - 0 - (Just $ - "Couldn't connect to Zebra on " <> - host <> ":" <> showt port <> ". Check your configuration.") - False - 314259000 - (Just 30000) - Orchard - Nothing - False - False - False - False - "" - Nothing - "" - "" - (SaveAddress Nothing) - False - False - Nothing - Nothing - 0 - 1.0 - False - "" - 0.0 - "" - False - False - Nothing - startApp model handleEvent buildUI params + hD + startApp model handleEvent buildUI (params hD) where - params = + params hd = [ appWindowTitle "Zenith - Zcash Full Node Wallet" , appWindowState $ MainWindowNormal (1000, 700) , appTheme zenithTheme - , appFontDef "Regular" "./assets/Atkinson-Hyperlegible-Regular-102.ttf" --"./assets/DejaVuSansMono.ttf" - , appFontDef "Bold" "./assets/Atkinson-Hyperlegible-Bold-102.ttf" - , appFontDef "Italic" "./assets/Atkinson-Hyperlegible-Italic-102.ttf" - , appFontDef "Remix" "./assets/remixicon.ttf" + , appFontDef + "Regular" + (T.pack $ + hd + "Zenith/assets/Atkinson-Hyperlegible-Regular-102.ttf" --"./assets/DejaVuSansMono.ttf" + ) + , appFontDef + "Bold" + (T.pack $ hd "Zenith/assets/Atkinson-Hyperlegible-Bold-102.ttf") + , appFontDef + "Italic" + (T.pack $ hd "Zenith/assets/Atkinson-Hyperlegible-Italic-102.ttf") + , appFontDef "Remix" (T.pack $ hd "Zenith/assets/remixicon.ttf") , appDisableAutoScale True , appScaleFactor 2.0 , appInitEvent AppInit diff --git a/zcash-haskell b/zcash-haskell index 90c8a7c..e807441 160000 --- a/zcash-haskell +++ b/zcash-haskell @@ -1 +1 @@ -Subproject commit 90c8a7c3028bd6836dea5655221277a25d457653 +Subproject commit e8074419cfb54559a4c09731ad2448d5930869a2 diff --git a/zenith.cabal b/zenith.cabal index 46af28d..2aacd50 100644 --- a/zenith.cabal +++ b/zenith.cabal @@ -47,6 +47,8 @@ library , brick , bytestring , data-default + , directory + , filepath , esqueleto , resource-pool , binary