2023-02-05 20:32:39 +00:00
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:isar/isar.dart';
|
|
|
|
import 'package:stackwallet/models/isar/exchange_cache/currency.dart';
|
|
|
|
import 'package:stackwallet/models/isar/exchange_cache/pair.dart';
|
|
|
|
import 'package:stackwallet/services/exchange/change_now/change_now_exchange.dart';
|
|
|
|
import 'package:stackwallet/services/exchange/majestic_bank/majestic_bank_exchange.dart';
|
2022-09-09 14:03:36 +00:00
|
|
|
import 'package:stackwallet/utilities/logger.dart';
|
2023-02-05 20:32:39 +00:00
|
|
|
import 'package:stackwallet/utilities/stack_file_system.dart';
|
2022-09-09 14:03:36 +00:00
|
|
|
|
2022-10-04 17:06:14 +00:00
|
|
|
class ExchangeDataLoadingService {
|
2023-02-05 20:32:39 +00:00
|
|
|
ExchangeDataLoadingService._();
|
|
|
|
static final ExchangeDataLoadingService _instance =
|
|
|
|
ExchangeDataLoadingService._();
|
|
|
|
static ExchangeDataLoadingService get instance => _instance;
|
|
|
|
|
|
|
|
Isar? _isar;
|
|
|
|
Isar get isar => _isar!;
|
|
|
|
|
|
|
|
Future<void> init() async {
|
|
|
|
if (_isar != null && isar.isOpen) return;
|
|
|
|
_isar = await Isar.open(
|
|
|
|
[
|
|
|
|
CurrencySchema,
|
|
|
|
PairSchema,
|
|
|
|
],
|
|
|
|
directory: (await StackFileSystem.applicationIsarDirectory()).path,
|
|
|
|
inspector: kDebugMode,
|
|
|
|
name: "exchange_cache",
|
|
|
|
);
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|
|
|
|
|
2023-02-05 20:32:39 +00:00
|
|
|
bool _locked = false;
|
|
|
|
|
|
|
|
Future<void> loadAll() async {
|
|
|
|
print("LOADINGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG: LOCKED=$_locked");
|
|
|
|
if (!_locked) {
|
|
|
|
_locked = true;
|
|
|
|
print("LOADINGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG");
|
|
|
|
final time = DateTime.now();
|
|
|
|
try {
|
|
|
|
await Future.wait([
|
2023-02-05 23:50:40 +00:00
|
|
|
_loadChangeNowCurrencies(),
|
|
|
|
_loadChangeNowFixedRatePairs(),
|
|
|
|
_loadChangeNowEstimatedRatePairs(),
|
2023-02-05 20:32:39 +00:00
|
|
|
// loadSimpleswapFixedRateCurrencies(ref),
|
|
|
|
// loadSimpleswapFloatingRateCurrencies(ref),
|
|
|
|
loadMajesticBankCurrencies(),
|
|
|
|
]);
|
|
|
|
|
|
|
|
print(
|
|
|
|
"LOADINGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG done in ${DateTime.now().difference(time).inSeconds} seconds");
|
|
|
|
} catch (e, s) {
|
|
|
|
Logging.instance.log(
|
|
|
|
"ExchangeDataLoadingService.loadAll failed: $e\n$s",
|
|
|
|
level: LogLevel.Error);
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|
2023-02-05 20:32:39 +00:00
|
|
|
_locked = false;
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
Future<void> _loadChangeNowCurrencies() async {
|
2023-02-05 20:32:39 +00:00
|
|
|
final exchange = ChangeNowExchange.instance;
|
2023-02-05 23:50:40 +00:00
|
|
|
final responseCurrencies = await exchange.getAllCurrencies(false);
|
2023-02-05 20:32:39 +00:00
|
|
|
if (responseCurrencies.value != null) {
|
2023-02-05 23:50:40 +00:00
|
|
|
await isar.writeTxn(() async {
|
|
|
|
final idsToDelete = await isar.currencies
|
|
|
|
.where()
|
|
|
|
.exchangeNameEqualTo(ChangeNowExchange.exchangeName)
|
|
|
|
.idProperty()
|
|
|
|
.findAll();
|
|
|
|
await isar.currencies.deleteAll(idsToDelete);
|
|
|
|
await isar.currencies.putAll(responseCurrencies.value!);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
|
|
|
"Failed to load changeNOW currencies: ${responseCurrencies.exception?.message}",
|
|
|
|
level: LogLevel.Error);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2022-09-09 14:03:36 +00:00
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
Future<void> _loadChangeNowFixedRatePairs() async {
|
|
|
|
final exchange = ChangeNowExchange.instance;
|
2023-02-05 20:32:39 +00:00
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
final responsePairs = await exchange.getAllPairs(true);
|
|
|
|
|
|
|
|
if (responsePairs.value != null) {
|
|
|
|
await isar.writeTxn(() async {
|
|
|
|
final idsToDelete2 = await isar.pairs
|
|
|
|
.where()
|
|
|
|
.exchangeNameEqualTo(ChangeNowExchange.exchangeName)
|
|
|
|
.filter()
|
2023-02-06 15:23:31 +00:00
|
|
|
.rateTypeEqualTo(SupportedRateType.fixed)
|
2023-02-05 23:50:40 +00:00
|
|
|
.idProperty()
|
|
|
|
.findAll();
|
|
|
|
await isar.pairs.deleteAll(idsToDelete2);
|
|
|
|
await isar.pairs.putAll(responsePairs.value!);
|
|
|
|
});
|
2022-09-09 14:03:36 +00:00
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
2023-02-05 23:50:40 +00:00
|
|
|
"Failed to load changeNOW available fixed rate pairs: ${responsePairs.exception?.message}",
|
2022-09-09 14:03:36 +00:00
|
|
|
level: LogLevel.Error);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2022-10-04 17:06:14 +00:00
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
Future<void> _loadChangeNowEstimatedRatePairs() async {
|
2023-02-05 20:32:39 +00:00
|
|
|
final exchange = ChangeNowExchange.instance;
|
2022-10-04 17:06:14 +00:00
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
final responsePairs = await exchange.getAllPairs(false);
|
2023-02-05 20:32:39 +00:00
|
|
|
|
2023-02-05 23:50:40 +00:00
|
|
|
if (responsePairs.value != null) {
|
|
|
|
await isar.writeTxn(() async {
|
|
|
|
final idsToDelete = await isar.pairs
|
|
|
|
.where()
|
|
|
|
.exchangeNameEqualTo(ChangeNowExchange.exchangeName)
|
|
|
|
.filter()
|
2023-02-06 15:23:31 +00:00
|
|
|
.rateTypeEqualTo(SupportedRateType.estimated)
|
2023-02-05 23:50:40 +00:00
|
|
|
.idProperty()
|
|
|
|
.findAll();
|
|
|
|
await isar.pairs.deleteAll(idsToDelete);
|
|
|
|
await isar.pairs.putAll(responsePairs.value!);
|
|
|
|
});
|
2022-10-04 17:06:14 +00:00
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
2023-02-05 23:50:40 +00:00
|
|
|
"Failed to load changeNOW available floating rate pairs: ${responsePairs.exception?.message}",
|
2023-02-05 20:32:39 +00:00
|
|
|
level: LogLevel.Error);
|
|
|
|
return;
|
2022-10-04 17:06:14 +00:00
|
|
|
}
|
|
|
|
}
|
2023-02-05 20:32:39 +00:00
|
|
|
//
|
|
|
|
// Future<void> loadSimpleswapFloatingRateCurrencies(WidgetRef ref) async {
|
|
|
|
// final exchange = SimpleSwapExchange();
|
|
|
|
// final responseCurrencies = await exchange.getAllCurrencies(false);
|
|
|
|
//
|
|
|
|
// if (responseCurrencies.value != null) {
|
|
|
|
// ref
|
|
|
|
// .read(availableSimpleswapCurrenciesProvider)
|
|
|
|
// .updateFloatingCurrencies(responseCurrencies.value!);
|
|
|
|
//
|
|
|
|
// final responsePairs = await exchange.getAllPairs(false);
|
|
|
|
//
|
|
|
|
// if (responsePairs.value != null) {
|
|
|
|
// ref
|
|
|
|
// .read(availableSimpleswapCurrenciesProvider)
|
|
|
|
// .updateFloatingPairs(responsePairs.value!);
|
|
|
|
// } else {
|
|
|
|
// Logging.instance.log(
|
|
|
|
// "loadSimpleswapFloatingRateCurrencies: $responsePairs",
|
|
|
|
// level: LogLevel.Warning,
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// Logging.instance.log(
|
|
|
|
// "loadSimpleswapFloatingRateCurrencies: $responseCurrencies",
|
|
|
|
// level: LogLevel.Warning,
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// Future<void> loadSimpleswapFixedRateCurrencies(WidgetRef ref) async {
|
|
|
|
// final exchange = SimpleSwapExchange();
|
|
|
|
// final responseCurrencies = await exchange.getAllCurrencies(true);
|
|
|
|
//
|
|
|
|
// if (responseCurrencies.value != null) {
|
|
|
|
// ref
|
|
|
|
// .read(availableSimpleswapCurrenciesProvider)
|
|
|
|
// .updateFixedCurrencies(responseCurrencies.value!);
|
|
|
|
//
|
|
|
|
// final responsePairs = await exchange.getAllPairs(true);
|
|
|
|
//
|
|
|
|
// if (responsePairs.value != null) {
|
|
|
|
// ref
|
|
|
|
// .read(availableSimpleswapCurrenciesProvider)
|
|
|
|
// .updateFixedPairs(responsePairs.value!);
|
|
|
|
// } else {
|
|
|
|
// Logging.instance.log(
|
|
|
|
// "loadSimpleswapFixedRateCurrencies: $responsePairs",
|
|
|
|
// level: LogLevel.Warning,
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// Logging.instance.log(
|
|
|
|
// "loadSimpleswapFixedRateCurrencies: $responseCurrencies",
|
|
|
|
// level: LogLevel.Warning,
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
Future<void> loadMajesticBankCurrencies() async {
|
|
|
|
final exchange = MajesticBankExchange.instance;
|
|
|
|
final responseCurrencies = await exchange.getAllCurrencies(false);
|
2022-10-04 17:06:14 +00:00
|
|
|
|
|
|
|
if (responseCurrencies.value != null) {
|
2023-02-05 20:32:39 +00:00
|
|
|
final responsePairs = await exchange.getAllPairs(false);
|
2022-10-04 17:06:14 +00:00
|
|
|
if (responsePairs.value != null) {
|
2023-02-05 20:32:39 +00:00
|
|
|
await isar.writeTxn(() async {
|
|
|
|
final idsToDelete = await isar.currencies
|
|
|
|
.where()
|
|
|
|
.exchangeNameEqualTo(MajesticBankExchange.exchangeName)
|
|
|
|
.idProperty()
|
|
|
|
.findAll();
|
|
|
|
await isar.currencies.deleteAll(idsToDelete);
|
|
|
|
await isar.currencies.putAll(responseCurrencies.value!);
|
|
|
|
|
|
|
|
final idsToDelete2 = await isar.pairs
|
|
|
|
.where()
|
|
|
|
.exchangeNameEqualTo(MajesticBankExchange.exchangeName)
|
|
|
|
.idProperty()
|
|
|
|
.findAll();
|
|
|
|
await isar.pairs.deleteAll(idsToDelete2);
|
|
|
|
await isar.pairs.putAll(responsePairs.value!);
|
|
|
|
});
|
2022-10-04 17:06:14 +00:00
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
2023-02-05 20:32:39 +00:00
|
|
|
"loadMajesticBankCurrencies: $responsePairs",
|
2022-10-04 17:06:14 +00:00
|
|
|
level: LogLevel.Warning,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Logging.instance.log(
|
2023-02-05 20:32:39 +00:00
|
|
|
"loadMajesticBankCurrencies: $responseCurrencies",
|
2022-10-04 17:06:14 +00:00
|
|
|
level: LogLevel.Warning,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2022-09-09 14:03:36 +00:00
|
|
|
}
|