| 1 | import 'dart:io'; |
| 2 | |
| 3 | import 'package:cake_wallet/bitcoin/bitcoin.dart'; |
| 4 | import 'package:cake_wallet/store/settings_store.dart'; |
| 5 | import 'package:cake_wallet/utils/exception_handler.dart'; |
| 6 | import 'package:cw_core/root_dir.dart'; |
| 7 | import 'package:cw_core/utils/print_verbose.dart'; |
| 8 | import 'package:cw_core/wallet_base.dart'; |
| 9 | import 'package:flutter/widgets.dart'; |
| 10 | import 'package:mobx/mobx.dart'; |
| 11 | import 'package:path_provider/path_provider.dart'; |
| 12 | |
| 13 | part 'mweb_settings_view_model.g.dart'; |
| 14 | |
| 15 | class MwebSettingsViewModel = MwebSettingsViewModelBase with _$MwebSettingsViewModel; |
| 16 | |
| 17 | abstract class MwebSettingsViewModelBase with Store { |
| 18 | MwebSettingsViewModelBase(this._settingsStore, this._wallet) { |
| 19 | mwebEnabled = bitcoin!.getMwebEnabled(_wallet); |
| 20 | _settingsStore.mwebAlwaysScan = mwebEnabled; |
| 21 | } |
| 22 | |
| 23 | final SettingsStore _settingsStore; |
| 24 | final WalletBase _wallet; |
| 25 | |
| 26 | @computed |
| 27 | bool get mwebCardDisplay => _settingsStore.mwebCardDisplay; |
| 28 | |
| 29 | @observable |
| 30 | late bool mwebEnabled; |
| 31 | |
| 32 | @computed |
| 33 | String get mwebNodeUri => _settingsStore.mwebNodeUri; |
| 34 | |
| 35 | @action |
| 36 | void setMwebCardDisplay(bool value) { |
| 37 | _settingsStore.mwebCardDisplay = value; |
| 38 | } |
| 39 | |
| 40 | @action |
| 41 | void setMwebNodeUri(String value) { |
| 42 | _settingsStore.mwebNodeUri = value; |
| 43 | } |
| 44 | |
| 45 | @action |
| 46 | void setMwebEnabled(bool value) { |
| 47 | mwebEnabled = value; |
| 48 | bitcoin!.setMwebEnabled(_wallet, value); |
| 49 | _settingsStore.mwebAlwaysScan = value; |
| 50 | } |
| 51 | |
| 52 | Future<String> getAbbreviatedLogs() async { |
| 53 | final appSupportPath = (await getApplicationSupportDirectory()).path; |
| 54 | final logsFile = File("$appSupportPath/logs/debug.log"); |
| 55 | if (!logsFile.existsSync()) { |
| 56 | return ""; |
| 57 | } |
| 58 | final logs = logsFile.readAsStringSync(); |
| 59 | // return last 10000 characters: |
| 60 | return logs.substring(logs.length > 10000 ? logs.length - 10000 : 0); |
| 61 | } |
| 62 | |
| 63 | Future<void> removeLogsLocally(String filePath) async { |
| 64 | final logsFile = File(filePath); |
| 65 | if (logsFile.existsSync()) { |
| 66 | await logsFile.delete(); |
| 67 | } |
| 68 | } |
| 69 | } |