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