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
This commit is contained in:
keeri 2022-07-20 21:40:00 +00:00
commit 53adb406f8
3 changed files with 41 additions and 13 deletions

View file

@ -403,7 +403,7 @@ export class AddressBookComponent implements OnInit, AfterViewInit, OnDestroy {
const fileData = event.target['result'] as string; const fileData = event.target['result'] as string;
try { try {
const importData = JSON.parse(fileData); 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')); return this.notificationService.sendError(this.translocoService.translate('address-book.bad-import-data-make-sure-you-selected-a-nault-address-book'));
} }

View file

@ -38,7 +38,7 @@
<div uk-grid> <div uk-grid>
<div class="uk-width-1-4">New Name</div> <div class="uk-width-1-4">New Name</div>
<div class="uk-width-1-4">Current Name</div> <div class="uk-width-1-4">Current Name</div>
<div class="uk-width-1-2 uk-text-truncate">Account</div> <div class="uk-width-expand uk-text-truncate">Account</div>
</div> </div>
</li> </li>
</ul> </ul>

View file

@ -39,7 +39,7 @@ export class ImportAddressBookComponent implements OnInit {
try { try {
let importBlob; let importBlob;
if (originalString && originalString.includes('account')) { if (originalString && ( originalString.includes('account') || originalString.includes('address') )) {
importBlob = JSON.parse(originalString); // new binary format importBlob = JSON.parse(originalString); // new binary format
} else { } else {
importBlob = JSON.parse(binary); // old non-binary version 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.`); return this.importDataError(`Bad import data. Check your link and try again.`);
} }
this.validImportData = true; this.validImportData = true;
this.importData = importBlob;
this.activePanel = 'import'; this.activePanel = 'import';
// Now, find conflicting accounts let importDataAddress = {};
let importData = [];
for (const entry of importBlob) { 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? continue; // Data missing?
} }
entry.originalName = this.addressBook.getAccountName(entry.account);
entry.originalTrackBalance = this.addressBook.getBalanceTrackingById(entry.account); if ( importDataAddress[entryAddress] != null ) {
entry.originalTrackTransactions = this.addressBook.getTransactionTrackingById(entry.account); continue; // Duplicate
if (!entry.originalName) { }
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++; this.newEntries++;
} else if (entry.originalName === entry.name && entry.originalTrackBalance === entry.trackBalance && } else if (
entry.originalTrackTransactions === entry.trackTransactions) { (importEntry.originalName === entryName)
this.existingEntries++; && (importEntry.originalTrackBalance === importEntry.trackBalance)
&& (importEntry.originalTrackTransactions === importEntry.trackTransactions)
) {
this.existingEntries++;
} else { } else {
this.conflictingEntries++; this.conflictingEntries++;
} }
importData.push(importEntry);
} }
this.importData = importData;
} catch (err) { } catch (err) {
console.log(err);
return this.importDataError(`Unable to decode import data. Check your link and try again.`); return this.importDataError(`Unable to decode import data. Check your link and try again.`);
} }
} }