diff --git a/lib/Cargo.lock b/lib/Cargo.lock index 99ffbfb..dc45f9c 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -1051,7 +1051,7 @@ version = "0.1.0" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=ded8a41fa886a3bfb6e0cefd69c3aedac2abd2a4)", + "silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=473d476274077d88104392dc6ad384a06b5d2554)", ] [[package]] @@ -1467,7 +1467,7 @@ dependencies = [ [[package]] name = "silentdragonlitelib" version = "0.1.0" -source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=ded8a41fa886a3bfb6e0cefd69c3aedac2abd2a4#ded8a41fa886a3bfb6e0cefd69c3aedac2abd2a4" +source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=473d476274077d88104392dc6ad384a06b5d2554#473d476274077d88104392dc6ad384a06b5d2554" dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "bellman 0.1.0 (git+https://github.com/DenioD/librustzcash.git?rev=caaee693c47c2ee9ecd1e1546b8fe3c714f342bc)", @@ -2481,7 +2481,7 @@ dependencies = [ "checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2" "checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35" "checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d" -"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=ded8a41fa886a3bfb6e0cefd69c3aedac2abd2a4)" = "" +"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=473d476274077d88104392dc6ad384a06b5d2554)" = "" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" "checksum sodiumoxide 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585232e78a4fc18133eef9946d3080befdf68b906c51b621531c37e91787fa2b" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 8f5008f..42d2cee 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -11,4 +11,4 @@ crate-type = ["staticlib"] [dependencies] libc = "0.2.58" lazy_static = "1.4.0" -silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "ded8a41fa886a3bfb6e0cefd69c3aedac2abd2a4" } +silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "473d476274077d88104392dc6ad384a06b5d2554" } diff --git a/src/balancestablemodel.cpp b/src/balancestablemodel.cpp index 22a40bb..d0e2f0e 100644 --- a/src/balancestablemodel.cpp +++ b/src/balancestablemodel.cpp @@ -20,24 +20,29 @@ void BalancesTableModel::setNewData(const QList zaddrs, const QList>(); - std::for_each(balances.keyBegin(), balances.keyEnd(), [=] (auto keyIt) { + std::for_each(balances.keyBegin(), balances.keyEnd(), [=, &anyz, &anyt] (auto keyIt) { modeldata->push_back(std::make_tuple(keyIt, balances.value(keyIt))); + if (Settings::isZAddress(keyIt)) { + anyz = true; + } else if (Settings::isTAddress(keyIt)) { + anyt = true; + } }); - // Add all addresses that have no balances as well - for (auto zaddr: zaddrs) { - if (!balances.contains(zaddr)) { - modeldata->push_back(std::make_tuple(zaddr, CAmount::fromqint64(0))); - } + // Add all addresses that have no balances, if there are no existing addresses + if (!anyz && zaddrs.length() > 0) { + modeldata->push_back(std::make_tuple(zaddrs[0], CAmount::fromqint64(0))); } - for (auto taddr: taddrs) { - if (!balances.contains(taddr)) { - modeldata->push_back(std::make_tuple(taddr, CAmount::fromqint64(0))); - } + if (!anyt && taddrs.length() > 0) { + modeldata->push_back(std::make_tuple(taddrs[0], CAmount::fromqint64(0))); } // And then update the data diff --git a/src/camount.h b/src/camount.h index b5d88b9..2063903 100644 --- a/src/camount.h +++ b/src/camount.h @@ -71,6 +71,9 @@ public: bool operator> (const CAmount& other) const { return this->amount > other.amount; } + bool operator== (const qint64 other) const { + return this->amount == other; + } }; #endif // CAMOUNT_H diff --git a/src/controller.cpp b/src/controller.cpp index d181cab..f6eac3b 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -353,6 +353,9 @@ void Controller::updateUIBalances() { CAmount balTotal = balT + balZ; CAmount balAvailable = balT + balVerified; + if (balZ < 0) { + balZ = CAmount::fromqint64(0); + } // Balances table ui->balSheilded ->setText(balZ.toDecimalhushString()); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6ae47eb..21913a1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -457,8 +457,8 @@ void MainWindow::setupSettingsModal() { settings.chkFetchPrices->setChecked(Settings::getInstance()->getAllowFetchPrices()); // List of default servers + settings.cmbServer->addItem("https://lite.myhush.org"); settings.cmbServer->addItem("https://hush-lightwallet.de:443"); - settings.cmbServer->addItem("https://lite.myhush.org:443"); // Load current values into the dialog auto conf = Settings::getInstance()->getSettings(); @@ -1048,8 +1048,7 @@ void MainWindow::setupReceiveTab() { updateTAddrCombo(checked); } - // Toggle the "View all addresses" button as well - ui->btnViewAllAddresses->setVisible(checked); + }); // View all addresses goes to "View all private keys" @@ -1065,7 +1064,14 @@ void MainWindow::setupReceiveTab() { Settings::saveRestoreTableHeader(viewaddrs.tblAddresses, &d, "viewalladdressestable"); viewaddrs.tblAddresses->horizontalHeader()->setStretchLastSection(true); - ViewAllAddressesModel model(viewaddrs.tblAddresses, getRPC()->getModel()->getAllTAddresses(), getRPC()); + QList allAddresses; + if (ui->rdioTAddr->isChecked()) { + allAddresses = getRPC()->getModel()->getAllTAddresses(); + } else { + allAddresses = getRPC()->getModel()->getAllZAddresses(); + } + + ViewAllAddressesModel model(viewaddrs.tblAddresses, allAddresses, getRPC()); viewaddrs.tblAddresses->setModel(&model); QObject::connect(viewaddrs.btnExportAll, &QPushButton::clicked, this, &MainWindow::exportAllKeys); @@ -1100,6 +1106,20 @@ void MainWindow::setupReceiveTab() { QObject::connect(ui->btnReceiveNewAddr, &QPushButton::clicked, [=] () { if (!rpc->getConnection()) return; + + // Go over the dropdown and just select the next address that has: + // 0 balance and has no labels + for (int i=ui->listReceiveAddresses->currentIndex()+1; i < ui->listReceiveAddresses->count(); i++) { + QString item = ui->listReceiveAddresses->itemText(i); + CAmount bal = getRPC()->getModel()->getAllBalances().value(item, CAmount()); + if (bal == 0 && AddressBook::getInstance()->getLabelForAddress(item).isEmpty()) { + // Pick this one, since it has no balance and no label + ui->listReceiveAddresses->setCurrentIndex(i); + return; + } + } + + // If none of the existing items were eligible, create a new one. if (ui->rdioZSAddr->isChecked()) { addNewZaddr(true); @@ -1113,7 +1133,7 @@ void MainWindow::setupReceiveTab() { if (tab == 2) { // Switched to receive tab, select the z-addr radio button ui->rdioZSAddr->setChecked(true); - ui->btnViewAllAddresses->setVisible(false); + // And then select the first one ui->listReceiveAddresses->setCurrentIndex(0); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index a8d0998..87a5a78 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -770,7 +770,7 @@ - New Address + Next Address diff --git a/src/settings.cpp b/src/settings.cpp index e9cd886..fbfb1cb 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -263,7 +263,7 @@ void Settings::saveRestoreTableHeader(QTableView* table, QDialog* d, QString tab } QString Settings::getDefaultServer() { - return "https://hush-lightwallet.de:443"; + return "https://lite.myhush.org"; } void Settings::openAddressInExplorer(QString address) {