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:
parent
9f468aece8
commit
53adb406f8
3 changed files with 41 additions and 13 deletions
|
|
@ -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'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
&& (importEntry.originalTrackBalance === importEntry.trackBalance)
|
||||||
|
&& (importEntry.originalTrackTransactions === importEntry.trackTransactions)
|
||||||
|
) {
|
||||||
this.existingEntries++;
|
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.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue