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 'package:mobx/mobx.dart';
import 'package:bitcoin_base/bitcoin_base.dart';
@ -16,7 +17,7 @@ abstract class BaseBitcoinAddressRecord {
}) : _txCount = txCount,
_balance = balance,
_name = name,
_isUsed = isUsed;
_isUsed = Observable(isUsed);
@override
bool operator ==(Object o) => o is BaseBitcoinAddressRecord && address == o.address;
@ -27,7 +28,7 @@ abstract class BaseBitcoinAddressRecord {
int _txCount;
int _balance;
String _name;
bool _isUsed;
final Observable<bool> _isUsed;
BasedUtxoNetwork? network;
int get txCount => _txCount;
@ -40,9 +41,9 @@ abstract class BaseBitcoinAddressRecord {
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;
int get hashCode => address.hashCode;

View file

@ -144,27 +144,32 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
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 =
receiveAddresses.where(_isAddressPageTypeMatch).where((addr) => !addr.isUsed);
if ((isEnabledAutoGenerateSubaddress && receiveAddresses.isEmpty) ||
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 (!isEnabledAutoGenerateSubaddress) {
if (previousAddressRecord != null &&
previousAddressRecord!.type == addressPageType) {
return previousAddressRecord!.address;
}
return receiveAddress;
if (typeMatchingAddresses.isNotEmpty) {
return typeMatchingAddresses.first.address;
}
return generateNewAddress().address;
}
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

View file

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