import 'package:cw_monero/api/account_list.dart'; import 'package:cw_monero/api/wallet.dart'; import 'package:monero/monero.dart' as monero; bool isUpdating = false; class SubaddressInfoMetadata { SubaddressInfoMetadata({ required this.accountIndex, }); int accountIndex; } SubaddressInfoMetadata? subaddress = null; void refreshSubaddresses({required int accountIndex}) { try { isUpdating = true; subaddress = SubaddressInfoMetadata(accountIndex: accountIndex); isUpdating = false; } catch (e) { isUpdating = false; rethrow; } } class Subaddress { Subaddress({ required this.addressIndex, required this.accountIndex, }); String get address => monero.Wallet_address( wptr!, accountIndex: accountIndex, addressIndex: addressIndex, ); final int addressIndex; final int accountIndex; String get label => monero.Wallet_getSubaddressLabel(wptr!, accountIndex: accountIndex, addressIndex: addressIndex); } List getAllSubaddresses() { final size = monero.Wallet_numSubaddresses(wptr!, accountIndex: subaddress!.accountIndex); return List.generate(size, (index) { return Subaddress( accountIndex: subaddress!.accountIndex, addressIndex: index, ); }).reversed.toList(); } void addSubaddressSync({required int accountIndex, required String label}) { monero.Wallet_addSubaddress(wptr!, accountIndex: accountIndex, label: label); refreshSubaddresses(accountIndex: accountIndex); } void setLabelForSubaddressSync( {required int accountIndex, required int addressIndex, required String label}) { monero.Wallet_setSubaddressLabel(wptr!, accountIndex: accountIndex, addressIndex: addressIndex, label: label); } void _addSubaddress(Map args) { final label = args['label'] as String; final accountIndex = args['accountIndex'] as int; addSubaddressSync(accountIndex: accountIndex, label: label); } void _setLabelForSubaddress(Map args) { final label = args['label'] as String; final accountIndex = args['accountIndex'] as int; final addressIndex = args['addressIndex'] as int; setLabelForSubaddressSync( accountIndex: accountIndex, addressIndex: addressIndex, label: label); } Future addSubaddress({required int accountIndex, required String label}) async { _addSubaddress({'accountIndex': accountIndex, 'label': label}); await store(); } Future setLabelForSubaddress( {required int accountIndex, required int addressIndex, required String label}) async { _setLabelForSubaddress({ 'accountIndex': accountIndex, 'addressIndex': addressIndex, 'label': label }); await store(); }