From 3006c71fca7fe316b11c8e2b756622d1b0a751c7 Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Mon, 18 Mar 2024 09:25:48 +0100 Subject: [PATCH 1/3] chore: Wait for current context to get available when showing recover dlc dialog --- mobile/lib/common/recover_dlc_change_notifier.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mobile/lib/common/recover_dlc_change_notifier.dart b/mobile/lib/common/recover_dlc_change_notifier.dart index ffede81d2..471f88c0d 100644 --- a/mobile/lib/common/recover_dlc_change_notifier.dart +++ b/mobile/lib/common/recover_dlc_change_notifier.dart @@ -11,7 +11,7 @@ class RecoverDlcChangeNotifier extends ChangeNotifier implements Subscriber { late TaskStatus taskStatus; @override - void notify(bridge.Event event) { + void notify(bridge.Event event) async { if (event is bridge.Event_BackgroundNotification) { if (event.field0 is! bridge.BackgroundTask_RecoverDlc) { // ignoring other kinds of background tasks @@ -23,6 +23,9 @@ class RecoverDlcChangeNotifier extends ChangeNotifier implements Subscriber { taskStatus = recoverDlc.taskStatus; if (taskStatus == TaskStatus.pending) { + while (shellNavigatorKey.currentContext == null) { + await Future.delayed(const Duration(milliseconds: 100)); // Adjust delay as needed + } // initialize dialog for the pending task showDialog( context: shellNavigatorKey.currentContext!, From 682a024ed1b40e3be163e21b2ce2eb79a6cc355e Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Mon, 18 Mar 2024 09:26:11 +0100 Subject: [PATCH 2/3] chore: Publish recover dlc success on finished renew protocol --- mobile/native/src/ln_dlc/node.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mobile/native/src/ln_dlc/node.rs b/mobile/native/src/ln_dlc/node.rs index bc464b659..a678a7283 100644 --- a/mobile/native/src/ln_dlc/node.rs +++ b/mobile/native/src/ln_dlc/node.rs @@ -295,6 +295,11 @@ impl Node { expiry_timestamp, ) .context("Failed to update position after DLC creation")?; + + // In case of a restart. + event::publish(&EventInternal::BackgroundNotification( + BackgroundTask::RecoverDlc(TaskStatus::Success), + )); } // If there is no order in `Filling` we must be rolling over. None => { From 169ad6b5c9de22d8a1f4af9783095d71805b59fb Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Mon, 18 Mar 2024 09:27:25 +0100 Subject: [PATCH 3/3] fix: Check if pending order is not null MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the app was closed when an order got filled, the pending order is not set anymore. This fixes ``` flutter: [INFO] TIME: 2024-03-18T08:02:02.796655Z r: Updated order state new_state: Filled,order_id: 95a65da8-fe2e-48ab-847d-dab47dac7b49 [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Null check operator used on a null value #0 SubmitOrderChangeNotifier.notify (package:get_10101/features/trade/submit_order_change_notifier.dart:105:24) #1 new EventService.create. (package:get_10101/common/application/event_service.dart:21:20) #2 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10) #3 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) #4 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) #5 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19) #6 _StreamController._add (dart:async/stream_controller.dart:658:7) #7 _StreamController.add (dart:async/stream_controller.dart:606:5) #8 _AsyncStarStreamController.add (dart:async-patch/async_patch.dart:76:16) #9 FlutterRustBridgeBase.executeStream (package:flutter_rust_bridge/src/basic.dart) #10 ne<…> ``` --- .../trade/submit_order_change_notifier.dart | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/mobile/lib/features/trade/submit_order_change_notifier.dart b/mobile/lib/features/trade/submit_order_change_notifier.dart index 446c88659..17a6984f3 100644 --- a/mobile/lib/features/trade/submit_order_change_notifier.dart +++ b/mobile/lib/features/trade/submit_order_change_notifier.dart @@ -97,21 +97,23 @@ class SubmitOrderChangeNotifier extends ChangeNotifier implements Subscriber { if (event is bridge.Event_OrderUpdateNotification) { Order order = Order.fromApi(event.field0); - switch (order.state) { - case OrderState.open: - case OrderState.filling: - return; - case OrderState.filled: - _pendingOrder!.state = PendingOrderState.orderFilled; - break; - case OrderState.failed: - case OrderState.rejected: - _pendingOrder!.state = PendingOrderState.orderFailed; - break; + if (pendingOrder != null) { + switch (order.state) { + case OrderState.open: + case OrderState.filling: + return; + case OrderState.filled: + _pendingOrder!.state = PendingOrderState.orderFilled; + break; + case OrderState.failed: + case OrderState.rejected: + _pendingOrder!.state = PendingOrderState.orderFailed; + break; + } + _pendingOrder!.failureReason = order.failureReason; + + notifyListeners(); } - _pendingOrder!.failureReason = order.failureReason; - - notifyListeners(); } else { logger.w("Received unexpected event: ${event.toString()}"); }