diff --git a/src/pages/backup/BackupResultsSummary.tsx b/src/pages/backup/BackupResultsSummary.tsx index 42b0d60..c984d91 100644 --- a/src/pages/backup/BackupResultsSummary.tsx +++ b/src/pages/backup/BackupResultsSummary.tsx @@ -19,9 +19,9 @@ // TODO: do this for contacts too const { newWallets, skippedWallets } = results; const warningCount = Object.values(results.messages.wallets) - .reduce((acc, msgs) => acc + msgs.filter(m => m.type === "warning").length, 0); + .reduce((acc, r) => acc + r.messages.filter(m => m.type === "warning").length, 0); const errorCount = Object.values(results.messages.wallets) - .reduce((acc, msgs) => acc + msgs.filter(m => m.type === "error").length, 0); + .reduce((acc, r) => acc + r.messages.filter(m => m.type === "error").length, 0); return {/* New wallets imported count */} diff --git a/src/pages/backup/BackupResultsTree.tsx b/src/pages/backup/BackupResultsTree.tsx index 435d9c3..2d5cff0 100644 --- a/src/pages/backup/BackupResultsTree.tsx +++ b/src/pages/backup/BackupResultsTree.tsx @@ -78,7 +78,8 @@ // The IDs are the keys of the backup, which may begin with prefixes like // "Wallet-"; remove those for cleanliness const cleanID = id.replace(CLEAN_ID_RE, ""); - const messages = results.messages.wallets[id]; + const resultSet = results.messages.wallets[id]; + const { label, messages } = resultSet; const messageNodes: DataNode[] = []; for (let i = 0; i < messages.length; i++) { @@ -97,7 +98,7 @@ out.push({ key: `wallets-${cleanID}`, - title: t("import.results.treeWallet", { id: cleanID }), + title: t("import.results.treeWallet", { id: label || cleanID }), children: messageNodes }); } diff --git a/src/pages/backup/backupImportUtils.ts b/src/pages/backup/backupImportUtils.ts index 2770ba5..e513214 100644 --- a/src/pages/backup/backupImportUtils.ts +++ b/src/pages/backup/backupImportUtils.ts @@ -109,6 +109,7 @@ addressPrefix: string, existingWallets: WalletMap, results: BackupResults, + uuid: string, oldPrivatekey: string, privatekeyMismatchErrorKey: @@ -126,6 +127,9 @@ username ); + // Display the address in the results tree + results.setResultLabel("wallets", uuid, address); + // Check that our calculated private key is actually equal to the stored // private key. In practice these should never be different. if (privatekey !== oldPrivatekey) diff --git a/src/pages/backup/backupImportV1.ts b/src/pages/backup/backupImportV1.ts index 783d57b..9cce1e0 100644 --- a/src/pages/backup/backupImportV1.ts +++ b/src/pages/backup/backupImportV1.ts @@ -138,7 +138,7 @@ // WALLET IMPORT PREPARATION/VALIDATION // --------------------------------------------------------------------------- const { address, existingWallet, existingImportWallet } = await checkAddress( - addressPrefix, existingWallets, results, + addressPrefix, existingWallets, results, uuid, masterkey, "errorMasterKeyMismatch", format, password, username ); diff --git a/src/pages/backup/backupImportV2.ts b/src/pages/backup/backupImportV2.ts index 5ad9dac..07272ae 100644 --- a/src/pages/backup/backupImportV2.ts +++ b/src/pages/backup/backupImportV2.ts @@ -110,7 +110,7 @@ const { password, privatekey } = dec; const { address, existingWallet, existingImportWallet } = await checkAddress( - addressPrefix, existingWallets, results, + addressPrefix, existingWallets, results, uuid, privatekey, "errorPrivateKeyMismatch", format, password, username ); diff --git a/src/pages/backup/backupResults.ts b/src/pages/backup/backupResults.ts index 08c90e5..a1ec41b 100644 --- a/src/pages/backup/backupResults.ts +++ b/src/pages/backup/backupResults.ts @@ -18,6 +18,11 @@ export type MessageType = React.ReactNode | TranslatedMessage | string; export type ResultType = "success" | "warning" | "error"; +export interface ResultSet { + label?: string; + messages: BackupMessage[]; +} + export class BackupResults { /** Number of new wallets that were added as a result of this import. */ public newWallets = 0; @@ -33,8 +38,8 @@ /** For both wallets and contacts, a map of wallet/contact UUIDs containing * all the messages (success, warning, error). */ public messages: { - wallets: Record; - contacts: Record; + wallets: Record; + contacts: Record; } = { wallets: {}, contacts: {} @@ -45,8 +50,8 @@ debug("backup result msg [%s] for %s: %o", src, uuid, message); const msgMap = this.messages[src]; - if (!msgMap[uuid]) msgMap[uuid] = [message]; - else msgMap[uuid].push(message); + if (!msgMap[uuid]) msgMap[uuid] = { messages: [message] }; + else msgMap[uuid].messages.push(message); } /** Logs a success message for the given wallet/contact UUID to the @@ -66,6 +71,13 @@ public addErrorMessage(src: MessageSource, uuid: string, message?: MessageType, error?: Error): void { this.addMessage(src, uuid, { type: "error", message, error }); } + + /** Sets the label of a result set for the given wallet/contact UUID. */ + public setResultLabel(src: MessageSource, uuid: string, label: string): void { + const msgMap = this.messages[src]; + if (!msgMap[uuid]) msgMap[uuid] = { label, messages: [] }; + else msgMap[uuid].label = label; + } } export interface BackupMessage {