diff --git a/lib/data/models/multi_wallet_transaction_cubit.dart b/lib/data/models/multi_wallet_transaction_cubit.dart index 1ba5cc4f0a8eaebab13bc432c875ed866cad8805..e4e0a33b12062b4e695ed9274052d243a7168d12 100644 --- a/lib/data/models/multi_wallet_transaction_cubit.dart +++ b/lib/data/models/multi_wallet_transaction_cubit.dart @@ -22,7 +22,6 @@ import 'transaction.dart'; import 'transaction_state.dart'; import 'transaction_type.dart'; import 'transactions_bloc.dart'; -import 'utxo_cubit.dart'; class MultiWalletTransactionCubit extends HydratedCubit<MultiWalletTransactionState> { @@ -122,7 +121,7 @@ class MultiWalletTransactionCubit String _getTxKey(Transaction t) => '${t.to.pubKey}-${t.comment}-${t.amount}'; Future<List<Transaction>> fetchTransactions( - NodeListCubit cubit, UtxoCubit utxoCubit, AppCubit appCubit, + NodeListCubit cubit, AppCubit appCubit, {int retries = 5, int? pageSize, String? cursor, String? pubKey}) async { pubKey = _defKey(pubKey); final TransactionState currentState = _getStateOfWallet(pubKey); @@ -166,6 +165,8 @@ class MultiWalletTransactionCubit TransactionState currentModifiedState = newState; + resetCurrentGvaNode(newState, cubit); + logger( 'Last received notification: ${currentModifiedState.latestReceivedNotification.toIso8601String()})}'); logger( @@ -220,6 +221,32 @@ class MultiWalletTransactionCubit return <Transaction>[]; } + void resetCurrentGvaNode(TransactionState newState, NodeListCubit cubit) { + final List<Transaction> pendingTransactions = newState.pendingTransactions; + + bool shouldResetGvaNode = pendingTransactions.isEmpty || + pendingTransactions + .every((Transaction transaction) => transaction.isFailed); + + if (!shouldResetGvaNode) { + final Transaction? oldestPendingTransaction = pendingTransactions + .isNotEmpty + ? pendingTransactions.reduce( + (Transaction a, Transaction b) => a.time.isBefore(b.time) ? a : b) + : null; + + if (oldestPendingTransaction != null && + oldestPendingTransaction.time + .isBefore(DateTime.now().subtract(const Duration(hours: 1)))) { + shouldResetGvaNode = true; + } + } + + if (shouldResetGvaNode) { + cubit.resetCurrentGvaNode(); + } + } + TransactionState _checkPendingTx( String? cursor, TransactionState newState, String myPubKey, Node node) { // Check pending transactions