From 0ef8524f5273089b7908017574d912172f04a83c Mon Sep 17 00:00:00 2001
From: fosse <matt.cfosse@gmail.com>
Date: Fri, 26 Jan 2024 19:37:21 -0500
Subject: [PATCH] potential fixes

---
 cw_core/lib/node.dart                       | 21 +++++++--------------
 lib/view_model/settings/tor_view_model.dart | 19 ++++++++++---------
 2 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/cw_core/lib/node.dart b/cw_core/lib/node.dart
index d7f37e4af..4c5b107a7 100644
--- a/cw_core/lib/node.dart
+++ b/cw_core/lib/node.dart
@@ -62,7 +62,7 @@ class Node extends HiveObject with Keyable {
 
   @HiveField(6)
   String? socksProxyAddress;
-  
+
   bool get isSSL => useSSL ?? false;
 
   bool get useSocksProxy => socksProxyAddress == null ? false : socksProxyAddress!.isNotEmpty;
@@ -159,9 +159,6 @@ class Node extends HiveObject with Keyable {
   }
 
   Future<bool> requestMoneroNode() async {
-    if (uri.toString().contains(".onion") || useSocksProxy) {
-      return await requestNodeWithProxy();
-    }
     final path = '/json_rpc';
     final rpcUri = isSSL ? Uri.https(uri.authority, path) : Uri.http(uri.authority, path);
     final realm = 'monero-rpc';
@@ -179,17 +176,13 @@ class Node extends HiveObject with Keyable {
         HttpClientDigestCredentials(login ?? '', password ?? ''),
       );
 
-      final http.Client client = ioc.IOClient(authenticatingClient);
+      final request = await authenticatingClient.postUrl(rpcUri);
+      request.headers.add("'Content-Type'", "application/json");
+      request.add(utf8.encode(json.encode(body)));
+      final response = await request.close();
+      final responseBody = await utf8.decodeStream(response);
 
-      final response = await client.post(
-        rpcUri,
-        headers: {'Content-Type': 'application/json'},
-        body: json.encode(body),
-      );
-
-      client.close();
-
-      final resBody = json.decode(response.body) as Map<String, dynamic>;
+      final resBody = json.decode(responseBody) as Map<String, dynamic>;
       return !(resBody['result']['offline'] as bool);
     } catch (_) {
       return false;
diff --git a/lib/view_model/settings/tor_view_model.dart b/lib/view_model/settings/tor_view_model.dart
index bf477ff45..1035c542f 100644
--- a/lib/view_model/settings/tor_view_model.dart
+++ b/lib/view_model/settings/tor_view_model.dart
@@ -27,6 +27,8 @@ abstract class TorViewModelBase with Store {
     });
   }
 
+  bool torStarted = false;
+
   final SettingsStore _settingsStore;
 
   @action
@@ -54,10 +56,11 @@ abstract class TorViewModelBase with Store {
       }
 
       bool torOnly = _settingsStore.torConnectionMode == TorConnectionMode.torOnly;
-      if ([WalletType.bitcoin, WalletType.litecoin, WalletType.bitcoinCash].contains(appStore.wallet!.type)) {
+      if ([WalletType.bitcoin, WalletType.litecoin, WalletType.bitcoinCash]
+          .contains(appStore.wallet!.type)) {
         bitcoin!.setTorOnly(appStore.wallet!, torOnly);
       }
-      
+
       await appStore.wallet!.connectToNode(node: node);
     }
   }
@@ -67,17 +70,13 @@ abstract class TorViewModelBase with Store {
     try {
       torConnectionStatus = TorConnectionStatus.connecting;
 
-      await Tor.init();
-
-      // start only if not already running:
-      if (Tor.instance.port == -1) {
-        await Tor.instance.enable();
+      if (!torStarted) {
+        torStarted = true;
+        await Tor.init();
       }
 
       _settingsStore.shouldStartTorOnLaunch = true;
 
-      torConnectionStatus = TorConnectionStatus.connected;
-
       SocksTCPClient.setProxy(proxies: [
         ProxySettings(
           InternetAddress.loopbackIPv4,
@@ -86,6 +85,8 @@ abstract class TorViewModelBase with Store {
         ),
       ]);
 
+      torConnectionStatus = TorConnectionStatus.connected;
+
       // connect to node through the proxy:
       await connectOrDisconnectNodeToProxy(connect: true);
     } catch (e) {