mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-04-07 15:07:28 +00:00
properly await multDest transactino so it won't freeze the UI (#2116)
This commit is contained in:
parent
18049308df
commit
2f0cb28fb2
2 changed files with 22 additions and 43 deletions
cw_monero/lib
|
@ -161,31 +161,39 @@ Future<PendingTransactionDescription> createTransactionSync(
|
|||
);
|
||||
}
|
||||
|
||||
PendingTransactionDescription createTransactionMultDestSync(
|
||||
Future<PendingTransactionDescription> createTransactionMultDest(
|
||||
{required List<MoneroOutput> outputs,
|
||||
required String paymentId,
|
||||
required int priorityRaw,
|
||||
int accountIndex = 0,
|
||||
List<String> preferredInputs = const []}) {
|
||||
List<String> preferredInputs = const []}) async {
|
||||
|
||||
final dstAddrs = outputs.map((e) => e.address).toList();
|
||||
final amounts = outputs.map((e) => monero.Wallet_amountFromString(e.amount)).toList();
|
||||
|
||||
// printV("multDest: dstAddrs: $dstAddrs");
|
||||
// printV("multDest: amounts: $amounts");
|
||||
final waddr = wptr!.address;
|
||||
|
||||
// force reconnection in case the os killed the connection
|
||||
Isolate.run(() async {
|
||||
monero.Wallet_synchronized(Pointer.fromAddress(waddr));
|
||||
});
|
||||
|
||||
final txptr = Pointer<Void>.fromAddress(await Isolate.run(() {
|
||||
return monero.Wallet_createTransactionMultDest(
|
||||
Pointer.fromAddress(waddr),
|
||||
dstAddr: dstAddrs,
|
||||
isSweepAll: false,
|
||||
amounts: amounts,
|
||||
mixinCount: 0,
|
||||
pendingTransactionPriority: priorityRaw,
|
||||
subaddr_account: accountIndex,
|
||||
).address;
|
||||
}));
|
||||
|
||||
final txptr = monero.Wallet_createTransactionMultDest(
|
||||
wptr!,
|
||||
dstAddr: dstAddrs,
|
||||
isSweepAll: false,
|
||||
amounts: amounts,
|
||||
mixinCount: 0,
|
||||
pendingTransactionPriority: priorityRaw,
|
||||
subaddr_account: accountIndex,
|
||||
);
|
||||
if (monero.PendingTransaction_status(txptr) != 0) {
|
||||
throw CreationTransactionException(message: monero.PendingTransaction_errorString(txptr));
|
||||
}
|
||||
|
||||
return PendingTransactionDescription(
|
||||
amount: monero.PendingTransaction_amount(txptr),
|
||||
fee: monero.PendingTransaction_fee(txptr),
|
||||
|
@ -255,21 +263,6 @@ Future<PendingTransactionDescription> _createTransactionSync(Map args) async {
|
|||
preferredInputs: preferredInputs);
|
||||
}
|
||||
|
||||
PendingTransactionDescription _createTransactionMultDestSync(Map args) {
|
||||
final outputs = args['outputs'] as List<MoneroOutput>;
|
||||
final paymentId = args['paymentId'] as String;
|
||||
final priorityRaw = args['priorityRaw'] as int;
|
||||
final accountIndex = args['accountIndex'] as int;
|
||||
final preferredInputs = args['preferredInputs'] as List<String>;
|
||||
|
||||
return createTransactionMultDestSync(
|
||||
outputs: outputs,
|
||||
paymentId: paymentId,
|
||||
priorityRaw: priorityRaw,
|
||||
accountIndex: accountIndex,
|
||||
preferredInputs: preferredInputs);
|
||||
}
|
||||
|
||||
Future<PendingTransactionDescription> createTransaction(
|
||||
{required String address,
|
||||
required int priorityRaw,
|
||||
|
@ -286,21 +279,6 @@ Future<PendingTransactionDescription> createTransaction(
|
|||
'preferredInputs': preferredInputs
|
||||
});
|
||||
|
||||
Future<PendingTransactionDescription> createTransactionMultDest(
|
||||
{required List<MoneroOutput> outputs,
|
||||
required int priorityRaw,
|
||||
String paymentId = '',
|
||||
int accountIndex = 0,
|
||||
List<String> preferredInputs = const []}) async =>
|
||||
_createTransactionMultDestSync({
|
||||
'outputs': outputs,
|
||||
'paymentId': paymentId,
|
||||
'priorityRaw': priorityRaw,
|
||||
'accountIndex': accountIndex,
|
||||
'preferredInputs': preferredInputs
|
||||
});
|
||||
|
||||
|
||||
class Transaction {
|
||||
final String displayLabel;
|
||||
late final String subaddressLabel = monero.Wallet_getSubaddressLabel(
|
||||
|
|
|
@ -402,6 +402,7 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
|
|||
outputs: moneroOutputs,
|
||||
priorityRaw: _credentials.priority.serialize(),
|
||||
accountIndex: walletAddresses.account!.id,
|
||||
paymentId: "",
|
||||
preferredInputs: inputs);
|
||||
} else {
|
||||
final output = outputs.first;
|
||||
|
|
Loading…
Reference in a new issue