Merge remote-tracking branch 'origin/main'

This commit is contained in:
OmarHatem 2025-05-01 16:21:59 +03:00
commit 69c2e458d5
3 changed files with 29 additions and 23 deletions

View file

@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'package:mobx/mobx.dart';
import 'package:bitcoin_base/bitcoin_base.dart'; import 'package:bitcoin_base/bitcoin_base.dart';
@ -16,7 +17,7 @@ abstract class BaseBitcoinAddressRecord {
}) : _txCount = txCount, }) : _txCount = txCount,
_balance = balance, _balance = balance,
_name = name, _name = name,
_isUsed = isUsed; _isUsed = Observable(isUsed);
@override @override
bool operator ==(Object o) => o is BaseBitcoinAddressRecord && address == o.address; bool operator ==(Object o) => o is BaseBitcoinAddressRecord && address == o.address;
@ -27,7 +28,7 @@ abstract class BaseBitcoinAddressRecord {
int _txCount; int _txCount;
int _balance; int _balance;
String _name; String _name;
bool _isUsed; final Observable<bool> _isUsed;
BasedUtxoNetwork? network; BasedUtxoNetwork? network;
int get txCount => _txCount; int get txCount => _txCount;
@ -40,9 +41,9 @@ abstract class BaseBitcoinAddressRecord {
set balance(int value) => _balance = value; set balance(int value) => _balance = value;
bool get isUsed => _isUsed; bool get isUsed => _isUsed.value;
void setAsUsed() => _isUsed = true; void setAsUsed() => _isUsed.value = true;
void setNewName(String label) => _name = label; void setNewName(String label) => _name = label;
int get hashCode => address.hashCode; int get hashCode => address.hashCode;

View file

@ -144,27 +144,32 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
return silentAddress.toString(); return silentAddress.toString();
} }
String receiveAddress; final typeMatchingAddresses = _addresses.where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr)).toList();
final typeMatchingReceiveAddresses = typeMatchingAddresses.where((addr) => !addr.isUsed).toList();
final typeMatchingReceiveAddresses = if (!isEnabledAutoGenerateSubaddress) {
receiveAddresses.where(_isAddressPageTypeMatch).where((addr) => !addr.isUsed); if (previousAddressRecord != null &&
previousAddressRecord!.type == addressPageType) {
if ((isEnabledAutoGenerateSubaddress && receiveAddresses.isEmpty) || return previousAddressRecord!.address;
typeMatchingReceiveAddresses.isEmpty) {
receiveAddress = generateNewAddress().address;
} else {
final previousAddressMatchesType =
previousAddressRecord != null && previousAddressRecord!.type == addressPageType;
if (previousAddressMatchesType &&
typeMatchingReceiveAddresses.first.address != addressesByReceiveType.first.address) {
receiveAddress = previousAddressRecord!.address;
} else {
receiveAddress = typeMatchingReceiveAddresses.first.address;
} }
if (typeMatchingAddresses.isNotEmpty) {
return typeMatchingAddresses.first.address;
}
return generateNewAddress().address;
} }
return receiveAddress; if (typeMatchingAddresses.isEmpty || typeMatchingReceiveAddresses.isEmpty) {
return generateNewAddress().address;
}
final prev = previousAddressRecord;
if (prev != null && prev.type == addressPageType && !prev.isUsed) {
return prev.address;
}
return typeMatchingReceiveAddresses.first.address;
} }
@observable @observable

View file

@ -130,8 +130,8 @@ abstract class MoneroWalletAddressesBase extends WalletAddresses with Store {
final transactions = _moneroTransactionHistory.transactions.values.toList(); final transactions = _moneroTransactionHistory.transactions.values.toList();
transactions.forEach((element) { transactions.forEach((element) {
final accountIndex = element.accountIndex; final accountIndex = element.additionalInfo['accountIndex'] as int? ?? 0;
final addressIndex = element.addressIndex; final addressIndex = element.additionalInfo['addressIndex'] as int? ?? 0;
usedAddresses.add(getAddress(accountIndex: accountIndex, addressIndex: addressIndex)); usedAddresses.add(getAddress(accountIndex: accountIndex, addressIndex: addressIndex));
}); });
} }