2022-09-09 14:03:36 +00:00
|
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/available_currencies_state_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/available_floating_rate_pairs_state_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/change_now_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/changenow_initial_load_status.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/estimate_rate_exchange_form_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/fixed_rate_exchange_form_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/exchange/fixed_rate_market_pairs_provider.dart';
|
2022-09-09 14:32:15 +00:00
|
|
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
2022-09-09 14:03:36 +00:00
|
|
|
import 'package:stackwallet/utilities/logger.dart';
|
|
|
|
|
|
|
|
class ChangeNowLoadingService {
|
2022-09-09 14:32:15 +00:00
|
|
|
Future<void> loadAll(WidgetRef ref, {Coin? coin}) async {
|
2022-09-09 14:03:36 +00:00
|
|
|
try {
|
|
|
|
await Future.wait([
|
2022-09-09 14:32:15 +00:00
|
|
|
_loadFixedRateMarkets(ref, coin: coin),
|
|
|
|
_loadChangeNowStandardCurrencies(ref, coin: coin),
|
2022-09-09 14:03:36 +00:00
|
|
|
]);
|
|
|
|
} catch (e, s) {
|
|
|
|
Logging.instance.log("ChangeNowLoadingService.loadAll failed: $e\n$s",
|
|
|
|
level: LogLevel.Error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-09 14:32:15 +00:00
|
|
|
Future<void> _loadFixedRateMarkets(WidgetRef ref, {Coin? coin}) async {
|
2022-09-09 14:03:36 +00:00
|
|
|
if (ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state ==
|
|
|
|
ChangeNowLoadStatus.loading) {
|
|
|
|
// already in progress so just
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.loading;
|
|
|
|
|
|
|
|
final response3 =
|
|
|
|
await ref.read(changeNowProvider).getAvailableFixedRateMarkets();
|
|
|
|
if (response3.value != null) {
|
|
|
|
ref.read(fixedRateMarketPairsStateProvider.state).state =
|
|
|
|
response3.value!;
|
|
|
|
|
|
|
|
if (ref.read(fixedRateExchangeFormProvider).market == null) {
|
2022-09-09 14:32:15 +00:00
|
|
|
String fromTicker = "btc";
|
|
|
|
String toTicker = "xmr";
|
|
|
|
|
|
|
|
if (coin != null) {
|
|
|
|
fromTicker = coin.ticker.toLowerCase();
|
|
|
|
}
|
|
|
|
|
|
|
|
final matchingMarkets = response3.value!
|
|
|
|
.where((e) => e.to == toTicker && e.from == fromTicker);
|
2022-09-09 14:03:36 +00:00
|
|
|
if (matchingMarkets.isNotEmpty) {
|
|
|
|
await ref
|
|
|
|
.read(fixedRateExchangeFormProvider)
|
|
|
|
.updateMarket(matchingMarkets.first, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
|
|
|
"Failed to load changeNOW fixed rate markets: ${response3.exception?.errorMessage}",
|
|
|
|
level: LogLevel.Error);
|
|
|
|
|
|
|
|
ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.failed;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.success;
|
|
|
|
}
|
|
|
|
|
2022-09-09 14:32:15 +00:00
|
|
|
Future<void> _loadChangeNowStandardCurrencies(WidgetRef ref,
|
|
|
|
{Coin? coin}) async {
|
2022-09-09 14:03:36 +00:00
|
|
|
if (ref
|
|
|
|
.read(changeNowEstimatedInitialLoadStatusStateProvider.state)
|
|
|
|
.state ==
|
|
|
|
ChangeNowLoadStatus.loading) {
|
|
|
|
// already in progress so just
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.loading;
|
|
|
|
|
|
|
|
final response = await ref.read(changeNowProvider).getAvailableCurrencies();
|
|
|
|
final response2 =
|
|
|
|
await ref.read(changeNowProvider).getAvailableFloatingRatePairs();
|
|
|
|
if (response.value != null) {
|
|
|
|
ref.read(availableChangeNowCurrenciesStateProvider.state).state =
|
|
|
|
response.value!;
|
|
|
|
if (response2.value != null) {
|
|
|
|
ref.read(availableFloatingRatePairsStateProvider.state).state =
|
|
|
|
response2.value!;
|
|
|
|
|
2022-09-09 14:32:15 +00:00
|
|
|
String fromTicker = "btc";
|
|
|
|
String toTicker = "xmr";
|
|
|
|
|
|
|
|
if (coin != null) {
|
|
|
|
fromTicker = coin.ticker.toLowerCase();
|
|
|
|
}
|
|
|
|
|
2022-09-09 14:03:36 +00:00
|
|
|
if (response.value!.length > 1) {
|
|
|
|
if (ref.read(estimatedRateExchangeFormProvider).from == null) {
|
2022-09-09 14:32:15 +00:00
|
|
|
if (response.value!
|
|
|
|
.where((e) => e.ticker == fromTicker)
|
|
|
|
.isNotEmpty) {
|
2022-09-09 14:03:36 +00:00
|
|
|
await ref.read(estimatedRateExchangeFormProvider).updateFrom(
|
2022-09-09 14:32:15 +00:00
|
|
|
response.value!.firstWhere((e) => e.ticker == fromTicker),
|
|
|
|
false);
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ref.read(estimatedRateExchangeFormProvider).to == null) {
|
2022-09-09 14:32:15 +00:00
|
|
|
if (response.value!.where((e) => e.ticker == toTicker).isNotEmpty) {
|
2022-09-09 14:03:36 +00:00
|
|
|
await ref.read(estimatedRateExchangeFormProvider).updateTo(
|
2022-09-09 14:32:15 +00:00
|
|
|
response.value!.firstWhere((e) => e.ticker == toTicker),
|
|
|
|
false);
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
|
|
|
"Failed to load changeNOW available floating rate pairs: ${response2.exception?.errorMessage}",
|
|
|
|
level: LogLevel.Error);
|
|
|
|
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.failed;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
|
|
|
"Failed to load changeNOW currencies: ${response.exception?.errorMessage}",
|
|
|
|
level: LogLevel.Error);
|
|
|
|
await Future<void>.delayed(const Duration(seconds: 3));
|
|
|
|
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.failed;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
|
|
|
|
ChangeNowLoadStatus.success;
|
|
|
|
}
|
|
|
|
}
|