diff --git a/lib/util/storage/database/address_book_repository.dart b/lib/util/storage/database/address_book_repository.dart new file mode 100644 index 000000000..4af492910 --- /dev/null +++ b/lib/util/storage/database/address_book_repository.dart @@ -0,0 +1,65 @@ +import 'package:sembast/sembast.dart'; + +class AddressBookEntry { + String name; + String address; + + AddressBookEntry(this.name, this.address); + + factory AddressBookEntry.fromJson(Map data) { + return AddressBookEntry(data['name'], data['address']); + } + + Map jsonMap() { + return { + "name": this.name, + "address": this.address, + }; + } +} + +class AddressBookRepository { + final StoreRef _store = stringMapStoreFactory.store("address_book"); + + Future insertAddressBookEntry( + AddressBookEntry addressBookEntry, + DatabaseClient databaseClient, + ) async { + return true; + } + + Future updateAddressBookEntry( + AddressBookEntry addressBookEntry, DatabaseClient databaseClient) async { + return true; + } + + Future deleteAddressBookEntry( + AddressBookEntry addressBookEntry, + DatabaseClient databaseClient, + ) async { + return true; + } + + Future getAddressBookEntry( + String address, DatabaseClient databaseClient) async { + try { + dynamic addressBookEntryJson = + await _store.record(address).get(databaseClient); + AddressBookEntry addressBookEntry = + AddressBookEntry.fromJson(addressBookEntryJson); + return addressBookEntry; + } catch (e) { + return null; + } + } + + Future> getEntries( + DatabaseClient databaseClient) async { + final List> snapshots = + await _store.find(databaseClient); + List accounts = snapshots + .map((snapshot) => AddressBookEntry.fromJson(snapshot.value)) + .toList(growable: false); + return accounts; + } +} diff --git a/lib/util/storage/database/database_isolate.dart b/lib/util/storage/database/database_isolate.dart index 1738ccc12..0e289ff17 100644 --- a/lib/util/storage/database/database_isolate.dart +++ b/lib/util/storage/database/database_isolate.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:isolate'; +import 'package:my_wit_wallet/util/storage/database/address_book_repository.dart'; import 'package:my_wit_wallet/util/storage/database/stats.dart'; import 'package:my_wit_wallet/util/storage/database/transaction_adapter.dart'; import 'package:witnet/explorer.dart'; @@ -16,6 +17,7 @@ Map)> 'configure': _configure, 'delete': _deleteRecord, 'deleteDatabase': _deleteDatabase, + 'getAddressBookEntry': _getAddressBookEntry, 'getKeychain': _getKeychain, 'getStatsByAddress': _getStatsByAddress, 'getVtt': _getVtt, @@ -157,6 +159,9 @@ Future _addRecord( case 'stats': value = await dbService.add(AccountStats.fromJson(params['value'])); break; + case 'address_book_entry': + value = await dbService.add(AddressBookEntry.fromJson(params['value'])); + break; default: value = false; break; @@ -184,6 +189,9 @@ Future _deleteRecord( case 'stats': value = await dbService.delete(AccountStats.fromJson(params['value'])); break; + case 'address_book_entry': + value = + await dbService.delete(AddressBookEntry.fromJson(params['value'])); default: value = false; break; @@ -220,6 +228,10 @@ Future _updateRecord( case 'stats': value = await dbService.update(AccountStats.fromJson(params['value'])); break; + case 'address_book_entry': + value = + await dbService.update(AddressBookEntry.fromJson(params['value'])); + break; default: value = false; break; @@ -277,3 +289,13 @@ Future _getMint( MintEntry? mint = await dbService.getMint(params); port.send(mint); } + +Future _getAddressBookEntry( + DatabaseService dbService, + SendPort port, + Map params, +) async { + AddressBookEntry? addressBookEntry = + await dbService.getAddressBookEntry(params); + port.send(addressBookEntry); +} diff --git a/lib/util/storage/database/database_service.dart b/lib/util/storage/database/database_service.dart index 3c001fa04..cdb09ffb7 100644 --- a/lib/util/storage/database/database_service.dart +++ b/lib/util/storage/database/database_service.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:my_wit_wallet/util/storage/database/address_book_repository.dart'; import 'package:my_wit_wallet/util/storage/database/get_account_mints_map.dart'; import 'package:my_wit_wallet/util/storage/database/get_account_vtts_map.dart'; import 'package:my_wit_wallet/util/storage/database/stats.dart'; @@ -57,6 +58,7 @@ class DatabaseService { AccountRepository accountRepository = AccountRepository(); MintRepository mintRepository = MintRepository(); StatsRepository statsRepository = StatsRepository(); + AddressBookRepository addressBookRepository = AddressBookRepository(); KeyChain keyChain = KeyChain(); @@ -115,6 +117,9 @@ class DatabaseService { case AccountStats: await statsRepository.insertStats(item, _database); break; + case AddressBookEntry: + await addressBookRepository.insertAddressBookEntry(item, _database); + break; default: return false; } @@ -156,6 +161,8 @@ class DatabaseService { case AccountStats: await statsRepository.deleteStats(item.address, _database); break; + case AddressBookEntry: + await addressBookRepository.deleteAddressBookEntry(item, _database); default: return false; } @@ -183,6 +190,8 @@ class DatabaseService { case AccountStats: await statsRepository.updateStats(item, _database); break; + case AddressBookEntry: + await addressBookRepository.updateAddressBookEntry(item, _database); default: return false; } @@ -260,6 +269,8 @@ class DatabaseService { Map accountMap = {}; Map vttMap = {}; Map mintMap = {}; + List addressBook = + await addressBookRepository.getEntries(_database); for (int i = 0; i < wallets.length; i++) { walletMap[wallets[i].id] = wallets[i]; } @@ -314,6 +325,7 @@ class DatabaseService { /// Load current wallet and address from preferences WalletStorage _walletStorage = WalletStorage(wallets: walletMap); + _walletStorage.setAddressBookEntries(addressBook); _walletStorage.setAccounts(accountMap); _walletStorage.setTransactions(vttMap); _walletStorage.setMints(mintMap); @@ -349,4 +361,9 @@ class DatabaseService { Future getAccount(params) async { return await accountRepository.getAccount(params["address"], _database); } + + Future getAddressBookEntry(params) async { + return await addressBookRepository.getAddressBookEntry( + params["address"], _database); + } } diff --git a/lib/util/storage/database/wallet_storage.dart b/lib/util/storage/database/wallet_storage.dart index 71fd07385..d7821715b 100644 --- a/lib/util/storage/database/wallet_storage.dart +++ b/lib/util/storage/database/wallet_storage.dart @@ -1,3 +1,4 @@ +import 'package:my_wit_wallet/util/storage/database/address_book_repository.dart'; import 'package:my_wit_wallet/util/storage/database/stats.dart'; import 'package:my_wit_wallet/util/storage/database/transaction_adapter.dart'; import 'package:my_wit_wallet/util/storage/database/wallet.dart'; @@ -52,6 +53,9 @@ class WalletStorage { // Map _mints = {}; + // + Map _addressBook = {}; + // WalletType type; String? _currentWalletId; String? _currentAddress; @@ -126,6 +130,16 @@ class WalletStorage { wallets[walletId]!.setTransaction(mint); } + void setAddressBookEntry(AddressBookEntry addressBookEntry) { + _addressBook[addressBookEntry.address] = addressBookEntry.name; + } + + void setAddressBookEntries(List entries) { + entries.forEach((element) { + setAddressBookEntry(element); + }); + } + void setAccount(Account account) { _accounts[account.address] = account; if (wallets[account.walletId] != null)