dev
dart 98 lines 2.66 KB
Raw
1 import 'dart:async';
2
3 import 'package:cake_wallet/di.dart';
4 import 'package:cake_wallet/main.dart';
5 import 'package:cake_wallet/reactions/bootstrap.dart';
6 import 'package:cake_wallet/routes.dart';
7 import 'package:cake_wallet/store/app_store.dart';
8 import 'package:cake_wallet/store/settings_store.dart';
9 import 'package:cake_wallet/utils/tor.dart';
10 import 'package:cw_core/utils/proxy_wrapper.dart';
11 import 'package:flutter/material.dart';
12 import 'package:mobx/mobx.dart';
13
14 part 'start_tor_view_model.g.dart';
15
16 class StartTorViewModel = StartTorViewModelBase with _$StartTorViewModel;
17
18 abstract class StartTorViewModelBase with Store {
19 StartTorViewModelBase() {
20 _startTimer();
21 }
22
23 Timer? _timer;
24 final int waitTimeInSeconds = 5;
25
26 @observable
27 bool isLoading = true;
28
29 @observable
30 bool timeoutReached = false;
31
32 @observable
33 late int remainingSeconds = waitTimeInSeconds;
34
35 @computed
36 bool get showOptions => timeoutReached;
37
38 @action
39 void _startTimer() {
40 remainingSeconds = waitTimeInSeconds;
41 _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
42 remainingSeconds -= 1;
43
44 if (remainingSeconds <= 0) {
45 timer.cancel();
46 timeoutReached = true;
47 }
48 });
49 }
50
51 @observable
52 bool didStartTor = false;
53
54 @action
55 Future<void> startTor(BuildContext context) async {
56 if (didStartTor) {
57 return;
58 }
59 await ensureTorStarted(context: null);
60 while (true) {
61 await Future.delayed(Duration(milliseconds: 250));
62 if (CakeTor.instance!.port != -1 && CakeTor.instance!.started) {
63 break;
64 }
65 }
66 didStartTor = true;
67 final appStore = getIt.get<AppStore>();
68 bootstrapOnline(navigatorKey, loadWallet: true);
69 appStore.wallet
70 ?.connectToNode(node: appStore.settingsStore.getCurrentNode(appStore.wallet!.type));
71 Navigator.pushReplacementNamed(context, Routes.login);
72 }
73
74 @action
75 void disableTor(BuildContext context) {
76 final settingsStore = getIt.get<SettingsStore>();
77 settingsStore.currentBuiltinTor = false;
78 bootstrapOnline(navigatorKey, loadWallet: true);
79 final appStore = getIt.get<AppStore>();
80 appStore.wallet
81 ?.connectToNode(node: appStore.settingsStore.getCurrentNode(appStore.wallet!.type));
82 Navigator.pushReplacementNamed(context, Routes.login);
83 }
84
85 @action
86 void ignoreAndLaunchApp(BuildContext context) {
87 bootstrapOnline(navigatorKey, loadWallet: true);
88 final appStore = getIt.get<AppStore>();
89 appStore.wallet
90 ?.connectToNode(node: appStore.settingsStore.getCurrentNode(appStore.wallet!.type));
91 Navigator.pushReplacementNamed(context, Routes.login);
92 }
93
94 void dispose() {
95 _timer?.cancel();
96 _timer = null;
97 }
98 }