diff --git a/lib/Cargo.lock b/lib/Cargo.lock index 2166ad1..b74002a 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -1849,7 +1849,7 @@ dependencies = [ [[package]] name = "silentdragonlitelib" version = "0.1.0" -source = "git+https://git.hush.is/hush/silentdragonlite-cli?rev=568d7b7860ec0b848cb84474f38b25bed890de09#568d7b7860ec0b848cb84474f38b25bed890de09" +source = "git+https://git.hush.is/hush/silentdragonlite-cli?rev=1334c89e0f4ddd23725020e16753d0ea95c09bf5#1334c89e0f4ddd23725020e16753d0ea95c09bf5" dependencies = [ "base58", "bellman", diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 2bc90af..c25ef8d 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -12,4 +12,4 @@ crate-type = ["staticlib"] libc = "0.2.58" lazy_static = "1.4.0" blake3 = "0.3.4" -silentdragonlitelib = { git = "https://git.hush.is/hush/silentdragonlite-cli", rev = "568d7b7860ec0b848cb84474f38b25bed890de09" } +silentdragonlitelib = { git = "https://git.hush.is/hush/silentdragonlite-cli", rev = "1334c89e0f4ddd23725020e16753d0ea95c09bf5" } diff --git a/lib/silentdragonlitelib.h b/lib/silentdragonlitelib.h index ef856d8..982b2d5 100644 --- a/lib/silentdragonlitelib.h +++ b/lib/silentdragonlitelib.h @@ -14,6 +14,7 @@ extern char * litelib_initialize_existing (bool dangerous,const char* server); extern char * litelib_execute (const char* s, const char* args); extern void litelib_rust_free_string (char* s); extern char * blake3_PW (char* pw); +extern bool litelib_check_server_online (const char* server); #ifdef __cplusplus } diff --git a/lib/src/lib.rs b/lib/src/lib.rs index d78c23d..afb398f 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -245,6 +245,24 @@ pub extern fn litelib_execute(cmd: *const c_char, args: *const c_char) -> *mut c return c_str.into_raw(); } +// Check is Server Connection is fine +#[no_mangle] +pub extern "C" fn litelib_check_server_online(server: *const c_char) -> bool { + let server_str = unsafe { + assert!(!server.is_null()); + + CStr::from_ptr(server).to_string_lossy().into_owned() + }; + + let server = LightClientConfig::get_server_or_default(Some(server_str)); + let result = LightClientConfig::create(server, false); + + match result { + Ok(_) => true, + Err(_) => false, + } +} + /** * Callers that receive string return values from other functions should call this to return the string * back to rust, so it can be freed. Failure to call this function will result in a memory leak diff --git a/src/controller.cpp b/src/controller.cpp index c597158..89fc73f 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -35,8 +35,8 @@ Controller::Controller(MainWindow* main) auto current_server = Settings::getInstance()->getSettings().server; main->ui->current_server->setText(current_server); - auto stickyServer = Settings::getInstance()->getSettings().stickyServer; - main->ui->sticky_server->setText( stickyServer ? "True" : "False" ); + bool isStickyServerEnabled = Settings::getInstance()->getUseStickyServer(); + main->ui->sticky_server->setText( isStickyServerEnabled ? "True" : "False" ); // Setup balances table model balancesTableModel = new BalancesTableModel(main->ui->balancesTable); @@ -166,8 +166,6 @@ void Controller::fillTxJsonParams(json& allRecepients, Tx tx) // Only for Debugging/Testing: How many free Notes are available? int spendableNotesCount = NoteCountDataStore::getInstance()->getSpendableNotesCount(); QString addressWithMaxValue = NoteCountDataStore::getInstance()->getAddressWithMaxValue(); - - qDebug() << "Available notes over fee:" << spendableNotesCount; // Clear NoteCountDataStore DataStore::getNoteCountDataStore()->clear(); @@ -191,8 +189,12 @@ void Controller::fillTxJsonParams(json& allRecepients, Tx tx) } CAmount balanceAvailable = getModel()->getBalVerified(); - // Create more Notes if spendableNotesCount < 30 and enough funds are available - if (spendableNotesCount < 30 && balanceAvailable.toDecimalString().toDouble() > (dustTransactions.size() * 0.0001)) { + bool isNoteAutomationEnabled = Settings::getInstance()->getUseNoteAutomation(); + // Create more Notes if spendableNotesCount < 30 and enough funds are available and note automation is checked in settings tab + + if (spendableNotesCount < 30 && + balanceAvailable.toDecimalString().toDouble() > (dustTransactions.size() * 0.0001) && + isNoteAutomationEnabled) { // Create extra transaction for (size_t i = 0; i < dustTransactions.size(); ++i) { // Generate random memo diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 8137b60..231dad7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -838,7 +838,13 @@ void MainWindow::setupSettingsModal() { // Fetch prices settings.chkFetchPrices->setChecked(Settings::getInstance()->getAllowFetchPrices()); - + + // Check Status of StickyServer + settings.chkUseStickyServer->setChecked(Settings::getInstance()->getUseStickyServer()); + + // Check Status of Note Automation + settings.chkUseNoteAutomation->setChecked(Settings::getInstance()->getUseNoteAutomation()); + // List of default servers settings.cmbServer->addItem("https://lite.hush.is"); settings.cmbServer->addItem("https://lite.hush.land"); @@ -867,6 +873,13 @@ void MainWindow::setupSettingsModal() { // Allow fetching prices Settings::getInstance()->setAllowFetchPrices(settings.chkFetchPrices->isChecked()); + // Set State for Use Sticky Server + Settings::getInstance()->setUseStickyServer(settings.chkUseStickyServer->isChecked()); + + // Set State for Use Note Automation + Settings::getInstance()->setUseNoteAutomation(settings.chkUseNoteAutomation->isChecked()); + + // Save the server bool reloadConnection = false; if (conf.server != settings.cmbServer->currentText().trimmed()) { diff --git a/src/sendtab.cpp b/src/sendtab.cpp index 38bd5e1..d32a987 100644 --- a/src/sendtab.cpp +++ b/src/sendtab.cpp @@ -881,8 +881,8 @@ void MainWindow::sendButton() { ui->tabWidget->setCurrentIndex(0); }); - auto stickyServer = Settings::getInstance()->getSettings().stickyServer; - if(stickyServer) { + bool isStickyServerEnabled = Settings::getInstance()->getUseStickyServer(); + if(isStickyServerEnabled) { qDebug() << "Not changing servers because stickyServer=1"; } else { // After each transaction, change servers to spread out diff --git a/src/settings.cpp b/src/settings.cpp index 3389412..40a9224 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -37,16 +37,15 @@ Config Settings::getSettings() { if (server.trimmed().isEmpty()) { server = Settings::getRandomServer(); - QString response = ""; + bool isOnline = false; // make sure existing server in conf is alive, otherwise choose random one try { - char* resp = litelib_initialize_existing(false, server.toStdString().c_str()); - response = litelib_process_response(resp); + bool isOnline = litelib_check_server_online(server.toStdString().c_str()); } catch (const std::exception& e) { qDebug() << __func__ << ": caught an exception, ignoring: " << e.what(); } - if (response.toUpper().trimmed() != "OK") { + if (!isOnline) { qDebug() << "Lite server in conf " << server << " is down, getting a random one"; server = Settings::getRandomServer(); s.setValue("connection/server", server); @@ -250,6 +249,22 @@ void Settings::setAllowFetchPrices(bool allow) { QSettings().setValue("options/allowfetchprices", allow); } +bool Settings::getUseStickyServer() { + return QSettings().value("connection/stickyServer", false).toBool(); +} + +void Settings::setUseStickyServer(bool allow) { + QSettings().setValue("connection/stickyServer", allow); +} + +bool Settings::getUseNoteAutomation() { + return QSettings().value("options/useNoteAutomation", true).toBool(); +} + +void Settings::setUseNoteAutomation(bool allow) { + QSettings().setValue("options/useNoteAutomation", allow); +} + QString Settings::get_currency_name() { // Load from the QT Settings. return QSettings().value("options/currency_name", false).toString(); @@ -317,17 +332,16 @@ QString Settings::getRandomServer() { while (tries < servers.size() ) { qDebug() << "Checking if lite server " << server << " is a alive, try=" << tries; - QString response = ""; + bool isOnline = ""; try { - char* resp = litelib_initialize_existing(false, server.toStdString().c_str()); - response = litelib_process_response(resp); + isOnline = litelib_check_server_online(server.toStdString().c_str()); } catch (const std::exception& e) { qDebug() << __func__ << ": caught an exception, ignoring: " << e.what(); } - // if we see a valid connection, return this server - if (response.toUpper().trimmed() == "OK") { + // if we see a valid connection, return this server. + if (isOnline) { qDebug() << "Choosing lite server " << server; return server; } diff --git a/src/settings.h b/src/settings.h index 376131b..30b9434 100644 --- a/src/settings.h +++ b/src/settings.h @@ -66,6 +66,12 @@ public: bool getCheckForUpdates(); void setCheckForUpdates(bool allow); + bool getUseStickyServer(); + void setUseStickyServer(bool allow); + + bool getUseNoteAutomation(); + void setUseNoteAutomation(bool allow); + QString get_theme_name(); void set_theme_name(QString theme_name); diff --git a/src/settings.ui b/src/settings.ui index 5bf80df..4eed716 100644 --- a/src/settings.ui +++ b/src/settings.ui @@ -38,7 +38,7 @@ - 1 + 0 @@ -79,6 +79,20 @@ + + + + Use Sticky Server + + + + + + + Uses a fixed server instead of random + + + @@ -87,7 +101,7 @@ 20 - 40 + 20 @@ -102,7 +116,7 @@ 80 - 110 + 190 111 25 @@ -178,11 +192,27 @@ Connect to git on startup to check for updates + + + + 10 + 110 + 200 + 23 + + + + Use Note Automation + + + true + + - 9 - 113 + 10 + 190 47 17 @@ -203,8 +233,8 @@ - 10 - 180 + 0 + 300 691 16 @@ -222,7 +252,7 @@ - 9 + 10 90 601 17 @@ -236,7 +266,7 @@ 10 - 150 + 230 61 20 @@ -258,7 +288,7 @@ 80 - 150 + 230 111 25 @@ -320,6 +350,19 @@ + + + + 10 + 140 + 601 + 17 + + + + Increases the number of zutxo for instant hushchat + +