forked from SatoshiPortal/bullbitcoin-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathload_backup_settings_usecase.dart
More file actions
88 lines (82 loc) · 3.24 KB
/
Copy pathload_backup_settings_usecase.dart
File metadata and controls
88 lines (82 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import 'package:bb_mobile/core/settings/domain/repositories/settings_repository.dart';
import 'package:bb_mobile/core/utils/logger.dart';
import 'package:bb_mobile/core/utils/result.dart';
import 'package:bb_mobile/core/wallet/domain/entities/wallet.dart';
import 'package:bb_mobile/core/wallet/domain/usecases/get_wallets_usecase.dart';
import 'package:bb_mobile/features/backup_settings/domain/backup_settings_failure.dart';
import 'package:bb_mobile/features/backup_settings/domain/entities/backup_settings_snapshot.dart';
import 'package:bb_mobile/features/backup_settings/domain/wallet_metadata_backup_settings_mapping.dart';
import 'package:bb_mobile/features/wallet_metadata_backup/public/wallet_metadata_backup_facade.dart';
import 'package:meta/meta.dart';
class LoadBackupSettingsUsecase {
final GetWalletsUsecase _getWallets;
final SettingsRepository _settingsRepository;
final WalletMetadataBackupFacade _metadataBackup;
const LoadBackupSettingsUsecase(
this._getWallets,
this._settingsRepository,
this._metadataBackup,
);
@useResult
Future<Result<BackupSettingsSnapshot, BackupSettingsFailure>>
execute() async {
try {
final metadataResult = await _metadataBackup.getState();
final WalletMetadataBackupState metadataState;
switch (metadataResult) {
case Ok(:final value):
metadataState = value;
case Err(:final failure):
return Err(mapWalletMetadataBackupFailure(failure));
}
final List<Wallet> defaultWallets;
try {
defaultWallets = await _getWallets.execute(onlyDefaults: true);
} on NoWalletsFoundException {
return Ok(_emptyWalletSnapshot(metadataState));
}
if (defaultWallets.isEmpty) {
return Ok(_emptyWalletSnapshot(metadataState));
}
final settings = await _settingsRepository.fetch();
final network = Network.fromEnvironment(
isTestnet: settings.environment.isTestnet,
isLiquid: false,
);
final networkWallet = defaultWallets
.where((wallet) => wallet.network == network)
.firstOrNull;
return Ok(
BackupSettingsSnapshot(
isDefaultPhysicalBackupTested: defaultWallets.every(
(wallet) => wallet.isPhysicalBackupTested,
),
lastPhysicalBackup: networkWallet?.latestPhysicalBackup,
isDefaultEncryptedBackupTested: defaultWallets.every(
(wallet) => wallet.isEncryptedVaultTested,
),
lastEncryptedBackup: networkWallet?.latestEncryptedBackup,
walletMetadata: mapWalletMetadataBackupSettings(metadataState),
),
);
} on Exception catch (error, stack) {
log.warning(
'Load backup settings failed',
error: StateError(error.runtimeType.toString()),
trace: stack,
);
return Err(BackupSettingsUnexpectedFailure(error.runtimeType.toString()));
}
}
BackupSettingsSnapshot _emptyWalletSnapshot(
WalletMetadataBackupState metadataState,
) {
return BackupSettingsSnapshot(
isDefaultPhysicalBackupTested: false,
lastPhysicalBackup: null,
isDefaultEncryptedBackupTested: false,
lastEncryptedBackup: null,
walletMetadata: mapWalletMetadataBackupSettings(metadataState),
);
}
}