optimize import rescanning

This commit is contained in:
Aditya Kulkarni
2018-10-29 15:10:00 -07:00
parent e8c488e150
commit c523ecf3a3
3 changed files with 20 additions and 13 deletions

View File

@@ -394,22 +394,29 @@ void MainWindow::importPrivKey() {
pui.helpLbl->setText(QString() %
"Please paste your private keys (z-Addr or t-Addr) here, one per line.\n" %
"The keys will be imported into your connected zcashd node");
if (d.exec() == QDialog::Accepted && !pui.privKeyTxt->toPlainText().trimmed().isEmpty()) {
auto keys = pui.privKeyTxt->toPlainText().trimmed().split("\n");
auto fnFinished = [=] (auto) {
qDebug() << "finished";
ui->statusBar->showMessage("Key import rescan finished");
};
for (int i=0; i < keys.length(); i++) {
auto key = keys[i].trimmed();
if (key.startsWith("S") ||
key.startsWith("secret")) { // Z key
rpc->importZPrivKey(key, [=] (auto) {} );
rpc->importZPrivKey(key, i == key.length() -1, fnFinished);
} else { // T Key
rpc->importTPrivKey(key, [=] (auto) {} );
}
rpc->importTPrivKey(key, i == key.length() -1, fnFinished);
}
}
QMessageBox::information(this,
"Imported", "The keys were imported. It may be a while to rescan the blockchain with the new keys.",
"Imported", "The keys were imported. It may take several minutes to rescan the blockchain with the new keys for your balance to be shown accurately.",
QMessageBox::Ok);
}
}
void MainWindow::setupBalancesTab() {

View File

@@ -184,24 +184,24 @@ void RPC::getTPrivKey(QString addr, const std::function<void(json)>& cb) {
doRPC(payload, cb);
}
void RPC::importZPrivKey(QString addr, const std::function<void(json)>& cb) {
void RPC::importZPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb) {
json payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", "z_importkey"},
{"params", { addr.toStdString() }},
{"params", { addr.toStdString(), (rescan? "yes" : "no") }},
};
doRPC(payload, cb);
}
void RPC::importTPrivKey(QString addr, const std::function<void(json)>& cb) {
void RPC::importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb) {
json payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", "importprivkey"},
{"params", { addr.toStdString() }},
{"params", { addr.toStdString(), (rescan? "yes" : "no") }},
};
doRPC(payload, cb);

View File

@@ -53,8 +53,8 @@ public:
void getZPrivKey(QString addr, const std::function<void(json)>& cb);
void getTPrivKey(QString addr, const std::function<void(json)>& cb);
void importZPrivKey(QString addr, const std::function<void(json)>& cb);
void importTPrivKey(QString addr, const std::function<void(json)>& cb);
void importZPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
Turnstile* getTurnstile() { return turnstile; }