Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(transaction-history): incorrect transaction history shown when switching coins #2525

Merged
merged 5 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/bloc/coins_bloc/coins_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ class CoinsBloc extends Bloc<CoinsEvent, CoinsState> {
// TODO: move auth listener to ui layer: bloclistener fires auth events
on<CoinsBalanceMonitoringStarted>(_onCoinsBalanceMonitoringStarted);
on<CoinsBalanceMonitoringStopped>(_onCoinsBalanceMonitoringStopped);
on<CoinsBalancesRefreshed>(_onCoinsRefreshed, transformer: sequential());
on<CoinsBalancesRefreshed>(_onCoinsRefreshed, transformer: droppable());
on<CoinsActivated>(_onCoinsActivated, transformer: concurrent());
on<CoinsDeactivated>(_onCoinsDeactivated, transformer: concurrent());
on<CoinsPricesUpdated>(_onPricesUpdated, transformer: sequential());
on<CoinsPricesUpdated>(_onPricesUpdated, transformer: droppable());
on<CoinsSessionStarted>(_onLogin, transformer: droppable());
on<CoinsSessionEnded>(_onLogout, transformer: droppable());
on<CoinsSuspendedReactivated>(
Expand Down Expand Up @@ -161,7 +161,7 @@ class CoinsBloc extends Bloc<CoinsEvent, CoinsState> {
) async {
_updateBalancesTimer?.cancel();
_updateBalancesTimer = Timer.periodic(
const Duration(seconds: 30),
const Duration(minutes: 1),
(timer) {
add(CoinsBalancesRefreshed());
},
Expand Down
13 changes: 1 addition & 12 deletions lib/bloc/coins_bloc/coins_repo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -436,15 +436,6 @@ class CoinsRepo {
return prices;
}

Future<Balance?> getBalanceInfo(AssetId coinId) async {
final asset = _kdfSdk.assets.available[coinId];
if (asset == null) {
throw ArgumentError.value(coinId, 'getBalanceInfo', 'Asset not found');
}
final pubkeys = await _kdfSdk.pubkeys.getPubkeys(asset);
return pubkeys.balance;
}

Future<Map<String, Coin>> updateTrezorBalances(
Map<String, Coin> walletCoins,
) async {
Expand All @@ -459,9 +450,7 @@ class CoinsRepo {
return walletCoinsCopy;
}

Stream<Coin> updateIguanaBalances(
Map<String, Coin> walletCoins,
) async* {
Stream<Coin> updateIguanaBalances(Map<String, Coin> walletCoins) async* {
final walletCoinsCopy = Map<String, Coin>.from(walletCoins);
final coins =
walletCoinsCopy.values.where((coin) => coin.isActive).toList();
Expand Down
2 changes: 1 addition & 1 deletion lib/bloc/taker_form/taker_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ class TakerBloc extends Bloc<TakerEvent, TakerState> {
availableBalanceState: () => AvailableBalanceState.loading));
}

if (!_isLoggedIn) {
if (!_isLoggedIn || !state.sellCoin!.isActive) {
emitter(state.copyWith(
availableBalanceState: () => AvailableBalanceState.unavailable));
} else {
Expand Down
39 changes: 31 additions & 8 deletions lib/bloc/transaction_history/transaction_history_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,31 @@ class TransactionHistoryBloc
TransactionHistorySubscribe event,
Emitter<TransactionHistoryState> emit,
) async {
if (!hasTxHistorySupport(event.coin)) return;

await _historySubscription?.cancel();
await _newTransactionsSubscription?.cancel();
_processedTxIds.clear();

emit(const TransactionHistoryState.initial());

if (!hasTxHistorySupport(event.coin)) {
emit(
state.copyWith(
loading: false,
error: TextError(
error: 'Transaction history is not supported for this coin.',
),
transactions: const [],
),
);
return;
}

try {
await _historySubscription?.cancel();
await _newTransactionsSubscription?.cancel();
_processedTxIds.clear();

add(const TransactionHistoryStartedLoading());
final asset = getSdkAsset(_sdk, event.coin.abbr);
final asset = _sdk.assets.available[event.coin.id];
if (asset == null) {
throw Exception('Asset ${event.coin.id} not found in known coins list');
}

// Subscribe to historical transactions
_historySubscription =
Expand Down Expand Up @@ -87,11 +101,20 @@ class TransactionHistoryBloc
);
},
onDone: () {
if (state.error == null && state.loading) {
add(TransactionHistoryUpdated(transactions: state.transactions));
}
// Once historical load is complete, start watching for new transactions
_subscribeToNewTransactions(asset, event.coin);
},
);
} catch (e) {
} catch (e, s) {
log(
'Error loading transaction history: $e',
isError: true,
path: 'transaction_history_bloc->_onSubscribe',
trace: s,
);
add(
TransactionHistoryFailure(
error: TextError(error: LocaleKeys.somethingWrong.tr()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ final class TransactionHistoryState extends Equatable {
final BaseError? error;

@override
List<Object?> get props => [transactions, loading];
List<Object?> get props => [transactions, loading, error];

const TransactionHistoryState.initial()
: transactions = const [],
Expand Down
2 changes: 0 additions & 2 deletions lib/generated/codegen_loader.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,6 @@ abstract class LocaleKeys {
static const logoutPopupTitle = 'logoutPopupTitle';
static const logoutPopupDescriptionWalletOnly = 'logoutPopupDescriptionWalletOnly';
static const logoutPopupDescription = 'logoutPopupDescription';
static const logoutPopupDescriptionWalletOnly =
'logoutPopupDescriptionWalletOnly';
static const transactionDetailsTitle = 'transactionDetailsTitle';
static const customSeedWarningText = 'customSeedWarningText';
static const customSeedIUnderstand = 'customSeedIUnderstand';
Expand Down
4 changes: 2 additions & 2 deletions lib/router/parsers/root_route_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ class RootRouteInformationParser extends RouteInformationParser<AppRoutePath> {
}

BaseRouteParser _getRoutParser(Uri uri) {
const defaultRouteParser =
kIsWalletOnly ? walletRouteParser : dexRouteParser;
final defaultRouteParser =
kIsWalletOnly ? _parsers[firstUriSegment.wallet]! : dexRouteParser;

if (uri.pathSegments.isEmpty) return defaultRouteParser;
return _parsers[uri.pathSegments.first] ?? defaultRouteParser;
Expand Down
Loading