Browse Source

Wallet: improve the lazy show balance

pull/18/head
Sun 4 years ago
parent
commit
47cd19bda4
  1. 20
      lib/apps/wallet/page.dart
  2. 19
      src/apps/wallet/rpc.rs

20
lib/apps/wallet/page.dart

@ -42,6 +42,7 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt @@ -42,6 +42,7 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt
rpc.addListener('wallet-generate', _walletGenerate, false);
rpc.addListener('wallet-import', _walletGenerate, false);
rpc.addListener('wallet-token', _walletToken, false);
rpc.addListener('wallet-balance', _walletBalance, false);
super.initState();
@ -63,6 +64,17 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt @@ -63,6 +64,17 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt
}
}
_walletToken(List params) {
final network = NetworkExtension.fromInt(params[0]);
if (network == this._selectedNetwork!) {
this._tokens.clear();
params[1].forEach((param) {
this._tokens.add(Token.fromList(param, '0'));
});
}
setState(() {});
}
_walletBalance(List params) {
final address = params[0];
final network = NetworkExtension.fromInt(params[1]);
@ -116,22 +128,18 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt @@ -116,22 +128,18 @@ class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderSt
if (!this._networks.contains(this._selectedNetwork)) {
_changeNetwork(this._networks[0]);
} else {
rpc.send('wallet-balance', [
rpc.send('wallet-token', [
this._selectedNetwork!.toInt(), this._selectedAddress!.address
]);
}
this._mainToken = address.mainToken(this._selectedNetwork!);
for (var i = 0; i < this._tokens.length; i++) {
this._tokens[i].balance('0');
}
}
_changeNetwork(Network network) {
this._selectedNetwork = network;
rpc.send('wallet-balance', [
rpc.send('wallet-token', [
this._selectedNetwork!.toInt(), this._selectedAddress!.address
]);
this._tokens.clear();
}
@override

19
src/apps/wallet/rpc.rs

@ -20,14 +20,23 @@ use super::{ @@ -20,14 +20,23 @@ use super::{
const WALLET_DEFAULT_PIN: &'static str = "walletissafe";
#[inline]
fn wallet_list(devices: Vec<Address>) -> RpcParam {
fn wallet_list(wallets: Vec<Address>) -> RpcParam {
let mut results = vec![];
for wallet in devices {
for wallet in wallets {
results.push(wallet.to_rpc());
}
json!(results)
}
#[inline]
fn token_list(network: Network, tokens: Vec<Token>) -> RpcParam {
let mut results = vec![];
for token in tokens {
results.push(token.to_rpc());
}
json!([network.to_i64(), results])
}
#[inline]
fn res_balance(
gid: GroupId,
@ -244,7 +253,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { @@ -244,7 +253,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
);
handler.add_method(
"wallet-balance",
"wallet-token",
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move {
let network = Network::from_i64(params[0].as_i64().ok_or(RpcError::ParseError)?);
let address = params[1].as_str().ok_or(RpcError::ParseError)?.to_owned();
@ -262,9 +271,9 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { @@ -262,9 +271,9 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
None
};
let tokens = Token::list(&db, &network)?;
tokio::spawn(loop_token(sender, db, gid, network, address, c_str));
Ok(HandleResult::new())
Ok(HandleResult::rpc(token_list(network, tokens)))
},
);

Loading…
Cancel
Save