Update BreezSDKLiquid (#406)

* Convert BreezSDKLiquid into a singleton
* Sync wallet after each SDK event
This commit is contained in:
Erdem Yerebasmaz
2024-07-23 17:01:43 +03:00
committed by GitHub
parent a8613eca49
commit cc6adeab7f
4 changed files with 57 additions and 31 deletions

View File

@@ -4,26 +4,45 @@ import 'package:flutter_breez_liquid/flutter_breez_liquid.dart' as liquid_sdk;
import 'package:rxdart/rxdart.dart';
class BreezSDKLiquid {
liquid_sdk.BindingLiquidSdk? instance;
static final BreezSDKLiquid _singleton = BreezSDKLiquid._internal();
Future<liquid_sdk.BindingLiquidSdk> connect({
factory BreezSDKLiquid() => _singleton;
BreezSDKLiquid._internal() {
initializeLogStream();
}
liquid_sdk.BindingLiquidSdk? _instance;
liquid_sdk.BindingLiquidSdk? get instance => _instance;
Future<void> connect({
required liquid_sdk.ConnectRequest req,
}) async {
instance = await liquid_sdk.connect(req: req);
_initializeEventsStream(instance!);
_subscribeToSdkStreams(instance!);
await _fetchWalletData(instance!);
return instance!;
try {
_instance = await liquid_sdk.connect(req: req);
_initializeEventsStream(_instance!);
_subscribeToSdkStreams(_instance!);
await _fetchWalletData(_instance!);
} catch (e) {
_instance = null;
rethrow;
}
}
void disconnect(liquid_sdk.BindingLiquidSdk sdk) {
sdk.disconnect();
void disconnect() {
if (_instance == null) {
throw Exception();
}
_instance!.disconnect();
_unsubscribeFromSdkStreams();
_instance = null;
}
Future _fetchWalletData(liquid_sdk.BindingLiquidSdk sdk) async {
Future<void> _fetchWalletData(liquid_sdk.BindingLiquidSdk sdk) async {
await _getInfo(sdk);
await _listPayments(sdk: sdk, req: const liquid_sdk.ListPaymentsRequest());
await _listPayments(sdk: sdk);
}
Future<liquid_sdk.GetInfoResponse> _getInfo(liquid_sdk.BindingLiquidSdk sdk) async {
@@ -34,8 +53,8 @@ class BreezSDKLiquid {
Future<List<liquid_sdk.Payment>> _listPayments({
required liquid_sdk.BindingLiquidSdk sdk,
required liquid_sdk.ListPaymentsRequest req,
}) async {
const req = liquid_sdk.ListPaymentsRequest();
final paymentsList = await sdk.listPayments(req: req);
_paymentsController.add(paymentsList);
return paymentsList;
@@ -86,40 +105,45 @@ class BreezSDKLiquid {
_breezEventsSubscription = _breezEventsStream?.listen(
(event) async {
if (event is liquid_sdk.SdkEvent_PaymentFailed) {
_logStreamController
.add(liquid_sdk.LogEntry(line: "Payment Failed. ${event.details.swapId}", level: "WARN"));
_logStreamController.add(
liquid_sdk.LogEntry(line: "Payment Failed. ${event.details.swapId}", level: "WARN"),
);
_paymentResultStream.addError(PaymentException(event.details));
}
if (event is liquid_sdk.SdkEvent_PaymentPending) {
_logStreamController
.add(liquid_sdk.LogEntry(line: "Payment Pending. ${event.details.swapId}", level: "INFO"));
_logStreamController.add(
liquid_sdk.LogEntry(line: "Payment Pending. ${event.details.swapId}", level: "INFO"),
);
_paymentResultStream.add(event.details);
}
if (event is liquid_sdk.SdkEvent_PaymentRefunded) {
_logStreamController
.add(liquid_sdk.LogEntry(line: "Payment Refunded. ${event.details.swapId}", level: "INFO"));
_logStreamController.add(
liquid_sdk.LogEntry(line: "Payment Refunded. ${event.details.swapId}", level: "INFO"),
);
_paymentResultStream.add(event.details);
}
if (event is liquid_sdk.SdkEvent_PaymentRefundPending) {
_logStreamController.add(
liquid_sdk.LogEntry(line: "Pending Payment Refund. ${event.details.swapId}", level: "INFO"));
liquid_sdk.LogEntry(line: "Pending Payment Refund. ${event.details.swapId}", level: "INFO"),
);
_paymentResultStream.add(event.details);
}
if (event is liquid_sdk.SdkEvent_PaymentSucceeded) {
_logStreamController
.add(liquid_sdk.LogEntry(line: "Payment Succeeded. ${event.details.swapId}", level: "INFO"));
_logStreamController.add(
liquid_sdk.LogEntry(line: "Payment Succeeded. ${event.details.swapId}", level: "INFO"),
);
_paymentResultStream.add(event.details);
await _fetchWalletData(sdk);
}
if (event is liquid_sdk.SdkEvent_PaymentWaitingConfirmation) {
_logStreamController.add(liquid_sdk.LogEntry(
line: "Payment Waiting Confirmation. ${event.details.swapId}", level: "INFO"));
_logStreamController.add(
liquid_sdk.LogEntry(line: "Payment Waiting Confirmation. ${event.details.swapId}", level: "INFO"),
);
_paymentResultStream.add(event.details);
}
if (event is liquid_sdk.SdkEvent_Synced) {
_logStreamController.add(const liquid_sdk.LogEntry(line: "Received Synced event.", level: "INFO"));
await _fetchWalletData(sdk);
}
await _fetchWalletData(sdk);
},
);
}