fix total account balance
fix total account balance cleanup
This commit is contained in:
parent
826c0ed46d
commit
19eb7eb520
|
@ -15,8 +15,10 @@ type WalletModel* = ref object
|
||||||
accounts*: seq[Account]
|
accounts*: seq[Account]
|
||||||
defaultCurrency*: string
|
defaultCurrency*: string
|
||||||
tokens*: JsonNode
|
tokens*: JsonNode
|
||||||
|
totalBalance*: float
|
||||||
|
|
||||||
proc getDefaultCurrency*(self: WalletModel): string
|
proc getDefaultCurrency*(self: WalletModel): string
|
||||||
|
proc calculateTotalFiatBalance*(self: WalletModel)
|
||||||
|
|
||||||
proc newWalletModel*(events: EventEmitter): WalletModel =
|
proc newWalletModel*(events: EventEmitter): WalletModel =
|
||||||
result = WalletModel()
|
result = WalletModel()
|
||||||
|
@ -24,14 +26,19 @@ proc newWalletModel*(events: EventEmitter): WalletModel =
|
||||||
result.tokens = %* []
|
result.tokens = %* []
|
||||||
result.events = events
|
result.events = events
|
||||||
result.defaultCurrency = ""
|
result.defaultCurrency = ""
|
||||||
|
result.totalBalance = 0.0
|
||||||
|
|
||||||
proc initEvents*(self: WalletModel) =
|
proc initEvents*(self: WalletModel) =
|
||||||
self.events.on("currencyChanged") do(e: Args):
|
self.events.on("currencyChanged") do(e: Args):
|
||||||
self.defaultCurrency = self.getDefaultCurrency()
|
self.defaultCurrency = self.getDefaultCurrency()
|
||||||
for account in self.accounts:
|
for account in self.accounts:
|
||||||
updateBalance(account, self.getDefaultCurrency())
|
updateBalance(account, self.getDefaultCurrency())
|
||||||
|
self.calculateTotalFiatBalance()
|
||||||
self.events.emit("accountsUpdated", Args())
|
self.events.emit("accountsUpdated", Args())
|
||||||
|
|
||||||
|
self.events.on("newAccountAdded") do(e: Args):
|
||||||
|
self.calculateTotalFiatBalance()
|
||||||
|
|
||||||
proc delete*(self: WalletModel) =
|
proc delete*(self: WalletModel) =
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
@ -45,18 +52,18 @@ proc setDefaultCurrency*(self: WalletModel, currency: string) =
|
||||||
discard status_settings.saveSettings("currency", currency)
|
discard status_settings.saveSettings("currency", currency)
|
||||||
self.events.emit("currencyChanged", CurrencyArgs(currency: currency))
|
self.events.emit("currencyChanged", CurrencyArgs(currency: currency))
|
||||||
|
|
||||||
proc generateAccountConfiguredAssets*(self: WalletModel): seq[Asset] =
|
proc generateAccountConfiguredAssets*(self: WalletModel, accountAddress: string): seq[Asset] =
|
||||||
var assets: seq[Asset] = @[]
|
var assets: seq[Asset] = @[]
|
||||||
var asset = Asset(name:"Ethereum", symbol: "ETH", value: "0.0", fiatValue: "0.0", image: fmt"../../img/token-icons/eth.svg", hasIcon: true)
|
var asset = Asset(name:"Ethereum", symbol: "ETH", value: "0.0", fiatValue: "0.0", image: fmt"../../img/token-icons/eth.svg", hasIcon: true, accountAddress: accountAddress)
|
||||||
assets.add(asset)
|
assets.add(asset)
|
||||||
for token in self.tokens:
|
for token in self.tokens:
|
||||||
var symbol = token["symbol"].getStr
|
var symbol = token["symbol"].getStr
|
||||||
var existingToken = Asset(name: token["name"].getStr, symbol: symbol, value: fmt"0.0", fiatValue: "$0.0", image: fmt"../../img/token-icons/{toLowerAscii(symbol)}.svg", hasIcon: true)
|
var existingToken = Asset(name: token["name"].getStr, symbol: symbol, value: fmt"0.0", fiatValue: "$0.0", image: fmt"../../img/token-icons/{toLowerAscii(symbol)}.svg", hasIcon: true, accountAddress: accountAddress)
|
||||||
assets.add(existingToken)
|
assets.add(existingToken)
|
||||||
assets
|
assets
|
||||||
|
|
||||||
proc newAccount*(self: WalletModel, name: string, address: string, iconColor: string, balance: string): Account =
|
proc newAccount*(self: WalletModel, name: string, address: string, iconColor: string, balance: string): Account =
|
||||||
var assets: seq[Asset] = self.generateAccountConfiguredAssets()
|
var assets: seq[Asset] = self.generateAccountConfiguredAssets(address)
|
||||||
var account = Account(name: name, address: address, iconColor: iconColor, balance: fmt"{balance} {self.defaultCurrency}", assetList: assets, realFiatBalance: 0.0)
|
var account = Account(name: name, address: address, iconColor: iconColor, balance: fmt"{balance} {self.defaultCurrency}", assetList: assets, realFiatBalance: 0.0)
|
||||||
updateBalance(account, self.getDefaultCurrency())
|
updateBalance(account, self.getDefaultCurrency())
|
||||||
account
|
account
|
||||||
|
@ -67,10 +74,16 @@ proc initAccounts*(self: WalletModel) =
|
||||||
for account in accounts:
|
for account in accounts:
|
||||||
var account = self.newAccount(account.name, account.address, account.color, "")
|
var account = self.newAccount(account.name, account.address, account.color, "")
|
||||||
self.accounts.add(account)
|
self.accounts.add(account)
|
||||||
|
self.calculateTotalFiatBalance
|
||||||
|
|
||||||
proc getTotalFiatBalance*(self: WalletModel): string =
|
proc getTotalFiatBalance*(self: WalletModel): string =
|
||||||
var newBalance = 0.0
|
var newBalance = 0.0
|
||||||
fmt"{newBalance:.2f} {self.defaultCurrency}"
|
fmt"{self.totalBalance:.2f} {self.defaultCurrency}"
|
||||||
|
|
||||||
|
proc calculateTotalFiatBalance*(self: WalletModel) =
|
||||||
|
self.totalBalance = 0.0
|
||||||
|
for account in self.accounts:
|
||||||
|
self.totalBalance += account.realFiatBalance
|
||||||
|
|
||||||
proc addNewGeneratedAccount(self: WalletModel, generatedAccount: GeneratedAccount, password: string, accountName: string, color: string, accountType: string, isADerivedAccount = true) =
|
proc addNewGeneratedAccount(self: WalletModel, generatedAccount: GeneratedAccount, password: string, accountName: string, color: string, accountType: string, isADerivedAccount = true) =
|
||||||
generatedAccount.name = accountName
|
generatedAccount.name = accountName
|
||||||
|
@ -103,6 +116,6 @@ proc hasAsset*(self: WalletModel, account: string, symbol: string): bool =
|
||||||
proc toggleAsset*(self: WalletModel, symbol: string, enable: bool, address: string, name: string, decimals: int, color: string) =
|
proc toggleAsset*(self: WalletModel, symbol: string, enable: bool, address: string, name: string, decimals: int, color: string) =
|
||||||
self.tokens = addOrRemoveToken(enable, address, name, symbol, decimals, color)
|
self.tokens = addOrRemoveToken(enable, address, name, symbol, decimals, color)
|
||||||
for account in self.accounts:
|
for account in self.accounts:
|
||||||
account.assetList = self.generateAccountConfiguredAssets()
|
account.assetList = self.generateAccountConfiguredAssets(account.address)
|
||||||
updateBalance(account, self.getDefaultCurrency())
|
updateBalance(account, self.getDefaultCurrency())
|
||||||
self.events.emit("assetChanged", Args())
|
self.events.emit("assetChanged", Args())
|
||||||
|
|
|
@ -4,7 +4,7 @@ type CurrencyArgs* = ref object of Args
|
||||||
currency*: string
|
currency*: string
|
||||||
|
|
||||||
type Asset* = ref object
|
type Asset* = ref object
|
||||||
name*, symbol*, value*, fiatValue*, image*: string
|
name*, symbol*, value*, fiatValue*, image*, accountAddress*: string
|
||||||
hasIcon*: bool
|
hasIcon*: bool
|
||||||
|
|
||||||
type Account* = ref object
|
type Account* = ref object
|
||||||
|
|
|
@ -20,14 +20,12 @@ proc getPrice(crypto: string, fiat: string): string =
|
||||||
if balanceManager.pricePairs.hasKey(fiat):
|
if balanceManager.pricePairs.hasKey(fiat):
|
||||||
return balanceManager.pricePairs[fiat]
|
return balanceManager.pricePairs[fiat]
|
||||||
var url: string = fmt"https://min-api.cryptocompare.com/data/price?fsym={crypto}&tsyms={fiat}"
|
var url: string = fmt"https://min-api.cryptocompare.com/data/price?fsym={crypto}&tsyms={fiat}"
|
||||||
echo url
|
|
||||||
let client = newHttpClient()
|
let client = newHttpClient()
|
||||||
client.headers = newHttpHeaders({ "Content-Type": "application/json" })
|
client.headers = newHttpHeaders({ "Content-Type": "application/json" })
|
||||||
|
|
||||||
let response = client.request(url)
|
let response = client.request(url)
|
||||||
echo $response.body
|
|
||||||
result = $parseJson(response.body)[fiat.toUpper]
|
result = $parseJson(response.body)[fiat.toUpper]
|
||||||
balanceManager.pricePairs[fiat] = result
|
# balanceManager.pricePairs[fiat] = result
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
echo "error getting price"
|
echo "error getting price"
|
||||||
echo e.msg
|
echo e.msg
|
||||||
|
@ -35,7 +33,7 @@ proc getPrice(crypto: string, fiat: string): string =
|
||||||
proc getEthBalance(address: string): string =
|
proc getEthBalance(address: string): string =
|
||||||
var balance = status_wallet.getBalance(address)
|
var balance = status_wallet.getBalance(address)
|
||||||
result = status_wallet.hex2Eth(balance)
|
result = status_wallet.hex2Eth(balance)
|
||||||
balanceManager.tokenBalances["ETH"] = result
|
# balanceManager.tokenBalances["ETH"] = result
|
||||||
|
|
||||||
proc getBalance*(symbol: string, accountAddress: string): string =
|
proc getBalance*(symbol: string, accountAddress: string): string =
|
||||||
if balanceManager.tokenBalances.hasKey(symbol):
|
if balanceManager.tokenBalances.hasKey(symbol):
|
||||||
|
@ -45,7 +43,7 @@ proc getBalance*(symbol: string, accountAddress: string): string =
|
||||||
return getEthBalance(accountAddress)
|
return getEthBalance(accountAddress)
|
||||||
var token: AssetConfig = getTokenConfig(symbol)
|
var token: AssetConfig = getTokenConfig(symbol)
|
||||||
result = $status_tokens.getTokenBalance(token.address, accountAddress)
|
result = $status_tokens.getTokenBalance(token.address, accountAddress)
|
||||||
balanceManager.tokenBalances[symbol] = result
|
# balanceManager.tokenBalances[symbol] = result
|
||||||
|
|
||||||
proc getFiatValue*(crypto_balance: string, crypto_symbol: string, fiat_symbol: string): float =
|
proc getFiatValue*(crypto_balance: string, crypto_symbol: string, fiat_symbol: string): float =
|
||||||
if crypto_balance == "0.0": return 0.0
|
if crypto_balance == "0.0": return 0.0
|
||||||
|
@ -53,15 +51,16 @@ proc getFiatValue*(crypto_balance: string, crypto_symbol: string, fiat_symbol: s
|
||||||
parseFloat(crypto_balance) * parseFloat(fiat_crypto_price)
|
parseFloat(crypto_balance) * parseFloat(fiat_crypto_price)
|
||||||
|
|
||||||
proc updateBalance*(asset: Asset, currency: string) =
|
proc updateBalance*(asset: Asset, currency: string) =
|
||||||
var token_balance = getBalance(asset.symbol, "0xf977814e90da44bfa03b6295a0616a897441acec")
|
var token_balance = getBalance(asset.symbol, asset.accountAddress)
|
||||||
let fiat_balance = getFiatValue(token_balance, asset.symbol, currency)
|
let fiat_balance = getFiatValue(token_balance, asset.symbol, currency)
|
||||||
asset.value = token_balance
|
asset.value = token_balance
|
||||||
asset.fiatValue = fmt"{fiat_Balance:.2f} {currency}"
|
asset.fiatValue = fmt"{fiat_balance:.2f} {currency}"
|
||||||
|
|
||||||
proc updateBalance*(account: Account, currency: string) =
|
proc updateBalance*(account: Account, currency: string) =
|
||||||
let eth_balance = getBalance("ETH", account.address)
|
let eth_balance = getBalance("ETH", account.address)
|
||||||
let usd_balance = getFiatValue(eth_balance, "ETH", currency)
|
let usd_balance = getFiatValue(eth_balance, "ETH", currency)
|
||||||
var totalAccountBalance = usd_balance
|
var totalAccountBalance = usd_balance
|
||||||
|
account.realFiatBalance = totalAccountBalance
|
||||||
account.balance = fmt"{totalAccountBalance:.2f} {currency}"
|
account.balance = fmt"{totalAccountBalance:.2f} {currency}"
|
||||||
for asset in account.assetList:
|
for asset in account.assetList:
|
||||||
updateBalance(asset, currency)
|
updateBalance(asset, currency)
|
||||||
|
|
Loading…
Reference in New Issue