fix backup on debug builds (#1728)
open transactionDecscriptionBox if it's not open
cyan committed
Oct 16, 2024 at 19:27 UTC
564f8e2c70c3e377db985097680c377a034e72a9
1 file changed
+36
-2
lib/core/backup_service.dart
+36
-2
@@ -2,6 +2,7 @@ import 'dart:convert';
2
import 'dart:io';
3
import 'dart:typed_data';
4
import 'package:cake_wallet/core/secure_storage.dart';
5
+import 'package:cake_wallet/entities/get_encryption_key.dart';
6
import 'package:cake_wallet/entities/transaction_description.dart';
7
import 'package:cake_wallet/themes/theme_list.dart';
8
import 'package:cw_core/root_dir.dart';
@@ -105,7 +106,15 @@ class BackupService {
106
if (entity.path == archivePath || entity.path == tmpDir.path) {
107
return;
108
}
108
-
109
+ final filename = entity.absolute;
110
+ for (var ignore in ignoreFiles) {
111
+ final filename = entity.absolute.path;
112
+ if (filename.endsWith(ignore) && !filename.contains("wallets/")) {
113
+ print("ignoring backup file: $filename");
114
+ return;
115
+ }
116
+ }
117
+ print("restoring: $filename");
118
if (entity.statSync().type == FileSystemEntityType.directory) {
119
zipEncoder.addDirectory(Directory(entity.path));
120
} else {
@@ -148,14 +157,29 @@ class BackupService {
157
await _importPreferencesDump();
158
}
159
160
+ // checked with .endsWith - so this should be the last part of the filename
161
+ static const ignoreFiles = [
162
+ "flutter_assets/kernel_blob.bin",
163
+ "flutter_assets/vm_snapshot_data",
164
+ "flutter_assets/isolate_snapshot_data",
165
+ ".lock",
166
+ ];
167
+
168
Future<void> _importBackupV2(Uint8List data, String password) async {
169
final appDir = await getAppDir();
170
final decryptedData = await _decryptV2(data, password);
171
final zip = ZipDecoder().decodeBytes(decryptedData);
172
173
+ outer:
174
for (var file in zip.files) {
175
final filename = file.name;
158
-
176
+ for (var ignore in ignoreFiles) {
177
+ if (filename.endsWith(ignore) && !filename.contains("wallets/")) {
178
+ print("ignoring backup file: $filename");
179
+ continue outer;
180
+ }
181
+ }
182
+ print("restoring: $filename");
183
if (file.isFile) {
184
final content = file.content as List<int>;
185
File('${appDir.path}/' + filename)
@@ -206,6 +230,16 @@ class BackupService {
230
json.decode(transactionDescriptionFile.readAsStringSync()) as Map<String, dynamic>;
231
final descriptionsMap = jsonData.map((key, value) =>
232
MapEntry(key, TransactionDescription.fromJson(value as Map<String, dynamic>)));
233
+
234
+ if (!_transactionDescriptionBox.isOpen) {
235
+ final transactionDescriptionsBoxKey = await getEncryptionKey(secureStorage: secureStorageShared, forKey: TransactionDescription.boxKey);
236
+ final transactionDescriptionBox = await CakeHive.openBox<TransactionDescription>(
237
+ TransactionDescription.boxName,
238
+ encryptionKey: transactionDescriptionsBoxKey,
239
+ );
240
+ await transactionDescriptionBox.putAll(descriptionsMap);
241
+ return;
242
+ }
243
await _transactionDescriptionBox.putAll(descriptionsMap);
244
}
245