From a3aebbdb78efed727b7e254b3311ef7231767855 Mon Sep 17 00:00:00 2001 From: Hector Chu <hectorchu@gmail.com> Date: Sun, 21 Apr 2024 12:19:44 +0100 Subject: [PATCH] Sync status --- cw_bitcoin/lib/litecoin_wallet.dart | 18 +++++++++++++++--- cw_mweb/.gitignore | 1 - cw_mweb/android/.gitignore | 1 + .../kotlin/com/cakewallet/mweb/CwMwebPlugin.kt | 7 +------ cw_mweb/lib/cw_mweb.dart | 13 +++++++------ cw_mweb/lib/cw_mweb_method_channel.dart | 4 ++-- cw_mweb/lib/cw_mweb_platform_interface.dart | 2 +- 7 files changed, 27 insertions(+), 19 deletions(-) diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart index f218ddd5d..628391eed 100644 --- a/cw_bitcoin/lib/litecoin_wallet.dart +++ b/cw_bitcoin/lib/litecoin_wallet.dart @@ -3,6 +3,7 @@ import 'package:bitcoin_base/bitcoin_base.dart'; import 'package:cw_bitcoin/bitcoin_mnemonic.dart'; import 'package:cw_bitcoin/bitcoin_transaction_priority.dart'; import 'package:cw_core/crypto_currency.dart'; +import 'package:cw_core/sync_status.dart'; import 'package:cw_core/unspent_coins_info.dart'; import 'package:cw_bitcoin/litecoin_wallet_addresses.dart'; import 'package:cw_core/transaction_priority.dart'; @@ -109,12 +110,23 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store { @action @override Future<void> startSync() async { - super.startSync(); + await super.startSync(); final stub = CwMweb.stub(); Timer.periodic( - const Duration(seconds: 1), (timer) async { + const Duration(milliseconds: 1500), (timer) async { + final height = await electrumClient.getCurrentBlockChainTip() ?? 0; final resp = await stub.status(StatusRequest()); - print(resp.blockHeaderHeight); + if (resp.blockHeaderHeight < height) { + int h = resp.blockHeaderHeight; + syncStatus = SyncingSyncStatus(height - h, h / height); + } else if (resp.mwebHeaderHeight < height) { + int h = resp.mwebHeaderHeight; + syncStatus = SyncingSyncStatus(height - h, h / height); + } else if (resp.mwebUtxosHeight < height) { + syncStatus = SyncingSyncStatus(1, 0.999); + } else { + syncStatus = SyncedSyncStatus(); + } }); } diff --git a/cw_mweb/.gitignore b/cw_mweb/.gitignore index 8959f5d70..96486fd93 100644 --- a/cw_mweb/.gitignore +++ b/cw_mweb/.gitignore @@ -28,4 +28,3 @@ migrate_working_dir/ .dart_tool/ .packages build/ -libs/ diff --git a/cw_mweb/android/.gitignore b/cw_mweb/android/.gitignore index 161bdcdaf..881f3d95c 100644 --- a/cw_mweb/android/.gitignore +++ b/cw_mweb/android/.gitignore @@ -6,4 +6,5 @@ .DS_Store /build /captures +/libs .cxx diff --git a/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt b/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt index 394b607ab..cf194417b 100644 --- a/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt +++ b/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt @@ -17,7 +17,6 @@ class CwMwebPlugin: FlutterPlugin, MethodCallHandler { /// This local reference serves to register the plugin with the Flutter Engine and unregister it /// when the Flutter Engine is detached from the Activity private lateinit var channel : MethodChannel - private var started = false override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { channel = MethodChannel(flutterPluginBinding.binaryMessenger, "cw_mweb") @@ -26,12 +25,8 @@ class CwMwebPlugin: FlutterPlugin, MethodCallHandler { override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { if (call.method == "start") { - if (started) return val dataDir = call.argument("dataDir") ?: "" - val server = Mwebd.newServer("mainnet", dataDir, "") - server.start(12345, true) - started = true - result.success(true) + result.success(Mwebd.newServer("", dataDir, "").start(0)) } else { result.notImplemented() } diff --git a/cw_mweb/lib/cw_mweb.dart b/cw_mweb/lib/cw_mweb.dart index e73887aaf..fb3960ab0 100644 --- a/cw_mweb/lib/cw_mweb.dart +++ b/cw_mweb/lib/cw_mweb.dart @@ -3,15 +3,16 @@ import 'cw_mweb_platform_interface.dart'; import 'mwebd.pbgrpc.dart'; class CwMweb { - static Future<bool?> start(String dataDir) { - return CwMwebPlatform.instance.start(dataDir); + static var port; + + static start(String dataDir) async { + port = port ?? await CwMwebPlatform.instance.start(dataDir); } static stub() { - final channel = ClientChannel('127.0.0.1', - port: 12345, + return RpcClient(ClientChannel('127.0.0.1', + port: port, options: const ChannelOptions( - credentials: ChannelCredentials.insecure())); - return RpcClient(channel); + credentials: ChannelCredentials.insecure()))); } } diff --git a/cw_mweb/lib/cw_mweb_method_channel.dart b/cw_mweb/lib/cw_mweb_method_channel.dart index 112dcfaa7..cc880c6df 100644 --- a/cw_mweb/lib/cw_mweb_method_channel.dart +++ b/cw_mweb/lib/cw_mweb_method_channel.dart @@ -10,8 +10,8 @@ class MethodChannelCwMweb extends CwMwebPlatform { final methodChannel = const MethodChannel('cw_mweb'); @override - Future<bool?> start(String dataDir) async { - final result = await methodChannel.invokeMethod<bool>('start', {'dataDir': dataDir}); + Future<int?> start(String dataDir) async { + final result = await methodChannel.invokeMethod<int>('start', {'dataDir': dataDir}); return result; } } diff --git a/cw_mweb/lib/cw_mweb_platform_interface.dart b/cw_mweb/lib/cw_mweb_platform_interface.dart index ce518402f..974e07284 100644 --- a/cw_mweb/lib/cw_mweb_platform_interface.dart +++ b/cw_mweb/lib/cw_mweb_platform_interface.dart @@ -23,7 +23,7 @@ abstract class CwMwebPlatform extends PlatformInterface { _instance = instance; } - Future<bool?> start(String dataDir) { + Future<int?> start(String dataDir) { throw UnimplementedError('start() has not been implemented.'); } }