11import 'dart:async' ;
22
3+ import 'package:cw_core/db/sqlite.dart' ;
34import 'package:cw_core/hive_type_ids.dart' ;
45import 'package:cw_core/utils/print_verbose.dart' ;
56import 'package:cw_core/wallet_type.dart' ;
67import 'package:sqflite/sqflite.dart' ;
78import 'package:cw_core/cake_hive.dart' ;
89import 'package:cw_core/wallet_info_legacy.dart' as wiLegacy;
910
10- late Database db;
11-
1211Future <void > performHiveMigration () async {
1312 try {
1413 if (! CakeHive .isAdapterRegistered (wiLegacy.WalletInfo .typeId)) {
@@ -30,91 +29,6 @@ Future<void> performHiveMigration() async {
3029 }
3130}
3231
33- Future <void > initDb ({String ? pathOverride}) async {
34- db = await openDatabase (
35- pathOverride ?? "cake.db" ,
36- version: 1 ,
37- onCreate: (Database db, int version) async {
38- await db.execute (
39- '''
40- CREATE TABLE WalletInfo (
41- walletInfoId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
42- id TEXT NOT NULL,
43- name TEXT NOT NULL,
44- "type" INTEGER NOT NULL,
45- isRecovery INTEGER DEFAULT (0) NOT NULL,
46- walletInfoDerivationInfoId INTEGER NOT NULL,
47- restoreHeight INTEGER DEFAULT (0) NOT NULL,
48- "timestamp" INTEGER DEFAULT (0) NOT NULL,
49- dirPath TEXT NOT NULL,
50- "path" TEXT NOT NULL,
51- address TEXT NOT NULL,
52- yatEid TEXT,
53- yatLastUsedAddressRaw TEXT,
54- showIntroCakePayCard INTEGER DEFAULT (1),
55- addressPageType TEXT,
56- network TEXT,
57- hardwareWalletType INTEGER,
58- parentAddress TEXT,
59- hashedWalletIdentifier TEXT,
60- isNonSeedWallet INTEGER DEFAULT (0) NOT NULL,
61- sortOrder INTEGER DEFAULT (0) NOT NULL
62- );
63- ''' );
64-
65- await db.execute (
66- '''
67- CREATE TABLE WalletInfoDerivationInfo (
68- walletInfoDerivationInfoId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
69- address TEXT NOT NULL,
70- balance TEXT NOT NULL,
71- transactionsCount INTEGER DEFAULT (0) NOT NULL,
72- derivationType INTEGER NOT NULL,
73- derivationPath TEXT,
74- scriptType TEXT,
75- description TEXT
76- );
77- ''' );
78-
79- await db.execute (
80- '''
81- CREATE TABLE WalletInfoAddress (
82- walletInfoAddressId INTEGER PRIMARY KEY AUTOINCREMENT,
83- walletInfoId INTEGER,
84- "type" INTEGER NOT NULL,
85- address TEXT NOT NULL,
86- CONSTRAINT WalletInfoAddress_WalletInfo_FK FOREIGN KEY (walletInfoId) REFERENCES WalletInfo(walletInfoId)
87- );
88- ''' );
89-
90- await db.execute (
91- '''
92- CREATE TABLE WalletInfoAddressInfo (
93- walletInfoAddressInfoId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
94- walletInfoId INTEGER NOT NULL,
95- mapKey INTEGER NOT NULL,
96- mapValueAccountIndex INTEGER NOT NULL,
97- mapValueAddress TEXT NOT NULL,
98- mapValueLabel TEXT NOT NULL,
99- CONSTRAINT WalletInfoAddressInfo_WalletInfo_FK FOREIGN KEY (walletInfoId) REFERENCES WalletInfo(walletInfoId)
100- );
101- ''' );
102-
103- await db.execute (
104- '''
105- CREATE TABLE "WalletInfoAddressMap" (
106- walletInfoAddressMapId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
107- walletInfoId INTEGER NOT NULL,
108- addressKey TEXT NOT NULL,
109- addressValue TEXT NOT NULL,
110- CONSTRAINT WalletInfoAddress_WalletInfo_FK FOREIGN KEY (walletInfoId) REFERENCES WalletInfo(walletInfoId)
111- );
112- '''
113- );
114- }
115- );
116- }
117-
11832enum DerivationType {
11933 unknown,
12034 def, // default is a reserved word
@@ -427,7 +341,7 @@ class WalletInfo {
427341 bool ? showIntroCakePayCard,
428342 String yatEid = '' ,
429343 String yatLastUsedAddressRaw = '' ,
430- DerivationInfo ? derivationInfo ,
344+ int ? derivationInfoId ,
431345 HardwareWalletType ? hardwareWalletType,
432346 String ? parentAddress,
433347 String ? hashedWalletIdentifier,
@@ -448,7 +362,7 @@ class WalletInfo {
448362 yatEid,
449363 yatLastUsedAddressRaw,
450364 showIntroCakePayCard,
451- derivationInfo ? .id ?? - 1 ,
365+ derivationInfoId ?? - 1 ,
452366 hardwareWalletType,
453367 parentAddress,
454368 hashedWalletIdentifier,
@@ -478,7 +392,8 @@ class WalletInfo {
478392
479393 Future <void > setAddresses (Map <String , String > addresses) async {
480394 await WalletInfoAddressMap .deleteByWalletInfoId (internalId);
481- for (final address in addresses.keys) {
395+ final keys = addresses.keys.toList ();
396+ for (final address in keys) {
482397 await WalletInfoAddressMap .insert (internalId, address, addresses[address]! );
483398 }
484399 }
@@ -498,7 +413,8 @@ class WalletInfo {
498413
499414 Future <void > setAddressInfos (Map <int , List <WalletInfoAddressInfo >> addressInfos) async {
500415 await WalletInfoAddressInfo .deleteByWalletInfoId (internalId);
501- for (final addressInfo in addressInfos.entries) {
416+ final entries = addressInfos.entries.toList ();
417+ for (final addressInfo in entries) {
502418 for (final info in addressInfo.value) {
503419 await WalletInfoAddressInfo .insert (
504420 walletInfoId: internalId,
0 commit comments