lots of fixes

This commit is contained in:
Matthew Fosse 2024-01-04 15:08:27 -05:00
parent 22e681a1b8
commit 2633f1e06f
7 changed files with 57 additions and 49 deletions

View file

@ -6,6 +6,7 @@ import 'package:cake_wallet/entities/preferences_key.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/view_model/settings/tor_connection.dart';
import 'package:cake_wallet/view_model/settings/tor_view_model.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart';
@ -18,12 +19,14 @@ class WalletLoadingService {
this.keyService,
this.walletServiceFactory,
this.settingsStore,
this.torViewModel,
);
final SharedPreferences sharedPreferences;
final KeyService keyService;
final WalletService Function(WalletType type) walletServiceFactory;
final SettingsStore settingsStore;
final TorViewModel torViewModel;
Future<void> renameWallet(WalletType type, String name, String newName) async {
final walletService = walletServiceFactory.call(type);
@ -55,13 +58,9 @@ class WalletLoadingService {
await updateMoneroWalletPassword(wallet);
}
final mode = settingsStore.torConnectionMode;
if (mode == TorConnectionMode.enabled || mode == TorConnectionMode.onionOnly && (Tor.instance.port != -1)) {
final node = settingsStore.getCurrentNode(wallet.type);
if (node.socksProxyAddress?.isEmpty ?? true) {
node.socksProxyAddress = "${InternetAddress.loopbackIPv4.address}:${Tor.instance.port}";
}
wallet.connectToNode(node: node);
final status = torViewModel.torConnectionStatus;
if (status == TorConnectionStatus.connected) {
await torViewModel.startTor();
}
return wallet;

View file

@ -296,12 +296,6 @@ Future<void> setup({
: ThemeList.darkTheme,
);
if (DeviceInfo.instance.isMobile && settingsStore.shouldStartTorOnLaunch) {
await Tor.init();
await Tor.instance.enable();
await Tor.instance.start();
}
if (_isSetupFinished) {
return;
}
@ -358,6 +352,7 @@ Future<void> setup({
getIt.get<KeyService>(),
(WalletType type) => getIt.get<WalletService>(param1: type),
getIt.get<SettingsStore>(),
getIt.get<TorViewModel>(),
));
getIt.registerFactoryParam<WalletNewVM, WalletType, void>((type, _) => WalletNewVM(
@ -730,7 +725,11 @@ Future<void> setup({
getIt.registerFactory(() => TrocadorProvidersViewModel(getIt.get<SettingsStore>()));
getIt.registerFactory(() => TorViewModel(getIt.get<SettingsStore>()));
getIt.registerSingleton(TorViewModel(getIt.get<SettingsStore>()));
if (DeviceInfo.instance.isMobile && settingsStore.shouldStartTorOnLaunch) {
getIt.get<TorViewModel>().startTor();
}
getIt.registerFactory(() {
return OtherSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!);

View file

@ -17,6 +17,7 @@ import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/yat_emoji_id.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/settings/tor_view_model.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
import 'package:cake_wallet/src/screens/base_page.dart';

View file

@ -11,6 +11,7 @@ import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator.dart';
import 'package:cake_wallet/src/screens/wallet_connect/widgets/modals/bottom_sheet_listener.dart';
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
import 'package:cake_wallet/view_model/dashboard/desktop_sidebar_view_model.dart';
import 'package:cake_wallet/view_model/settings/tor_view_model.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';

View file

@ -1,4 +1,3 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/palette.dart';

View file

@ -320,25 +320,6 @@ abstract class SettingsStoreBase with Store {
reaction((_) => torConnectionMode, (TorConnectionMode mode) async {
await sharedPreferences.setInt(PreferencesKey.currentTorConnectionModeKey, mode.serialize());
if (mode == TorConnectionMode.enabled || mode == TorConnectionMode.onionOnly) {
// init and start the proxy
await Tor.init();
await Tor.instance.enable();
// connect to node through the proxy:
final appStore = getIt.get<AppStore>();
final node = getCurrentNode(appStore.wallet!.type);
if (node.socksProxyAddress?.isEmpty ?? true) {
node.socksProxyAddress = "${InternetAddress.loopbackIPv4.address}:${Tor.instance.port}";
}
appStore.wallet!.connectToNode(node: node);
shouldStartTorOnLaunch = true;
} else {
Tor.instance.disable();
shouldStartTorOnLaunch = false;
}
});
reaction((_) => shouldStartTorOnLaunch,

View file

@ -1,3 +1,7 @@
import 'dart:io';
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/view_model/settings/tor_connection.dart';
import 'package:mobx/mobx.dart';
@ -10,7 +14,15 @@ class TorViewModel = TorViewModelBase with _$TorViewModel;
enum TorConnectionStatus { connecting, connected, disconnected }
abstract class TorViewModelBase with Store {
TorViewModelBase(this._settingsStore);
TorViewModelBase(this._settingsStore) {
reaction((_) => torConnectionMode, (TorConnectionMode mode) async {
if (mode == TorConnectionMode.enabled || mode == TorConnectionMode.onionOnly) {
startTor();
} else {
stopTor();
}
});
}
final SettingsStore _settingsStore;
@ -22,25 +34,41 @@ abstract class TorViewModelBase with Store {
@computed
TorConnectionMode get torConnectionMode => _settingsStore.torConnectionMode;
@observable
TorConnectionStatus torConnectionStatus = TorConnectionStatus.disconnected;
@action
void setTorConnectionMode(TorConnectionMode mode) => _settingsStore.torConnectionMode = mode;
@computed
TorConnectionStatus get torConnectionStatus {
@action
Future<void> startTor() async {
try {
torConnectionStatus = TorConnectionStatus.connecting;
await Tor.init();
await Tor.instance.enable();
if (_settingsStore.torConnectionMode == TorConnectionMode.disabled) {
return TorConnectionStatus.disconnected;
}
if (Tor.instance.port == -1 && Tor.instance.started) {
return TorConnectionStatus.connecting;
}
_settingsStore.shouldStartTorOnLaunch = true;
if (Tor.instance.port != -1) {
return TorConnectionStatus.connected;
}
torConnectionStatus = TorConnectionStatus.connected;
return TorConnectionStatus.disconnected;
// connect to node through the proxy:
final appStore = getIt.get<AppStore>();
if (appStore.wallet != null) {
final node = _settingsStore.getCurrentNode(appStore.wallet!.type);
if (node.socksProxyAddress?.isEmpty ?? true) {
node.socksProxyAddress = "${InternetAddress.loopbackIPv4.address}:${Tor.instance.port}";
}
appStore.wallet!.connectToNode(node: node);
}
} catch (e) {
torConnectionStatus = TorConnectionStatus.disconnected;
}
}
@action
Future<void> stopTor() async {
Tor.instance.disable();
_settingsStore.shouldStartTorOnLaunch = false;
torConnectionStatus = TorConnectionStatus.disconnected;
}
}