From 53adb406f8a0e7ad0d26c325862c0cb1cece3c06 Mon Sep 17 00:00:00 2001 From: keeri Date: Wed, 20 Jul 2022 21:40:00 +0000 Subject: [PATCH] address book import: support common fields that might be used by other apps ignore entries with duplicate address fix 3rd column in a table not being where it belongs log address book import errors in catch --- .../address-book/address-book.component.ts | 2 +- .../import-address-book.component.html | 2 +- .../import-address-book.component.ts | 50 +++++++++++++++---- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/app/components/address-book/address-book.component.ts b/src/app/components/address-book/address-book.component.ts index 2962598..e7609bc 100644 --- a/src/app/components/address-book/address-book.component.ts +++ b/src/app/components/address-book/address-book.component.ts @@ -403,7 +403,7 @@ export class AddressBookComponent implements OnInit, AfterViewInit, OnDestroy { const fileData = event.target['result'] as string; try { const importData = JSON.parse(fileData); - if (!importData.length || !importData[0].account) { + if (!importData.length || (!importData[0].account && !importData[0].address)) { return this.notificationService.sendError(this.translocoService.translate('address-book.bad-import-data-make-sure-you-selected-a-nault-address-book')); } diff --git a/src/app/components/import-address-book/import-address-book.component.html b/src/app/components/import-address-book/import-address-book.component.html index dc70193..10777b6 100644 --- a/src/app/components/import-address-book/import-address-book.component.html +++ b/src/app/components/import-address-book/import-address-book.component.html @@ -38,7 +38,7 @@
New Name
Current Name
-
Account
+
Account
diff --git a/src/app/components/import-address-book/import-address-book.component.ts b/src/app/components/import-address-book/import-address-book.component.ts index 47d7ee7..1a2b21a 100644 --- a/src/app/components/import-address-book/import-address-book.component.ts +++ b/src/app/components/import-address-book/import-address-book.component.ts @@ -39,7 +39,7 @@ export class ImportAddressBookComponent implements OnInit { try { let importBlob; - if (originalString && originalString.includes('account')) { + if (originalString && ( originalString.includes('account') || originalString.includes('address') )) { importBlob = JSON.parse(originalString); // new binary format } else { importBlob = JSON.parse(binary); // old non-binary version @@ -49,28 +49,56 @@ export class ImportAddressBookComponent implements OnInit { return this.importDataError(`Bad import data. Check your link and try again.`); } this.validImportData = true; - this.importData = importBlob; this.activePanel = 'import'; - // Now, find conflicting accounts + let importDataAddress = {}; + let importData = []; + for (const entry of importBlob) { - if (!entry.account || !entry.name) { + // support common fields that address book exports from other apps may contain + const entryName = entry.name ?? entry.nickname; + const entryAddress = entry.account ?? entry.address; + + if (!entryAddress || !entryName) { continue; // Data missing? } - entry.originalName = this.addressBook.getAccountName(entry.account); - entry.originalTrackBalance = this.addressBook.getBalanceTrackingById(entry.account); - entry.originalTrackTransactions = this.addressBook.getTransactionTrackingById(entry.account); - if (!entry.originalName) { + + if ( importDataAddress[entryAddress] != null ) { + continue; // Duplicate + } + importDataAddress[entryAddress] = true; + + const originalTrackBalance = this.addressBook.getBalanceTrackingById(entryAddress); + const originalTrackTransactions = this.addressBook.getTransactionTrackingById(entryAddress); + + const importEntry = { + account: entryAddress, + originalName: this.addressBook.getAccountName(entryAddress), + name: entryName, + originalTrackBalance, + trackBalance: entry.trackBalance ?? originalTrackBalance, + originalTrackTransactions, + trackTransactions: entry.trackTransactions ?? originalTrackTransactions, + } + + if (!importEntry.originalName) { this.newEntries++; - } else if (entry.originalName === entry.name && entry.originalTrackBalance === entry.trackBalance && - entry.originalTrackTransactions === entry.trackTransactions) { - this.existingEntries++; + } else if ( + (importEntry.originalName === entryName) + && (importEntry.originalTrackBalance === importEntry.trackBalance) + && (importEntry.originalTrackTransactions === importEntry.trackTransactions) + ) { + this.existingEntries++; } else { this.conflictingEntries++; } + + importData.push(importEntry); } + this.importData = importData; } catch (err) { + console.log(err); return this.importDataError(`Unable to decode import data. Check your link and try again.`); } }