diff --git a/cw_core/lib/transaction_info.dart b/cw_core/lib/transaction_info.dart index 9d72fa84..ae6bddbe 100644 --- a/cw_core/lib/transaction_info.dart +++ b/cw_core/lib/transaction_info.dart @@ -1,5 +1,4 @@ import 'package:cw_core/transaction_direction.dart'; -//import 'package:cake_wallet/utils/mobx.dart'; import 'package:cw_core/keyable.dart'; abstract class TransactionInfo extends Object with Keyable { @@ -18,4 +17,6 @@ abstract class TransactionInfo extends Object with Keyable { @override dynamic get keyIndex => id; + + Map additionalInfo; } \ No newline at end of file diff --git a/cw_monero/lib/monero_transaction_info.dart b/cw_monero/lib/monero_transaction_info.dart index 83dd6539..9677c134 100644 --- a/cw_monero/lib/monero_transaction_info.dart +++ b/cw_monero/lib/monero_transaction_info.dart @@ -23,7 +23,13 @@ class MoneroTransactionInfo extends TransactionInfo { accountIndex = int.parse(map['accountIndex'] as String), addressIndex = map['addressIndex'] as int, key = getTxKey((map['hash'] ?? '') as String), - fee = map['fee'] as int ?? 0; + fee = map['fee'] as int ?? 0 { + additionalInfo = { + 'key': key, + 'accountIndex': accountIndex, + 'addressIndex': addressIndex + }; + } MoneroTransactionInfo.fromRow(TransactionInfoRow row) : id = row.getHash(), @@ -36,7 +42,13 @@ class MoneroTransactionInfo extends TransactionInfo { accountIndex = row.subaddrAccount, addressIndex = row.subaddrIndex, key = getTxKey(row.getHash()), - fee = row.fee; + fee = row.fee { + additionalInfo = { + 'key': key, + 'accountIndex': accountIndex, + 'addressIndex': addressIndex + }; + } final String id; final int height; diff --git a/lib/monero/cw_monero.dart b/lib/monero/cw_monero.dart index 97433773..f17e4b6e 100644 --- a/lib/monero/cw_monero.dart +++ b/lib/monero/cw_monero.dart @@ -288,4 +288,9 @@ class CWMonero extends Monero { WalletService createMoneroWalletService(Box walletInfoSource) { return MoneroWalletService(walletInfoSource); } + + String getTransactionAddress(Object wallet, int accountIndex, int addressIndex) { + final moneroWallet = wallet as MoneroWallet; + return moneroWallet.getTransactionAddress(accountIndex, addressIndex); + } } diff --git a/lib/view_model/transaction_details_view_model.dart b/lib/view_model/transaction_details_view_model.dart index 59afe7f6..b9752a69 100644 --- a/lib/view_model/transaction_details_view_model.dart +++ b/lib/view_model/transaction_details_view_model.dart @@ -13,6 +13,7 @@ import 'package:mobx/mobx.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:cake_wallet/monero/monero.dart'; part 'transaction_details_view_model.g.dart'; @@ -31,6 +32,9 @@ abstract class TransactionDetailsViewModelBase with Store { final dateFormat = DateFormatter.withCurrentLocal(); final tx = transactionInfo; + final key = tx.additionalInfo['key'] as String; + final accountIndex = tx.additionalInfo['accountIndex'] as int; + final addressIndex = tx.additionalInfo['addressIndex'] as int; if (wallet.type == WalletType.monero) { final _items = [ @@ -46,30 +50,27 @@ abstract class TransactionDetailsViewModelBase with Store { value: tx.amountFormatted()), StandartListItem( title: S.current.transaction_details_fee, value: tx.feeFormatted()), + if (key?.isNotEmpty ?? false) + StandartListItem(title: S.current.transaction_key, value: key) ]; - //if (tx.key?.isNotEmpty ?? null) { - // _items.add( - // StandartListItem(title: S.current.transaction_key, value: tx.key)); - //} - - //if (tx.direction == TransactionDirection.incoming) { - // try { - // final accountIndex = tx.accountIndex; - // final addressIndex = tx.addressIndex; - //final address = moneroUtils.getTransactionAddress(wallet, accountIndex, addressIndex); - - //if (address?.isNotEmpty ?? false) { - // isRecipientAddressShown = true; - // _items.add( - // StandartListItem( - // title: S.current.transaction_details_recipient_address, - // value: address)); - //} - // } catch (e) { - // print(e.toString()); - // } - //} + if (tx.direction == TransactionDirection.incoming && + accountIndex != null && + addressIndex != null) { + try { + final address = monero.getTransactionAddress(wallet, accountIndex, addressIndex); + + if (address?.isNotEmpty ?? false) { + isRecipientAddressShown = true; + _items.add( + StandartListItem( + title: S.current.transaction_details_recipient_address, + value: address)); + } + } catch (e) { + print(e.toString()); + } + } items.addAll(_items); } diff --git a/tool/configure.dart b/tool/configure.dart index 6e221848..0987fa7a 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -204,6 +204,8 @@ abstract class Monero { MoneroWalletDetails getMoneroWalletDetails(Object wallet); + String getTransactionAddress(Object wallet, int accountIndex, int addressIndex); + int getHeigthByDate({DateTime date}); TransactionPriority getDefaultTransactionPriority(); TransactionPriority deserializeMoneroTransactionPriority({int raw});