mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-02-03 03:36:39 +00:00
lots of fixes
This commit is contained in:
parent
22e681a1b8
commit
2633f1e06f
7 changed files with 57 additions and 49 deletions
|
@ -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;
|
||||
|
|
13
lib/di.dart
13
lib/di.dart
|
@ -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!);
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:cake_wallet/generated/i18n.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:cake_wallet/palette.dart';
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue