From ae39980c137e28294294df21847276ddb8cfd22e Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 20:15:51 +0200 Subject: [PATCH 01/37] delete image --- application.qrc | 1 - 1 file changed, 1 deletion(-) diff --git a/application.qrc b/application.qrc index cd094ae..716471d 100644 --- a/application.qrc +++ b/application.qrc @@ -47,7 +47,6 @@ res/addContactBlack.png res/unknownBlack.png res/unknownWhite.png - res/hush-passion.png res/dark-01.png From be0c1018bc38f3f52c35bdd487deb2712ebf5fc8 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 20:30:29 +0200 Subject: [PATCH 02/37] add loging for encryption --- src/controller.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/controller.cpp b/src/controller.cpp index 7042a3f..2fe7221 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -1083,7 +1083,7 @@ void Controller::refreshTransactions() { if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0) { - // ? + main->logger->write("Keypair outgoing error"); } unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES]; @@ -1095,7 +1095,7 @@ void Controller::refreshTransactions() { if (crypto_kx_server_session_keys(server_rx, server_tx, pk, sk, pubkeyBob) != 0) { - /* Suspicious client public key, bail out */ + main->logger->write("Suspicious client public outgoing key, bail out "); } const QByteArray ba = QByteArray::fromHex(memo.toUtf8()); @@ -1108,7 +1108,7 @@ void Controller::refreshTransactions() { QString memodecrypt; - if (encryptedMemoSize1 > 15) + if ((encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES) > 0) { //////unsigned char* as message from QString #define MESSAGE2 (const unsigned char *) encryptedMemo @@ -1143,6 +1143,7 @@ void Controller::refreshTransactions() { } else { + memodecrypt = ""; } @@ -1306,7 +1307,9 @@ void Controller::refreshTransactions() { int position = it.toObject()["position"].toInt(); - if ((memo.startsWith("{") == false) && (headerbytes > 0)) + int ciphercheck = memo.length() - crypto_secretstream_xchacha20poly1305_ABYTES; + + if ((memo.startsWith("{") == false) && (headerbytes > 0) && (ciphercheck > 0)) { if (chatModel->getMemoByTx(txid) == QString("0xdeadbeef")) { @@ -1337,7 +1340,7 @@ void Controller::refreshTransactions() { if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0) { - // + main->logger->write("Suspicious outgoing key pair, bail out "); } unsigned char client_rx[crypto_kx_SESSIONKEYBYTES], client_tx[crypto_kx_SESSIONKEYBYTES]; @@ -1348,7 +1351,7 @@ void Controller::refreshTransactions() { if (crypto_kx_client_session_keys(client_rx, client_tx, pk, sk, pubkeyBob) != 0) { - /* Suspicious client public key, bail out */ + main->logger->write("Suspicious client public incoming key, bail out "); } const QByteArray ba = QByteArray::fromHex(memo.toUtf8()); @@ -1379,12 +1382,12 @@ void Controller::refreshTransactions() { /////Only the QString gives weird data, so convert first to std::string // crypto_secretstream_xchacha20poly1305_keygen(client_rx); if (crypto_secretstream_xchacha20poly1305_init_pull(&state, header, client_rx) != 0) { - /* Invalid header, no need to go any further */ + main->logger->write("Invalid header incoming, no need to go any further "); } if (crypto_secretstream_xchacha20poly1305_pull (&state, decrypted, NULL, tag, MESSAGE2, CIPHERTEXT1_LEN, NULL, 0) != 0) { - /* Invalid/incomplete/corrupted ciphertext - abort */ + main->logger->write("Invalid/incomplete/corrupted ciphertext - abort"); } std::string decryptedMemo(reinterpret_cast(decrypted),MESSAGE1_LEN); From 4a00126b982d450e9e6b61d890ef1546b113cff8 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 20:50:44 +0200 Subject: [PATCH 03/37] add more logging --- src/chatmodel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index a0012f9..712828a 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -466,6 +466,8 @@ Tx MainWindow::createTxFromChatPage() { if (crypto_kx_seed_keypair(pk,sk, MESSAGEAS1) !=0) { + + this->logger->write("Suspicious keypair, bail out "); } ////////////////Get the pubkey from Bob, so we can create the share key @@ -475,7 +477,7 @@ Tx MainWindow::createTxFromChatPage() { if (crypto_kx_server_session_keys(server_rx, server_tx, pk, sk, pubkeyBob) != 0) { - /* Suspicious client public key, bail out */ + this->logger->write("Suspicious client public send key, bail out "); } @@ -796,7 +798,7 @@ Tx MainWindow::createTxForSafeContactRequest() unsigned char pk[crypto_kx_PUBLICKEYBYTES]; if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0) { - // + this->logger->write("Suspicious client public contact request key, bail out "); } QString publicKey = QByteArray(reinterpret_cast(pk), crypto_kx_PUBLICKEYBYTES).toHex(); @@ -828,8 +830,6 @@ void MainWindow::ContactRequest() { if (size > max){ - // auto addr = ""; - // if (! Settings::isZAddress(AddressBook::addressFromAddressLabel(addr->text()))) { QMessageBox msg(QMessageBox::Critical, tr("Your Message is too long"), tr("You can only write messages with 512 character maximum \n") + tr("\n Please reduce your message to 235 character."), QMessageBox::Ok, this); From 4c08bffc362fe5538c46f06236ed1251c43567e3 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 21:13:58 +0200 Subject: [PATCH 04/37] add more logging --- src/connection.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/connection.cpp b/src/connection.cpp index 7cad23f..d812ff3 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -159,12 +159,25 @@ void ConnectionLoader::createOrRestore(bool dangerous, QString server) void ConnectionLoader::doRPCSetConnection(Connection* conn) { qDebug() << "Connectionloader finished, setting connection"; + main->logger->write("Connectionloader finished, setting connection"); rpc->setConnection(conn); d->accept(); QTimer::singleShot(1, [=]() { delete this; }); +try +{ + QFile plaintextWallet(dirwalletconnection); + main->logger->write("Path to Wallet.dat : " ); plaintextWallet.remove(); + +}catch (...) + +{ + + main->logger->write("no Plaintext wallet.dat"); +} + } Connection* ConnectionLoader::makeConnection(std::shared_ptr config) From 1413f7b6103e32ad0dd404e7d77344c2412533bb Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:44:55 +0200 Subject: [PATCH 05/37] add more log output --- src/connection.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/connection.cpp b/src/connection.cpp index d812ff3..220b4a8 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -105,11 +105,14 @@ void ConnectionLoader::doAutoConnect() // If success, set the connection main->logger->write("Connection is online."); connection->setInfo(reply); + main->logger->write("getting Connection reply"); isSyncing = new QAtomicInteger(); isSyncing->storeRelaxed(true); + main->logger->write("isSyncing"); // Do a sync at startup syncTimer = new QTimer(main); + main->logger->write("Beginning sync"); connection->doRPCWithDefaultErrorHandling("sync", "", [=](QJsonValue) { isSyncing->storeRelaxed(false); // Cancel the timer @@ -124,10 +127,13 @@ void ConnectionLoader::doAutoConnect() if (isSyncing != nullptr && isSyncing->loadRelaxed()) { // Get the sync status connection->doRPC("syncstatus", "", [=](QJsonValue reply) { + if (isSyncing != nullptr && !reply.toObject()["synced_blocks"].isUndefined()) { qint64 synced = reply["synced_blocks"].toInt(); + main->logger->write("synced_blocks" + synced) ; qint64 total = reply["total_blocks"].toInt(); + main->logger->write("total_blocks" + total) ; me->showInformation( "Synced " + QString::number(synced) + " / " + QString::number(total) ); From e96f8a193dbd01bdbc6acf333c06c61bfb5e2712 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:47:01 +0200 Subject: [PATCH 06/37] add more log output --- src/connection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/connection.cpp b/src/connection.cpp index 220b4a8..e584da0 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -147,6 +147,7 @@ void ConnectionLoader::doAutoConnect() syncTimer->setInterval(1* 1000); syncTimer->start(); + main->logger->write("Start sync timer"); }, [=](QString err) { showError(err); @@ -159,6 +160,7 @@ void ConnectionLoader::createOrRestore(bool dangerous, QString server) d->hide(); // Create a wizard FirstTimeWizard wizard(dangerous, server); + main->logger->write("Start new Wallet with FirstimeWizard"); wizard.exec(); } From 28260c36cde2c84a10ef768bb55413d87b54fef5 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 20 Jun 2020 21:30:18 +0200 Subject: [PATCH 07/37] gui for sending and request Hush over Chat --- src/sendHushTransactionChat.ui | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/sendHushTransactionChat.ui diff --git a/src/sendHushTransactionChat.ui b/src/sendHushTransactionChat.ui new file mode 100644 index 0000000..fb923db --- /dev/null +++ b/src/sendHushTransactionChat.ui @@ -0,0 +1,72 @@ + + + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + + From 791a54157fc73ab9c1938454ec713f43c0036525 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 20 Jun 2020 22:38:28 +0200 Subject: [PATCH 08/37] add send Hush to a friend --- silentdragon-lite.pro | 1 + src/mainwindow.cpp | 58 +++++--- src/sendHushTransactionChat.ui | 243 ++++++++++++++++++++++++++------- 3 files changed, 237 insertions(+), 65 deletions(-) diff --git a/silentdragon-lite.pro b/silentdragon-lite.pro index 4338b4b..60d9b13 100644 --- a/silentdragon-lite.pro +++ b/silentdragon-lite.pro @@ -129,6 +129,7 @@ FORMS += \ src/newwallet.ui \ src/recurringpayments.ui \ src/restoreseed.ui \ + src/sendHushTransactionChat.ui \ src/settings.ui \ src/about.ui \ src/confirm.ui \ diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6910eff..6ed707a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -17,6 +17,7 @@ #include "settings.h" #include "version.h" #include "connection.h" +#include "ui_sendHushTransactionChat.h" #include "ui_contactrequest.h" #include "ui_deposithush.h" #include "ui_requestContactDialog.h" @@ -1465,8 +1466,7 @@ void MainWindow::setupchatTab() { contextMenu = new QMenu(ui->listContactWidget); requestAction = new QAction("Send a contact request - coming soon",contextMenu); editAction = new QAction("Delete this contact",contextMenu); - HushAction = new QAction("Send a friend some Hush - coming soon",contextMenu); - requestHushAction = new QAction("Request some Hush - coming soon",contextMenu); + HushAction = new QAction("Send or Request some Hush - coming soon",contextMenu); subatomicAction = new QAction("Make a subatomic swap with a friend- coming soon",contextMenu); @@ -1478,23 +1478,54 @@ void MainWindow::setupchatTab() { ui->listContactWidget->addAction(requestAction); ui->listContactWidget->addAction(editAction); ui->listContactWidget->addAction(HushAction); - ui->listContactWidget->addAction(requestHushAction); ui->listContactWidget->addAction(subatomicAction); ui->memoTxtChat->setEnabled(true); - /*QObject::connect(requestHushAction, &QAction::triggered, [=]() { QModelIndex index = ui->listContactWidget->currentIndex(); - QString label_contact = index.data(Qt::DisplayRole).toString(); + QString label_contact = index.data(Qt::DisplayRole).toString(); for(auto &p : AddressBook::getInstance()->getAllAddressLabels()) if (label_contact == p.getName()) { ui->contactNameMemo->setText(p.getName()); rpc->refresh(true); + + } + }); + + QObject::connect(HushAction, &QAction::triggered, [=]() { + + QModelIndex index = ui->listContactWidget->currentIndex(); + QString label_contact = index.data(Qt::DisplayRole).toString(); + + QDialog transactionDialog(this); + Ui_transactionHush transaction; + transaction.setupUi(&transactionDialog); + + + + for(auto &p : AddressBook::getInstance()->getAllAddressLabels()) + if (label_contact == p.getName()) { + // Settings::saveRestore(&transactionDialog); + QStandardItemModel* contact = new QStandardItemModel(); + QString avatar = p.getAvatar(); + QStandardItem* Items1 = new QStandardItem(p.getName()); + Items1->setData(QIcon(avatar),Qt::DecorationRole); + contact->appendRow(Items1); + transaction.contactName->setModel(contact); + transaction.contactName->setIconSize(QSize(60,70)); + transaction.contactName->setUniformItemSizes(true); + transaction.contactName->setDragDropMode(QAbstractItemView::DropOnly); + transaction.contactName->show(); + + + QString amt = transaction.amountChat->text(); + qDebug()<<"AMT : " << amt; } - MainWindow::showRequesthush(); - - }); */ + + transactionDialog.exec(); + + }); QObject::connect(editAction, &QAction::triggered, [=]() { QModelIndex index = ui->listContactWidget->currentIndex(); @@ -1517,16 +1548,7 @@ void MainWindow::setupchatTab() { } }); - QModelIndex index = ui->listContactWidget->currentIndex(); - QString label_contact = index.data(Qt::DisplayRole).toString(); - - for(auto &p : AddressBook::getInstance()->getAllAddressLabels()) - if (label_contact == p.getName()) { - ui->contactNameMemo->setText(p.getName()); - rpc->refresh(true); - - } - }); + ui->memoTxtChat->setLenDisplayLabelChat(ui->memoSizeChat); diff --git a/src/sendHushTransactionChat.ui b/src/sendHushTransactionChat.ui index fb923db..936e38f 100644 --- a/src/sendHushTransactionChat.ui +++ b/src/sendHushTransactionChat.ui @@ -1,67 +1,217 @@ - - - - - Dialog - - + + + transactionHush + + 0 0 - 400 - 300 + 530 + 377 - + Dialog - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + + 16777215 + 20 + + + + <html><head/><body><p align="center"><span style=" font-weight:600;">Send or Request some Hush</span></p></body></html> + + + + + + + To : + + + + + + + Qt::Vertical + + + + 20 + 65 + + + + + + + + QLayout::SetFixedSize + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + 16777215 + 70 + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::NoEditTriggers + + + false + + + + + + + + + Qt::Vertical + + + + 20 + 79 + + + + + + + + + + Amount: + + + + + + + + 200 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Amount + + + + + + + + + Qt::Vertical + + + + 20 + 64 + + + + + + + + QLayout::SetFixedSize + + + 6 + + + 6 + + + 6 + + + 6 + + + + + Request Hush + + + + + + + + 16777215 + 25 + + + + Send Hush + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel + + + + + + + Hush + + + + - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - buttonBox rejected() - Dialog + transactionHush reject() - + 316 260 - + 286 274 @@ -69,4 +219,3 @@ - From c3cd34da94eac8159294bd56c9f3102ee29696a8 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 20 Jun 2020 22:39:04 +0200 Subject: [PATCH 09/37] add send Hush to a friend --- src/DataStore/ChatDataStore.cpp | 40 ++++ src/DataStore/ChatDataStore.h | 2 + src/mainwindow.cpp | 311 +++++++++++++++++++++++++++++++- src/mainwindow.h | 7 +- src/sendHushTransactionChat.ui | 4 +- 5 files changed, 353 insertions(+), 11 deletions(-) diff --git a/src/DataStore/ChatDataStore.cpp b/src/DataStore/ChatDataStore.cpp index f8335a6..2818b3a 100644 --- a/src/DataStore/ChatDataStore.cpp +++ b/src/DataStore/ChatDataStore.cpp @@ -116,6 +116,46 @@ std::map ChatDataStore::getAllOldContactRequests() return filteredItems; } +std::map ChatDataStore::getAllCashMemosIncoming() +{ + std::map filteredItems; + + for(auto &c: this->data) + { + if ( + (c.second.isOutgoing() == false) && + (c.second.getType() == "Money") && + (c.second.getMemo().startsWith("{")) + + ) + + { + filteredItems[c.first] = c.second; + } + } + return filteredItems; +} + +std::map ChatDataStore::getAllCashMemosOutgoing() +{ + std::map filteredItems; + + for(auto &c: this->data) + { + if ( + (c.second.isOutgoing() == true) && + (c.second.getType() == "Money") && + (c.second.getMemo().startsWith("{")) + + ) + + { + filteredItems[c.first] = c.second; + } + } + return filteredItems; +} + std::map ChatDataStore::getAllMemos() { std::map filteredItems; diff --git a/src/DataStore/ChatDataStore.h b/src/DataStore/ChatDataStore.h index f31ce7b..276ed53 100644 --- a/src/DataStore/ChatDataStore.h +++ b/src/DataStore/ChatDataStore.h @@ -22,6 +22,8 @@ class ChatDataStore ChatItem getData(QString key); std::map getAllRawChatItems(); std::map getAllNewContactRequests(); + std::map getAllCashMemosOutgoing(); + std::map getAllCashMemosIncoming(); std::map getAllOldContactRequests(); std::map getAllMemos(); QString getPassword(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6ed707a..27c1327 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -606,6 +606,18 @@ void MainWindow::setPassword(QString password) _password = password; } +QString MainWindow::getAmt() +{ + + return _amt; +} + +void MainWindow::setAmt(QString amt) +{ + + _amt = amt; +} + void MainWindow::setupStatusBar() { // Status Bar loadingLabel = new QLabel(); @@ -1464,9 +1476,9 @@ void MainWindow::setupchatTab() { QAction* requestHushAction; QAction* subatomicAction; contextMenu = new QMenu(ui->listContactWidget); - requestAction = new QAction("Send a contact request - coming soon",contextMenu); + HushAction = new QAction("Send or Request some Hush ",contextMenu); editAction = new QAction("Delete this contact",contextMenu); - HushAction = new QAction("Send or Request some Hush - coming soon",contextMenu); + requestAction = new QAction("Send a contact request - coming soon",contextMenu); subatomicAction = new QAction("Make a subatomic swap with a friend- coming soon",contextMenu); @@ -1497,15 +1509,16 @@ void MainWindow::setupchatTab() { QModelIndex index = ui->listContactWidget->currentIndex(); QString label_contact = index.data(Qt::DisplayRole).toString(); - QDialog transactionDialog(this); Ui_transactionHush transaction; + QDialog transactionDialog(this); transaction.setupUi(&transactionDialog); + Settings::saveRestore(&transactionDialog); for(auto &p : AddressBook::getInstance()->getAllAddressLabels()) if (label_contact == p.getName()) { - // Settings::saveRestore(&transactionDialog); + QStandardItemModel* contact = new QStandardItemModel(); QString avatar = p.getAvatar(); QStandardItem* Items1 = new QStandardItem(p.getName()); @@ -1517,11 +1530,17 @@ void MainWindow::setupchatTab() { transaction.contactName->setDragDropMode(QAbstractItemView::DropOnly); transaction.contactName->show(); - - QString amt = transaction.amountChat->text(); - qDebug()<<"AMT : " << amt; - } + + QObject::connect(transaction.sendHush, &QPushButton::clicked, [&] (){ + QString amt = transaction.amountChat->text(); + this->setAmt(amt); + transactionDialog.close(); + }); + + QObject::connect(transaction.sendHush, &QPushButton::clicked, this , &MainWindow::sendMoneyChat); + + transactionDialog.exec(); @@ -1554,6 +1573,282 @@ ui->memoTxtChat->setLenDisplayLabelChat(ui->memoSizeChat); } +// Create a Tx from the current state of the Chat page. +Tx MainWindow::createTxFromSendChatPage() { + Tx tx; + CAmount totalAmt; + // For each addr/amt in the Chat tab + { + + QString amtStr = this->getAmt(); + CAmount amt; + CAmount amtHm; + + amt = CAmount::fromDecimalString(amtStr); + amtHm = CAmount::fromDecimalString("0"); + totalAmt = totalAmt + amt; + + QModelIndex index = ui->listContactWidget->currentIndex(); + QString label_contact = index.data(Qt::DisplayRole).toString(); + + for(auto &c : AddressBook::getInstance()->getAllAddressLabels()) + + if (label_contact == c.getName()) { + + QString cid = c.getCid(); + QString myAddr = c.getMyAddress(); + QString type = "Money"; + QString addr = c.getPartnerAddress(); + + /////////User input for chatmemos + QString memoplain = QString("You have received/sent ") + amtStr + QString(" HUSH") ; + + /////////We convert the user input from QString to unsigned char*, so we can encrypt it later + int lengthmemo = memoplain.length(); + + char *memoplainchar = NULL; + memoplainchar = new char[lengthmemo+2]; + strncpy(memoplainchar, memoplain.toUtf8(), lengthmemo +1); + + QString pubkey = this->getPubkeyByAddress(addr); + QString passphraseHash = DataStore::getChatDataStore()->getPassword(); + int length = passphraseHash.length(); + + ////////////////Generate the secretkey for our message encryption + + char *hashEncryptionKeyraw = NULL; + hashEncryptionKeyraw = new char[length+1]; + strncpy(hashEncryptionKeyraw, passphraseHash.toUtf8(), length+1); + + #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) + #define MESSAGEAS1_LEN length + + + unsigned char sk[crypto_kx_SECRETKEYBYTES]; + unsigned char pk[crypto_kx_PUBLICKEYBYTES]; + unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES]; + + if (crypto_kx_seed_keypair(pk,sk, + MESSAGEAS1) !=0) { + + this->logger->write("Suspicious keypair, bail out "); + } + ////////////////Get the pubkey from Bob, so we can create the share key + + const QByteArray pubkeyBobArray = QByteArray::fromHex(pubkey.toLatin1()); + const unsigned char *pubkeyBob = reinterpret_cast(pubkeyBobArray.constData()); + /////Create the shared key for sending the message + + if (crypto_kx_server_session_keys(server_rx, server_tx, + pk, sk, pubkeyBob) != 0) { + this->logger->write("Suspicious client public send key, bail out "); + } + + + // Let's try to preserve Unicode characters + QByteArray ba_memo = memoplain.toUtf8(); + int ba_memo_length = ba_memo.size(); + + #define MESSAGEMoney (const unsigned char *) ba_memo.data() + #define MESSAGE_LENMoney ba_memo_length + + + ////////////Now lets encrypt the message Alice send to Bob////////////////////////////// + //#define MESSAGE (const unsigned char *) memoplainchar + //#define MESSAGE_LEN lengthmemo + #define CIPHERTEXT_LEN (crypto_secretstream_xchacha20poly1305_ABYTES + MESSAGE_LENMoney) + unsigned char ciphertext[CIPHERTEXT_LEN]; + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES]; + + crypto_secretstream_xchacha20poly1305_state state; + + /* Set up a new stream: initialize the state and create the header */ + crypto_secretstream_xchacha20poly1305_init_push(&state, header, server_tx); + + + /* Now, encrypt the first chunk. `c1` will contain an encrypted, + * authenticated representation of `MESSAGE_PART1`. */ + crypto_secretstream_xchacha20poly1305_push + (&state, ciphertext, NULL, MESSAGEMoney, MESSAGE_LENMoney, NULL, 0, crypto_secretstream_xchacha20poly1305_TAG_FINAL); + + ////Create the HM for this message + QString headerbytes = QByteArray(reinterpret_cast(header), crypto_secretstream_xchacha20poly1305_HEADERBYTES).toHex(); + QString publickeyAlice = QByteArray(reinterpret_cast(pk), crypto_kx_PUBLICKEYBYTES).toHex(); + + + QString hmemo= createHeaderMemo(type,cid,myAddr,headerbytes,publickeyAlice,1,0); + + /////Ciphertext Memo + QString memo = QByteArray(reinterpret_cast(ciphertext), CIPHERTEXT_LEN).toHex(); + + + tx.toAddrs.push_back(ToFields{addr, amtHm, hmemo}); + tx.toAddrs.push_back(ToFields{addr, amt, memo}); + + } + } + + tx.fee = Settings::getMinerFee(); + + return tx; + +} + +void MainWindow::sendMoneyChat() { + +////////////////////////////Todo: Check if a Contact is selected////////// + + // Create a Tx from the values on the send tab. Note that this Tx object + // might not be valid yet. + + /* QString Name = ui->contactNameMemo->text(); + + if ((ui->contactNameMemo->text().isEmpty()) || (ui->memoTxtChat->toPlainText().trimmed().isEmpty())) { + + QMessageBox msg(QMessageBox::Critical, tr("You have to select a contact and insert a Memo"), + tr("You have selected no Contact from Contactlist,\n") + tr("\nor your Memo is empty"), + QMessageBox::Ok, this); + + msg.exec(); + return; + }*/ + + + Tx tx = createTxFromSendChatPage(); + + QString error = doSendChatMoneyTxValidations(tx); + + if (!error.isEmpty()) { + // Something went wrong, so show an error and exit + QMessageBox msg(QMessageBox::Critical, tr("Message Error"), error, + QMessageBox::Ok, this); + + msg.exec(); + + // abort the Tx + return; + } + + auto movie = new QMovie(this); + auto movie1 = new QMovie(this); + movie->setFileName(":/img/res/loaderblack.gif"); + movie1->setFileName(":/img/res/loaderwhite.gif"); + + auto theme = Settings::getInstance()->get_theme_name(); + if (theme == "Dark" || theme == "Midnight") { + + connect(movie, &QMovie::frameChanged, [=]{ + ui->sendChatButton->setIcon(movie->currentPixmap()); + }); + movie->start(); + ui->sendChatButton->show(); + ui->sendChatButton->setEnabled(false); + + } else { + + connect(movie1, &QMovie::frameChanged, [=]{ + ui->sendChatButton->setIcon(movie1->currentPixmap()); + }); + movie1->start(); + ui->sendChatButton->show(); + ui->sendChatButton->setEnabled(false); + } + + ui->memoTxtChat->clear(); + + // And send the Tx + rpc->executeTransaction(tx, + [=] (QString txid) { + ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); + + + QTimer::singleShot(1000, [=]() { + + if (theme == "Dark" || theme == "Midnight") { + QPixmap send(":/icons/res/send-white.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie->stop(); + ui->sendChatButton->setEnabled(true); + }else{ + + QPixmap send(":/icons/res/sendBlack.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie1->stop(); + ui->sendChatButton->setEnabled(true); + } + + }); + + // Force a UI update so we get the unconfirmed Tx + rpc->refresh(true); + ui->memoTxtChat->clear(); + + }, + // Errored out + [=] (QString opid, QString errStr) { + ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); + + if (!opid.isEmpty()) + errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; + + QMessageBox::critical(this, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); + movie->stop(); + + + if (theme == "Dark" || theme == "Midnight") { + QPixmap send(":/icons/res/send-white.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie->stop(); + ui->sendChatButton->setEnabled(true); + }else{ + + QPixmap send(":/icons/res/sendBlack.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie1->stop(); + ui->sendChatButton->setEnabled(true); + } + + + + } + ); + + } + +QString MainWindow::doSendChatMoneyTxValidations(Tx tx) { + // Check to see if we have enough verified funds to send the Tx. + + CAmount total; + for (auto toAddr : tx.toAddrs) { + if (!Settings::isValidAddress(toAddr.addr)) { + QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr); + return QString(tr("Recipient Address ")) % addr % tr(" is Invalid"); + } + + // This technically shouldn't be possible, but issue #62 seems to have discovered a bug + // somewhere, so just add a check to make sure. + if (toAddr.amount.toqint64() < 0) { + return QString(tr("Amount for address '%1' is invalid!").arg(toAddr.addr)); + } + + total = total + toAddr.amount; + } + total = total + tx.fee; + + auto available = rpc->getModel()->getAvailableBalance(); + + if (available < total) { + return tr("Not enough available funds to send this transaction\n\nHave: %1\nNeed: %2\n\nNote: Funds need 1 confirmations before they can be spent") + .arg(available.toDecimalhushString(), total.toDecimalhushString()); + } + + return ""; +} + void MainWindow::updateChat() { rpc->refreshChat(ui->listChat,ui->memoSizeChat); diff --git a/src/mainwindow.h b/src/mainwindow.h index 3550b5a..2cdf9ce 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -49,12 +49,15 @@ public: QString doSendTxValidations(Tx tx); QString doSendChatTxValidations(Tx tx); + QString doSendChatMoneyTxValidations(Tx tx); QString doSendRequestTxValidations(Tx tx); QString getCid(); + QString getAmt(); QString getPassword(); std::map pubkeyMap; QString getPubkeyByAddress(QString requestZaddr); void setPassword(QString Password); + void setAmt(QString Amt); void addPubkey(QString requestZaddr, QString pubkey); @@ -111,6 +114,7 @@ private: void closeEvent(QCloseEvent* event); void closeEventpw(QCloseEvent* event); QString _password; + QString _amt; void setupSendTab(); @@ -135,7 +139,7 @@ private: Tx createTxFromChatPage(); Tx createTxForSafeContactRequest(); - + Tx createTxFromSendChatPage(); void encryptWallet(); void removeWalletEncryption(); @@ -144,6 +148,7 @@ private: void cancelButton(); void sendButton(); void sendChat(); + void sendMoneyChat(); void addContact(); void ContactRequest(); diff --git a/src/sendHushTransactionChat.ui b/src/sendHushTransactionChat.ui index 936e38f..1d403c6 100644 --- a/src/sendHushTransactionChat.ui +++ b/src/sendHushTransactionChat.ui @@ -159,14 +159,14 @@ 6 - + Request Hush - + 16777215 From 0cc36a6fcd9559744f223b2e8a0252e0f9abedda Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 00:00:52 +0200 Subject: [PATCH 10/37] add .desktop --- application.qrc | 2 + res/money-mouth.png | Bin 0 -> 3233 bytes res/money-outgoing.png | Bin 0 -> 3102 bytes src/mainwindow.cpp | 24 +++++- src/mainwindow.h | 3 + src/sendHushTransactionChat.ui | 144 ++++++++++++++++++++------------- 6 files changed, 117 insertions(+), 56 deletions(-) create mode 100644 res/money-mouth.png create mode 100644 res/money-outgoing.png diff --git a/application.qrc b/application.qrc index 716471d..0332b5f 100644 --- a/application.qrc +++ b/application.qrc @@ -48,6 +48,8 @@ res/unknownBlack.png res/unknownWhite.png res/dark-01.png + res/money-mouth.png + res/money-outgoing.png res/hushdlogo.gif diff --git a/res/money-mouth.png b/res/money-mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..fc262f4d0a34755fee5ecb4801ca1124751bb7b7 GIT binary patch literal 3233 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 Tlp`lW00000NkvXXu0mjf;?6FR literal 0 HcmV?d00001 diff --git a/res/money-outgoing.png b/res/money-outgoing.png new file mode 100644 index 0000000000000000000000000000000000000000..c40b09bdf4a6ee3729966d853df323ff99bd3c7e GIT binary patch literal 3102 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 + transaction.requestHush->setVisible(false); + transaction.amountChat->setValidator(this->getAmountValidator()); @@ -1529,12 +1544,16 @@ void MainWindow::setupchatTab() { transaction.contactName->setUniformItemSizes(true); transaction.contactName->setDragDropMode(QAbstractItemView::DropOnly); transaction.contactName->show(); + } QObject::connect(transaction.sendHush, &QPushButton::clicked, [&] (){ + QString amt = transaction.amountChat->text(); - this->setAmt(amt); + QString memo = transaction.MemoMoney->text(); + this->setAmt(amt); + this->setMoneyMemo(memo); transactionDialog.close(); }); @@ -1599,9 +1618,10 @@ Tx MainWindow::createTxFromSendChatPage() { QString myAddr = c.getMyAddress(); QString type = "Money"; QString addr = c.getPartnerAddress(); + QString moneymemo = this->getMoneyMemo(); /////////User input for chatmemos - QString memoplain = QString("You have received/sent ") + amtStr + QString(" HUSH") ; + QString memoplain = QString("Money transaction of : ") + amtStr + QString(" HUSH") + QString("\n") + QString("\n") + moneymemo; /////////We convert the user input from QString to unsigned char*, so we can encrypt it later int lengthmemo = memoplain.length(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 2cdf9ce..3867de6 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -53,11 +53,13 @@ public: QString doSendRequestTxValidations(Tx tx); QString getCid(); QString getAmt(); + QString getMoneyMemo(); QString getPassword(); std::map pubkeyMap; QString getPubkeyByAddress(QString requestZaddr); void setPassword(QString Password); void setAmt(QString Amt); + void setMoneyMemo(QString MoneyMemo); void addPubkey(QString requestZaddr, QString pubkey); @@ -115,6 +117,7 @@ private: void closeEventpw(QCloseEvent* event); QString _password; QString _amt; + QString _moneymemo; void setupSendTab(); diff --git a/src/sendHushTransactionChat.ui b/src/sendHushTransactionChat.ui index 1d403c6..64b1e1d 100644 --- a/src/sendHushTransactionChat.ui +++ b/src/sendHushTransactionChat.ui @@ -6,48 +6,22 @@ 0 0 - 530 - 377 + 216 + 384 - Dialog + Send or Request Hush - - - - 16777215 - 20 - - - - <html><head/><body><p align="center"><span style=" font-weight:600;">Send or Request some Hush</span></p></body></html> - - - - To : - - - - Qt::Vertical - - - - 20 - 65 - - - - - + QLayout::SetFixedSize @@ -88,23 +62,31 @@ - - - - Qt::Vertical + + + + QLayout::SetFixedSize - - - 20 - 79 - + + 6 + + + 6 + + + 6 + + + 6 - - - - + + + 80 + 16777215 + + Amount: @@ -112,12 +94,21 @@ + + + 80 + 16777215 + + 200 0 + + 9 + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -126,9 +117,61 @@ + + + + + 35 + 16777215 + + + + Hush + + + - + + + + Memo : + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + 41 + + + + + 16777215 + 41 + + + + 100 + + + + Qt::Vertical @@ -136,12 +179,12 @@ 20 - 64 + 39 - + QLayout::SetFixedSize @@ -180,7 +223,7 @@ - + Qt::Horizontal @@ -190,13 +233,6 @@ - - - - Hush - - - From 400be7da05b8f8ecc5dd457cff45b0697fd63a1e Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 00:01:04 +0200 Subject: [PATCH 11/37] add .desktop --- res/silentdragonlite.desktop | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 res/silentdragonlite.desktop diff --git a/res/silentdragonlite.desktop b/res/silentdragonlite.desktop new file mode 100644 index 0000000..bf5b057 --- /dev/null +++ b/res/silentdragonlite.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Name=SilentDragonLite +Comment=Lightclient UI wallet for Hush +GenericName=Wallet +Exec=SilentDragonLite %u +Icon=SilentDragonLite +Type=Application +StartupNotify=true +StartupWMClass=SilentDragonLite +Categories=Utility; +MimeType=x-scheme-handler/hush; +Keywords=SilentDragonLite; + From 38afce1e983a803c12e5bcaa9548f9d972bde6e6 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 00:03:41 +0200 Subject: [PATCH 12/37] reorder actionmenu --- src/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e2dabf3..1eac498 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1499,9 +1499,9 @@ void MainWindow::setupchatTab() { QObject::connect(ui->listContactWidget, &QTableView::clicked, [=] () { ui->listContactWidget->setContextMenuPolicy(Qt::ActionsContextMenu); - ui->listContactWidget->addAction(requestAction); - ui->listContactWidget->addAction(editAction); ui->listContactWidget->addAction(HushAction); + ui->listContactWidget->addAction(editAction); + ui->listContactWidget->addAction(requestAction); ui->listContactWidget->addAction(subatomicAction); ui->memoTxtChat->setEnabled(true); From 3cd1a8059a5640f91fff10a9230834d482a3fd88 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 00:06:00 +0200 Subject: [PATCH 13/37] rename actionmenu --- src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1eac498..a2dda35 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1488,7 +1488,7 @@ void MainWindow::setupchatTab() { QAction* requestHushAction; QAction* subatomicAction; contextMenu = new QMenu(ui->listContactWidget); - HushAction = new QAction("Send or Request some Hush ",contextMenu); + HushAction = new QAction("Send this contact Hush ",contextMenu); editAction = new QAction("Delete this contact",contextMenu); requestAction = new QAction("Send a contact request - coming soon",contextMenu); subatomicAction = new QAction("Make a subatomic swap with a friend- coming soon",contextMenu); From 1b024d0b75eb578617c9e79a8396d015598b0fd4 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 00:15:12 +0200 Subject: [PATCH 14/37] push version to 1.3.7 --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index fa69420..cabdbc4 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "1.3.6" +#define APP_VERSION "1.3.7" From 969b79a40d80a6369fe0bd9677e092b9e5eaa500 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 01:20:26 +0200 Subject: [PATCH 15/37] add request Hush via chat --- application.qrc | 1 + res/hush-money-white.png | Bin 0 -> 1223 bytes res/hush-money.png | Bin 0 -> 1123 bytes src/Model/ChatItem.cpp | 36 ++++- src/mainwindow.cpp | 304 ++++++++++++++++++++++++++++++++++++++- src/mainwindow.h | 3 + 6 files changed, 337 insertions(+), 7 deletions(-) create mode 100644 res/hush-money-white.png create mode 100644 res/hush-money.png diff --git a/application.qrc b/application.qrc index 0332b5f..9ff3227 100644 --- a/application.qrc +++ b/application.qrc @@ -50,6 +50,7 @@ res/dark-01.png res/money-mouth.png res/money-outgoing.png + res/hush-money-white.png res/hushdlogo.gif diff --git a/res/hush-money-white.png b/res/hush-money-white.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee8d9a57d4fe8dd6f07285bf61ff8648a3d1b87 GIT binary patch literal 1223 zcmV;&1UUPNP)I0004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmP!xqvQ?()$2aAX}WT;LSL`5963Pq?8YK2xEOkVm2O&XFE z7e~Rh;NZ_<)xpJCR|i)?5c~mga&%I3krMAq3N2!MaCsl+y>qzlK0v6KnPzp21DbA| zsYG1NWLL$|E4mQD0F@{+%b1g-Bz)J`Jpz2ci}5V~dw;H8HD@s(AQI0q!?cMvh^IGg zgY!OdgcW6#_?&pmqy~u}xvqHp#<}3Kz%wIeIyFxmAr=d5th6yJni}yGaa7fG$`>*o ztDLtuYvn3y_Q_uu&gm=5T&EgF0*hFJ1Q80VD4`4+G1_%fETrf>?&BYF{Svtpa+Scy zv49FR$gUs!4}Q(v&^mat9cEGGtSBr684%&jasg^i5fy{}$+3^XAq($LRx*rdcI#fP+I| zv_RSGKJV^spWDB8n)CYsWE*m!LbA=l00006VoOIv0RI600RN!9r;`8x010qNS#tmY z4c7nw4c7reD4Tcy000McNlirunu~K~z}7<(WBXRY4Snzj=Aa z9YIBH+z>=@LlF_J#L~j85R8Rjw7Qgsm|R0&YAzroH=vmUML{yT=l;CT5X|`qF(T~yjPow*em4>7S!G9 zS#?b>uZ)lMk-&(g|2XxidR(1a)bp0e^B?Mr1ixud8I|DYBJ5V7nE~cSdJ{0WN`Dqc z`ux0Q%p((W+SNE4^7@z6A;3D|GteGF=&s`iXad#(Lx3}7;54u@!w&&FtFZS5Xazn2 zoBF}04cMOPt5Cm1LH00VzCQ`jbqPKp(nqU<6Z~b;zntKYBkXG#7!={n)wmTx=!*2W z{g{~^W0x2}QYsjL!_-#wpgN@}nR3DY`=S6`4$NuT%m9lbeYQHXkz`6a?QfC(9q6tl znLN1|=^c3qwOnH|yMP(12``a{RB?cD`xHwm^=e)1+LeN%;%*2DOrXuz-r)G zA4zendO$t)M@ca`$et(I4E1e>-BXA6VPl$lL@g!H+bdOi>Wg^rie$15W7MTt-Bayx z@iemComP4&nerd(h&RC1zYqqwmEJ#fYVTE-)P;;XR6U_SQ1|rm%4*Q-Sj}z1~(SOR_7+fFRTGvuQw)`H)m~ zUmHp0a8z2hg%Ex;>~;`BXjdlzBSHv|8+}zFgzyS@^|xZ?QPh4|=a`Mh?koW=LR(*LR@>BT>b73+yUD3MI>D!_9qJWzajn0}RV4FYpG{qn{t50004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ?()$2P=ql$WWauh>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4icB(Z=+ND!f*iVc)uBTlPMiiI@oCw%-vu3sXTLaq%k za?GOw4YKP8|AXJ%T7`*mFDaY=I$s>;V;BhS0*#vEd>=bb;{*sk16O*>U#SDrpQP7X zTI>ku+XgPKTbi;5T00006VoOIv0RI600RN!9r;`8x010qNS#tmY z4c7nw4c7reD4Tcy000McNliruJMCT% zB$!J`^0Qg+?PG7(y}jKy)jVe2oA3SmX5N!>2rvSC09wFB6)nJ4Uo)AriG zy_r7>5AmlCSHA|F10&FaVtK%LL%QGxocfejnZ7iC}tA z3(cmag9wuUtaX)z$1_szCsUhjJq?bU=b2%jG7I2}Am8nbW5A{8g zhC38smw;<|>)bRjeHlpdw4_b{b8adX%#x$8NLpU&dgi;N1xe#(wwPzIT#3@mrX)=P zW@hwan|?a&R+pf<1rmuJgb%H0Np~cj%1HOS9epQ|^)`)$ai_fpUu>|6l&8uo;05p) zSnx?PEjML7Gjm=$u67yx$Nuw@R`X=t8gLzW7UrQKW@TLQS7r!!0L%bKi~cT21XDK8 pxV*CJkzlz390`A}n!WhB`U7D3TiKFwpd$bP002ovPDHLkV1iC8^b!C7 literal 0 HcmV?d00001 diff --git a/src/Model/ChatItem.cpp b/src/Model/ChatItem.cpp index 3a190f0..34d1992 100644 --- a/src/Model/ChatItem.cpp +++ b/src/Model/ChatItem.cpp @@ -158,6 +158,8 @@ QString ChatItem::toChatLine() { QDateTime myDateTime; QString lock; + QString money; + QString moneyText; myDateTime.setTime_t(_timestamp); if (_notarize == true) @@ -176,10 +178,42 @@ QString ChatItem::toChatLine() lock = " "; } + + if (_memo.startsWith("Money transaction of :")) + { + if (_outgoing == true) + { + + moneyText = QString("

Outgoing Money Transaction

") + QString(" "); + }else{ + + + moneyText = QString("

Incoming Money Transaction

") + QString(" "); + + } + }else{money = ""; + moneyText = ""; } + + if (_memo.startsWith("Request of :")) + { + if (_outgoing == true) + { + + moneyText = QString("

Outgoing Hush Request

") + QString(" "); + }else{ + + + moneyText = QString("

Incoming Hush Request

") + QString(" "); + + } + }else{money = ""; + moneyText = ""; } + + QString line = QString("") + myDateTime.toString("yyyy-MM-dd hh:mm"); - line += QString(lock) + QString(""); + line += QString(lock) + QString(moneyText) + QString(""); line +=QString("

") + _memo.toHtmlEscaped() + QString("

"); return line; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a2dda35..d5e979d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1488,9 +1488,8 @@ void MainWindow::setupchatTab() { QAction* requestHushAction; QAction* subatomicAction; contextMenu = new QMenu(ui->listContactWidget); - HushAction = new QAction("Send this contact Hush ",contextMenu); + HushAction = new QAction("Send or Request Hush ",contextMenu); editAction = new QAction("Delete this contact",contextMenu); - requestAction = new QAction("Send a contact request - coming soon",contextMenu); subatomicAction = new QAction("Make a subatomic swap with a friend- coming soon",contextMenu); @@ -1500,8 +1499,7 @@ void MainWindow::setupchatTab() { ui->listContactWidget->setContextMenuPolicy(Qt::ActionsContextMenu); ui->listContactWidget->addAction(HushAction); - ui->listContactWidget->addAction(editAction); - ui->listContactWidget->addAction(requestAction); + ui->listContactWidget->addAction(editAction); ui->listContactWidget->addAction(subatomicAction); ui->memoTxtChat->setEnabled(true); @@ -1525,9 +1523,12 @@ void MainWindow::setupchatTab() { QDialog transactionDialog(this); transaction.setupUi(&transactionDialog); Settings::saveRestore(&transactionDialog); - transaction.requestHush->setEnabled(false); - transaction.requestHush->setVisible(false); + // transaction.requestHush->setEnabled(false); + // transaction.requestHush->setVisible(false); transaction.amountChat->setValidator(this->getAmountValidator()); + QString icon = ":icons/res/hush-money-white.png"; + QPixmap hush(icon); + transaction.label_3->setPixmap(hush); @@ -1559,6 +1560,19 @@ void MainWindow::setupchatTab() { QObject::connect(transaction.sendHush, &QPushButton::clicked, this , &MainWindow::sendMoneyChat); + + + QObject::connect(transaction.requestHush, &QPushButton::clicked, [&] (){ + + QString amt = transaction.amountChat->text(); + QString memo = transaction.MemoMoney->text(); + this->setAmt(amt); + this->setMoneyMemo(memo); + transactionDialog.close(); + }); + + QObject::connect(transaction.requestHush, &QPushButton::clicked, this , &MainWindow::sendMoneyRequestChat); + transactionDialog.exec(); @@ -1869,6 +1883,284 @@ QString MainWindow::doSendChatMoneyTxValidations(Tx tx) { return ""; } +// Create a Tx from the current state of the Chat page. +Tx MainWindow::createTxFromSendRequestChatPage() { + Tx tx; + CAmount totalAmt; + // For each addr/amt in the Chat tab + { + + QString amtStr = this->getAmt(); + CAmount amt; + CAmount amtHm; + + amt = CAmount::fromDecimalString("0"); + amtHm = CAmount::fromDecimalString("0"); + totalAmt = totalAmt + amt; + + QModelIndex index = ui->listContactWidget->currentIndex(); + QString label_contact = index.data(Qt::DisplayRole).toString(); + + for(auto &c : AddressBook::getInstance()->getAllAddressLabels()) + + if (label_contact == c.getName()) { + + QString cid = c.getCid(); + QString myAddr = c.getMyAddress(); + QString type = "Money"; + QString addr = c.getPartnerAddress(); + QString moneymemo = this->getMoneyMemo(); + + /////////User input for chatmemos + QString memoplain = QString("Request of : ") + amtStr + QString(" HUSH ") + QString("\n") + QString("\n") + moneymemo; + + /////////We convert the user input from QString to unsigned char*, so we can encrypt it later + int lengthmemo = memoplain.length(); + + char *memoplainchar = NULL; + memoplainchar = new char[lengthmemo+2]; + strncpy(memoplainchar, memoplain.toUtf8(), lengthmemo +1); + + QString pubkey = this->getPubkeyByAddress(addr); + QString passphraseHash = DataStore::getChatDataStore()->getPassword(); + int length = passphraseHash.length(); + + ////////////////Generate the secretkey for our message encryption + + char *hashEncryptionKeyraw = NULL; + hashEncryptionKeyraw = new char[length+1]; + strncpy(hashEncryptionKeyraw, passphraseHash.toUtf8(), length+1); + + #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) + #define MESSAGEAS1_LEN length + + + unsigned char sk[crypto_kx_SECRETKEYBYTES]; + unsigned char pk[crypto_kx_PUBLICKEYBYTES]; + unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES]; + + if (crypto_kx_seed_keypair(pk,sk, + MESSAGEAS1) !=0) { + + this->logger->write("Suspicious keypair, bail out "); + } + ////////////////Get the pubkey from Bob, so we can create the share key + + const QByteArray pubkeyBobArray = QByteArray::fromHex(pubkey.toLatin1()); + const unsigned char *pubkeyBob = reinterpret_cast(pubkeyBobArray.constData()); + /////Create the shared key for sending the message + + if (crypto_kx_server_session_keys(server_rx, server_tx, + pk, sk, pubkeyBob) != 0) { + this->logger->write("Suspicious client public send key, bail out "); + } + + + // Let's try to preserve Unicode characters + QByteArray ba_memo = memoplain.toUtf8(); + int ba_memo_length = ba_memo.size(); + + #define MESSAGEMoney (const unsigned char *) ba_memo.data() + #define MESSAGE_LENMoney ba_memo_length + + + ////////////Now lets encrypt the message Alice send to Bob////////////////////////////// + //#define MESSAGE (const unsigned char *) memoplainchar + //#define MESSAGE_LEN lengthmemo + #define CIPHERTEXT_LEN (crypto_secretstream_xchacha20poly1305_ABYTES + MESSAGE_LENMoney) + unsigned char ciphertext[CIPHERTEXT_LEN]; + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES]; + + crypto_secretstream_xchacha20poly1305_state state; + + /* Set up a new stream: initialize the state and create the header */ + crypto_secretstream_xchacha20poly1305_init_push(&state, header, server_tx); + + + /* Now, encrypt the first chunk. `c1` will contain an encrypted, + * authenticated representation of `MESSAGE_PART1`. */ + crypto_secretstream_xchacha20poly1305_push + (&state, ciphertext, NULL, MESSAGEMoney, MESSAGE_LENMoney, NULL, 0, crypto_secretstream_xchacha20poly1305_TAG_FINAL); + + ////Create the HM for this message + QString headerbytes = QByteArray(reinterpret_cast(header), crypto_secretstream_xchacha20poly1305_HEADERBYTES).toHex(); + QString publickeyAlice = QByteArray(reinterpret_cast(pk), crypto_kx_PUBLICKEYBYTES).toHex(); + + + QString hmemo= createHeaderMemo(type,cid,myAddr,headerbytes,publickeyAlice,1,0); + + /////Ciphertext Memo + QString memo = QByteArray(reinterpret_cast(ciphertext), CIPHERTEXT_LEN).toHex(); + + + tx.toAddrs.push_back(ToFields{addr, amtHm, hmemo}); + tx.toAddrs.push_back(ToFields{addr, amt, memo}); + + } + } + + tx.fee = Settings::getMinerFee(); + + return tx; + +} + +void MainWindow::sendMoneyRequestChat() { + +////////////////////////////Todo: Check if a Contact is selected////////// + + // Create a Tx from the values on the send tab. Note that this Tx object + // might not be valid yet. + + /* QString Name = ui->contactNameMemo->text(); + + if ((ui->contactNameMemo->text().isEmpty()) || (ui->memoTxtChat->toPlainText().trimmed().isEmpty())) { + + QMessageBox msg(QMessageBox::Critical, tr("You have to select a contact and insert a Memo"), + tr("You have selected no Contact from Contactlist,\n") + tr("\nor your Memo is empty"), + QMessageBox::Ok, this); + + msg.exec(); + return; + }*/ + + + Tx tx = createTxFromSendRequestChatPage(); + + QString error = doSendChatMoneyRequestTxValidations(tx); + + if (!error.isEmpty()) { + // Something went wrong, so show an error and exit + QMessageBox msg(QMessageBox::Critical, tr("Message Error"), error, + QMessageBox::Ok, this); + + msg.exec(); + + // abort the Tx + return; + } + + auto movie = new QMovie(this); + auto movie1 = new QMovie(this); + movie->setFileName(":/img/res/loaderblack.gif"); + movie1->setFileName(":/img/res/loaderwhite.gif"); + + auto theme = Settings::getInstance()->get_theme_name(); + if (theme == "Dark" || theme == "Midnight") { + + connect(movie, &QMovie::frameChanged, [=]{ + ui->sendChatButton->setIcon(movie->currentPixmap()); + }); + movie->start(); + ui->sendChatButton->show(); + ui->sendChatButton->setEnabled(false); + + } else { + + connect(movie1, &QMovie::frameChanged, [=]{ + ui->sendChatButton->setIcon(movie1->currentPixmap()); + }); + movie1->start(); + ui->sendChatButton->show(); + ui->sendChatButton->setEnabled(false); + } + + ui->memoTxtChat->clear(); + + // And send the Tx + rpc->executeTransaction(tx, + [=] (QString txid) { + ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); + + + QTimer::singleShot(1000, [=]() { + + if (theme == "Dark" || theme == "Midnight") { + QPixmap send(":/icons/res/send-white.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie->stop(); + ui->sendChatButton->setEnabled(true); + }else{ + + QPixmap send(":/icons/res/sendBlack.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie1->stop(); + ui->sendChatButton->setEnabled(true); + } + + }); + + // Force a UI update so we get the unconfirmed Tx + rpc->refresh(true); + ui->memoTxtChat->clear(); + + }, + // Errored out + [=] (QString opid, QString errStr) { + ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); + + if (!opid.isEmpty()) + errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; + + QMessageBox::critical(this, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); + movie->stop(); + + + if (theme == "Dark" || theme == "Midnight") { + QPixmap send(":/icons/res/send-white.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie->stop(); + ui->sendChatButton->setEnabled(true); + }else{ + + QPixmap send(":/icons/res/sendBlack.png"); + QIcon sendIcon(send); + ui->sendChatButton->setIcon(sendIcon); + movie1->stop(); + ui->sendChatButton->setEnabled(true); + } + + + + } + ); + + } + +QString MainWindow::doSendChatMoneyRequestTxValidations(Tx tx) { + // Check to see if we have enough verified funds to send the Tx. + + CAmount total; + for (auto toAddr : tx.toAddrs) { + if (!Settings::isValidAddress(toAddr.addr)) { + QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr); + return QString(tr("Recipient Address ")) % addr % tr(" is Invalid"); + } + + // This technically shouldn't be possible, but issue #62 seems to have discovered a bug + // somewhere, so just add a check to make sure. + if (toAddr.amount.toqint64() < 0) { + return QString(tr("Amount for address '%1' is invalid!").arg(toAddr.addr)); + } + + total = total + toAddr.amount; + } + total = total + tx.fee; + + auto available = rpc->getModel()->getAvailableBalance(); + + if (available < total) { + return tr("Not enough available funds to send this transaction\n\nHave: %1\nNeed: %2\n\nNote: Funds need 1 confirmations before they can be spent") + .arg(available.toDecimalhushString(), total.toDecimalhushString()); + } + + return ""; +} + + void MainWindow::updateChat() { rpc->refreshChat(ui->listChat,ui->memoSizeChat); diff --git a/src/mainwindow.h b/src/mainwindow.h index 3867de6..ca4d8cc 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -51,6 +51,7 @@ public: QString doSendChatTxValidations(Tx tx); QString doSendChatMoneyTxValidations(Tx tx); QString doSendRequestTxValidations(Tx tx); + QString doSendChatMoneyRequestTxValidations(Tx tx); QString getCid(); QString getAmt(); QString getMoneyMemo(); @@ -143,6 +144,7 @@ private: Tx createTxFromChatPage(); Tx createTxForSafeContactRequest(); Tx createTxFromSendChatPage(); + Tx createTxFromSendRequestChatPage(); void encryptWallet(); void removeWalletEncryption(); @@ -152,6 +154,7 @@ private: void sendButton(); void sendChat(); void sendMoneyChat(); + void sendMoneyRequestChat(); void addContact(); void ContactRequest(); From 515d47df9d8958ed964b377a3a513cfe9d3613f1 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 08:49:45 +0200 Subject: [PATCH 16/37] show chatitems only one time #142 --- src/Model/ChatItem.cpp | 15 ++++++++------- src/controller.cpp | 2 +- src/mainwindow.cpp | 4 +++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Model/ChatItem.cpp b/src/Model/ChatItem.cpp index 34d1992..349be68 100644 --- a/src/Model/ChatItem.cpp +++ b/src/Model/ChatItem.cpp @@ -160,6 +160,7 @@ QString ChatItem::toChatLine() QString lock; QString money; QString moneyText; + QString moneyTextRequest; myDateTime.setTime_t(_timestamp); if (_notarize == true) @@ -177,7 +178,7 @@ QString ChatItem::toChatLine() { lock = " "; - } + }else{} if (_memo.startsWith("Money transaction of :")) { @@ -192,28 +193,28 @@ QString ChatItem::toChatLine() } }else{money = ""; - moneyText = ""; } + moneyText = ""; } if (_memo.startsWith("Request of :")) { if (_outgoing == true) { - moneyText = QString("

Outgoing Hush Request

") + QString(" "); + moneyTextRequest = QString("

Outgoing Hush Request

") + QString(" "); }else{ - moneyText = QString("

Incoming Hush Request

") + QString(" "); + moneyTextRequest = QString("

Incoming Hush Request

") + QString(" "); } - }else{money = ""; - moneyText = ""; } + }else{moneyTextRequest = ""; + moneyTextRequest = ""; } QString line = QString("") + myDateTime.toString("yyyy-MM-dd hh:mm"); - line += QString(lock) + QString(moneyText) + QString(""); + line += QString(lock) + QString(moneyText) + QString(moneyTextRequest) + QString(""); line +=QString("

") + _memo.toHtmlEscaped() + QString("

"); return line; } diff --git a/src/controller.cpp b/src/controller.cpp index 2fe7221..b777da2 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -990,7 +990,7 @@ void Controller::refreshTransactions() { chatModel->addconfirmations(txid, confirmations); } - if ((confirmations == 1) && (chatModel->getConfirmationByTx(txid) != QString("0xdeadbeef"))) { + if ((confirmations > 0) && (chatModel->getConfirmationByTx(txid) != QString("0xdeadbeef"))) { DataStore::getChatDataStore()->clear(); chatModel->killConfirmationCache(); chatModel->killMemoCache(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d5e979d..397baf1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1386,6 +1386,8 @@ void MainWindow::setupchatTab() { ui->listChat->addAction(viewexplorer); ui->listChat->addAction(copytxid); + }); + QObject::connect(copymessage, &QAction::triggered, [=] { @@ -1478,7 +1480,7 @@ void MainWindow::setupchatTab() { } }); -}); + ///////// Add contextmenu QMenu* contextMenu; From c8ab4e400fb1017deebf21c5509ebe9c2e13fa3a Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 09:35:53 +0200 Subject: [PATCH 17/37] Disable passphrase field, activate if TOS is accept #169 --- src/firsttimewizard.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp index 20e7d46..4017ed6 100644 --- a/src/firsttimewizard.cpp +++ b/src/firsttimewizard.cpp @@ -65,12 +65,23 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent parent->button(QWizard::CommitButton)->setEnabled(false); setButtonText(QWizard::CommitButton, "Next"); + form.txtPassword->setEnabled(false); + form.txtConfirmPassword->setEnabled(false); + + QObject::connect(form.TOS, &QRadioButton::clicked, [=](bool checked) { + if (checked) { + + form.txtPassword->setEnabled(true); + form.txtConfirmPassword->setEnabled(true); + + } + }); auto fnPasswordEdited = [=](const QString&) { // Enable the Finish button if the passwords match. QString passphraseBlank = form.txtPassword->text(); - + QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); @@ -83,6 +94,7 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent form.radioRestoreWallet->setEnabled(true); form.radioNewWallet->setEnabled(true); form.radioNewWallet->setChecked(true); + parent->button(QWizard::CommitButton)->setEnabled(true); int length = passphrase.length(); @@ -134,12 +146,7 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent } }); - QObject::connect(form.TOS, &QRadioButton::clicked, [=](bool checked) { - if (checked) { - parent->button(QWizard::CommitButton)->setEnabled(true); - - } - }); + From 97de5b371e23455866b17d7b83a21ac5c2b73a6e Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 22:20:31 +0200 Subject: [PATCH 18/37] update lib --- src/emoji.ui | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/emoji.ui diff --git a/src/emoji.ui b/src/emoji.ui new file mode 100644 index 0000000..fb923db --- /dev/null +++ b/src/emoji.ui @@ -0,0 +1,72 @@ + + + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + + From a8ed36b9e4b5f5cf76c8df4de5b0255b420fadc2 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 22:21:31 +0200 Subject: [PATCH 19/37] update lib --- lib/Cargo.lock | 144 ++++++++++++++++++-------------------- lib/Cargo.toml | 2 +- lib/silentdragonlitelib.h | 6 +- lib/src/lib.rs | 12 ++-- src/firsttimewizard.cpp | 7 +- src/firsttimewizard.h | 3 +- 6 files changed, 82 insertions(+), 92 deletions(-) diff --git a/lib/Cargo.lock b/lib/Cargo.lock index df000b4..c6b8ef0 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -128,14 +128,6 @@ name = "base58" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "base64" version = "0.11.0" @@ -315,16 +307,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "core-foundation" -version = "0.6.4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "core-foundation-sys" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -598,7 +590,7 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -610,8 +602,8 @@ dependencies = [ "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -687,23 +679,23 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.2" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-channel 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1050,7 +1042,7 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1192,7 +1184,7 @@ dependencies = [ "blake3 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7)", + "silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de)", ] [[package]] @@ -1490,10 +1482,10 @@ dependencies = [ [[package]] name = "rustls" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1502,13 +1494,13 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1557,21 +1549,22 @@ dependencies = [ [[package]] name = "security-framework" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "security-framework-sys" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1655,7 +1648,7 @@ dependencies = [ [[package]] name = "silentdragonlitelib" version = "0.1.0" -source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7#07288de82d84b9bf35d1210ccc98eb1e4b757eb7" +source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de#6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de" dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "bellman 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)", @@ -1682,9 +1675,9 @@ dependencies = [ "sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "sodiumoxide 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tonic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tonic 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "tonic-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", "webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1843,7 +1836,7 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.11" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1860,13 +1853,13 @@ dependencies = [ "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-macros 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-macros" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1876,18 +1869,18 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-util" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1895,31 +1888,31 @@ dependencies = [ "futures-sink 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tonic" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "async-stream 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "async-trait 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "prost 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "prost-derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls-native-certs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tower 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tower-balance 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-load 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1968,7 +1961,7 @@ dependencies = [ "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-discover 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-load 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1985,7 +1978,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tracing 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2013,7 +2006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2026,7 +2019,7 @@ dependencies = [ "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-discover 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2047,7 +2040,7 @@ name = "tower-make" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2060,7 +2053,7 @@ dependencies = [ "futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2071,7 +2064,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2087,7 +2080,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2468,7 +2461,6 @@ dependencies = [ "checksum backtrace 0.3.43 (registry+https://github.com/rust-lang/crates.io-index)" = "7f80256bc78f67e7df7e36d77366f636ed976895d91fe2ab9efa3973e8fe8c4f" "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" "checksum bech32 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cdcf67bb7ba7797a081cd19009948ab533af7c355d5caf1d08c777582d351e9c" "checksum bellman 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)" = "" @@ -2492,8 +2484,8 @@ dependencies = [ "checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" -"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" "checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19" "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" @@ -2528,7 +2520,7 @@ dependencies = [ "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" "checksum group 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)" = "" -"checksum h2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b9433d71e471c1736fd5a61b671fc0b148d7a2992f666c958d03cd8feb3b88d1" +"checksum h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" "checksum hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" @@ -2538,7 +2530,7 @@ dependencies = [ "checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" "checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fa1c527bbc634be72aa7ba31e4e4def9bbb020f5416916279b7c705cd838893e" +"checksum hyper 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e7655b9594024ad0ee439f3b5a7299369dc2a3f459b47c696f9ff676f9aa1f" "checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc" "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" "checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" @@ -2578,7 +2570,7 @@ dependencies = [ "checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" "checksum pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" "checksum petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92" "checksum pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" "checksum pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" @@ -2628,16 +2620,16 @@ dependencies = [ "checksum rust-embed-utils 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97655158074ccb2d2cfb1ccb4c956ef0f4054e43a2c1e71146d4991e6961e105" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" -"checksum rustls-native-certs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51ffebdbb48c14f84eba0b715197d673aff1dd22cc1007ca647e28483bbcc307" +"checksum rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" +"checksum rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" "checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" "checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" "checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" "checksum secp256k1 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e0344a794ff109f85547039536028e12f313178ac1545e49fdf16a530d900a7b" -"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df" -"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895" +"checksum security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0" +"checksum security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" @@ -2647,7 +2639,7 @@ dependencies = [ "checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35" "checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" "checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" -"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7)" = "" +"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de)" = "" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" "checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" @@ -2665,11 +2657,11 @@ dependencies = [ "checksum thread-id 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7fbf4c9d56b320106cd64fd024dadfa0be7cb4706725fc44a7d7ce952d820c1" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" "checksum tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c5676413eaeb1ea35300a0224416f57abc3bd251657e0fafc12c47ff98c060" -"checksum tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8fdd17989496f49cdc57978c96f0c9fe5e4a58a8bddc6813c449a4624f6a030b" -"checksum tokio-macros 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f4b1e7ed7d5d4c2af3d999904b0eebe76544897cdbfb2b9684bed2174ab20f7c" -"checksum tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "141afec0978abae6573065a48882c6bae44c5cc61db9b511ac4abf6a09bfd9cc" -"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" -"checksum tonic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08283643b1d483eb7f3fc77069e63b5cba3e4db93514b3d45470e67f123e4e48" +"checksum tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58" +"checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" +"checksum tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a" +"checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +"checksum tonic 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4afef9ce97ea39593992cf3fa00ff33b1ad5eb07665b31355df63a690e38c736" "checksum tonic-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0436413ba71545bcc6c2b9a0f9d78d72deb0123c6a75ccdfe7c056f9930f5e52" "checksum tower 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd3169017c090b7a28fce80abaad0ab4f5566423677c9331bb320af7e49cfe62" "checksum tower-balance 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a792277613b7052448851efcf98a2c433e6f1d01460832dc60bef676bc275d4c" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 5d7a33c..d0c3d50 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://github.com/MyHush/silentdragonlite-cli", rev = "07288de82d84b9bf35d1210ccc98eb1e4b757eb7" } +silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de" } diff --git a/lib/silentdragonlitelib.h b/lib/silentdragonlitelib.h index 638ac0c..4e1c983 100644 --- a/lib/silentdragonlitelib.h +++ b/lib/silentdragonlitelib.h @@ -6,11 +6,11 @@ extern "C" { #endif extern bool litelib_wallet_exists (const char* chain_name); -extern char * litelib_initialize_new (bool dangerous, const char* server); +extern char * litelib_initialize_new (const char* server); extern char * litelib_initialize_new_from_phrase - (bool dangerous, const char* server, const char* seed, + (const char* server, const char* seed, unsigned long long birthday, unsigned long long number); -extern char * litelib_initialize_existing (bool dangerous, const char* server); +extern char * litelib_initialize_existing (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); diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 174c2b8..f1be0d3 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -57,7 +57,7 @@ return e_str.into_raw(); /// Create a new wallet and return the seed for the newly created wallet. #[no_mangle] -pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) -> *mut c_char { +pub extern fn litelib_initialize_new(server: *const c_char) -> *mut c_char { let server_str = unsafe { assert!(!server.is_null()); @@ -65,7 +65,7 @@ pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) -> }; let server = LightClientConfig::get_server_or_default(Some(server_str)); - let (config, latest_block_height) = match LightClientConfig::create(server, dangerous) { + let (config, latest_block_height) = match LightClientConfig::create(server) { Ok((c, h)) => (c, h), Err(e) => { let e_str = CString::new(format!("Error: {}", e)).unwrap(); @@ -101,7 +101,7 @@ pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) -> /// Restore a wallet from the seed phrase #[no_mangle] -pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const c_char, +pub extern fn litelib_initialize_new_from_phrase(server: *const c_char, seed: *const c_char, birthday: u64, number: u64) -> *mut c_char { let server_str = unsafe { assert!(!server.is_null()); @@ -116,7 +116,7 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const }; let server = LightClientConfig::get_server_or_default(Some(server_str)); - let (config, _latest_block_height) = match LightClientConfig::create(server, dangerous) { + let (config, _latest_block_height) = match LightClientConfig::create(server) { Ok((c, h)) => (c, h), Err(e) => { let e_str = CString::new(format!("Error: {}", e)).unwrap(); @@ -143,7 +143,7 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const // Initialize a new lightclient and store its value #[no_mangle] -pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char) -> *mut c_char { +pub extern fn litelib_initialize_existing(server: *const c_char) -> *mut c_char { let server_str = unsafe { assert!(!server.is_null()); @@ -151,7 +151,7 @@ pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char }; let server = LightClientConfig::get_server_or_default(Some(server_str)); - let (config, _latest_block_height) = match LightClientConfig::create(server, dangerous) { + let (config, _latest_block_height) = match LightClientConfig::create(server) { Ok((c, h)) => (c, h), Err(e) => { let e_str = CString::new(format!("Error: {}", e)).unwrap(); diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp index 4017ed6..38901c9 100644 --- a/src/firsttimewizard.cpp +++ b/src/firsttimewizard.cpp @@ -9,10 +9,9 @@ #include "../lib/silentdragonlitelib.h" -FirstTimeWizard::FirstTimeWizard(bool dangerous, QString server) +FirstTimeWizard::FirstTimeWizard(QString server) { setWindowTitle("New wallet wizard"); - this->dangerous = dangerous; this->server = server; ////backup addresslabels.dat if there is one, to restore it later @@ -194,7 +193,7 @@ NewSeedPage::NewSeedPage(FirstTimeWizard *parent) : QWizardPage(parent) { void NewSeedPage::initializePage() { // Call the library to create a new wallet. - char* resp = litelib_initialize_new(parent->dangerous, parent->server.toStdString().c_str()); + char* resp = litelib_initialize_new(parent->server.toStdString().c_str()); QString reply = litelib_process_response(resp); QByteArray ba_reply = reply.toUtf8(); @@ -273,7 +272,7 @@ QString number_str = form.number->text(); qint64 number = number_str.toUInt(); // 3. Attempt to restore wallet with the seed phrase { - char* resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(), + char* resp = litelib_initialize_new_from_phrase(parent->server.toStdString().c_str(), seed.toStdString().c_str(), birthday, number); QString reply = litelib_process_response(resp); diff --git a/src/firsttimewizard.h b/src/firsttimewizard.h index 324f115..8b6de40 100644 --- a/src/firsttimewizard.h +++ b/src/firsttimewizard.h @@ -16,7 +16,7 @@ class FirstTimeWizard: public QWizard public: - FirstTimeWizard(bool dangerous, QString server); + FirstTimeWizard(QString server); protected: @@ -29,7 +29,6 @@ private: Page_Restore }; - bool dangerous; QString server; friend class NewOrRestorePage; From 27d743646a0ce55a6aa577b0fc3349dec2c34b7e Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 22:23:15 +0200 Subject: [PATCH 20/37] first implementation of emojis --- application.qrc | 13 +++ res/emoji/emoji1.png | Bin 0 -> 6899 bytes res/emoji/fire.png | Bin 0 -> 39293 bytes res/emoji/heart_eyes.png | Bin 0 -> 100906 bytes res/emoji/innocent.png | Bin 0 -> 13310 bytes res/emoji/joy.png | Bin 0 -> 13740 bytes res/emoji/laughing.png | Bin 0 -> 15365 bytes res/emoji/money-mouth.png | Bin 0 -> 3233 bytes res/emoji/partying_face.png | Bin 0 -> 6908 bytes res/emoji/sweet_smile.png | Bin 0 -> 15115 bytes silentdragon-lite.pro | 2 + src/Chat/Helper/ChatDelegator.h | 20 ++++ src/connection.cpp | 8 +- src/connection.h | 3 +- src/emoji.ui | 196 ++++++++++++++++++++++---------- src/mainwindow.cpp | 68 +++++++++++ src/mainwindow.h | 6 + src/mainwindow.ui | 55 ++++++++- 18 files changed, 296 insertions(+), 75 deletions(-) create mode 100644 res/emoji/emoji1.png create mode 100644 res/emoji/fire.png create mode 100644 res/emoji/heart_eyes.png create mode 100644 res/emoji/innocent.png create mode 100644 res/emoji/joy.png create mode 100644 res/emoji/laughing.png create mode 100644 res/emoji/money-mouth.png create mode 100644 res/emoji/partying_face.png create mode 100644 res/emoji/sweet_smile.png diff --git a/application.qrc b/application.qrc index 9ff3227..b7d5138 100644 --- a/application.qrc +++ b/application.qrc @@ -51,6 +51,7 @@ res/money-mouth.png res/money-outgoing.png res/hush-money-white.png +
res/hushdlogo.gif @@ -60,6 +61,18 @@ res/silentdragonlite-animated-startup-dark.gif res/loaderblack.gif res/loaderwhite.gif + + + res/emoji/emoji1.png + res/emoji/laughing.png + res/emoji/money-mouth.png + res/emoji/sweet_smile.png + res/emoji/joy.png + res/emoji/innocent.png + res/emoji/partying_face.png + res/emoji/heart_eyes.png + res/emoji/fire.png + res/silentdragonlite_de.qm diff --git a/res/emoji/emoji1.png b/res/emoji/emoji1.png new file mode 100644 index 0000000000000000000000000000000000000000..7179819d8f335f2543bbc9709aab358073a32211 GIT binary patch literal 6899 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 YbnVnOqxPQ)L90T@R`!;87JDQA1&i0ys{jB1 literal 0 HcmV?d00001 diff --git a/res/emoji/fire.png b/res/emoji/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b7596d240c9fc1e6eb1d76f7d1c2817e1e239d GIT binary patch literal 39293 zcmXtfbyyVN`!*qgPAFe9ttCT{Yi{@nBBcGBQ( z(RFFO{%5-YsUk_Dc~1~i4tOK9!G(3tZdO95sUdCkjZqCxW}i4`%%*yCtygC)$s0evlcMW#~q7l$sdIv#-}v=P`6sL#(=?}i>=i{DGp>ag3uT0*|}wHYj8 z-bmK-wIYJmt*M3BUzG0p(lbMpz0bHeQRp3C?^)TS#m+obpgFdIHwaj}EJ)G1stjE<(YG z|MF;l(YUrQ=~sf@g}Xl0 zAh6r^w_Zaf^Ti7oTK5Y&wh4LR!e7r+o^0}G(4}|Pp`D_b4LaC5iP`GBmJ={^vOWJ4 zujb9F7)haLLZ_iK{V#pWn*04uB6i0@wCPk|3tA&{$*UgpPP8UcLSN!pw4w%+CQvuyIAtPEVckP)5s)2$}RzH?K>a-`;Hb^#J z@kci%WWuL*SrV}q+^2D%WT~&!Q-hU;=K=W$6XE2tre`dFT}ik6MUXAqZXpWIwyG&0 zlN#Z!1H}5}?|i8B_8)!Pi>)xTZ)|u&S0@dNGv3c5)FQHpGiP@8S)(^q$=!oBL~2ip z@3s=L*$1Bzh?f=cFn=|}zrgfqwb<#di0!`>iiSSrcs|O@vm znL4(~>0(MhT;iwC$D{Zu;|#70Sc&b^<+PXb$lU4k;UxeEV%-2wj!y&pz360$6$!ve??E(#vDL3YHZgVP;8#H8o5DHx_Q#^%>_5M;ym?D`;6ZG`C$QTHh6fs>B*>lk0mMjV9n%vj^ zoUPtONNbg>@V_C9jAy>w0_Dm+&1-yTA9Xj z{B;B7#^uOD#zd^Mx$D_eaNjQpLo+&eQny?s&i9WkSPvUxVBQ}uQL?S~2$#9ykF&4VWcL1%eb-8JXJiRaw2?7+56eW3JW8!8jP|;}@OB{+jSOpD zrz!RQq_A1P+2o+M0cD*@I{JS2{U6y|e*ZU(9&eru>df7%akPt1QmY?Ra^r+OL;kJ_ zO|%FSpf5O*_1^ZkII>((2CsaeqK|x2i!-erJo~?gS2c$dCa}HhPp8Hq2y7t4n(#O`n$6tklJmijQHl*M(S^(xAyaza{uT$Xdm~ zG}EiU>TGfxc0}`PY;Z@hPDCr7m!Zvs)2Zn6^MV0XNIKMKlRKR@Ea(W%c& zcx9K!RjoytI!`mb?T3fF^}!RKEO-8AU57>pCo7^#m&%en52mRRMPo&rUVvndWYb1g z%1EV2HsPVcVXs5l!lWb7wBi3$F2r#~I4xVE9GYlz->1lOJ7~A~_=|;XaU;k~AZ8c8 zF0#wtpiB*-iIRWNh8blHkaMZ&+~RUfSQ2ckzVlbn#MM^ZB;G0WvowS!3rL&L_>i*6 zB8^)KTqg6^FBNrArdJTxe9dQ|JWGZd8Q#XBJ406CsG*p@2#QV)&dzP#$Yt8SR5Ow% z^YrRYuN6&jc1u@UM9K=miCFBC_usFQy`RWFk_aJ;f^(^r;*vv8fvO zi*%7r{Ad0IoQCiWUs+2N9Lw!|oiJ7Elmdn_dTZX@I z^JRLIDWk+P7XGvSK*u6ZM8r%%gi=HOIFtRkj}*G)^{coD2a}#@@iZFrMf+fqFFGdK z*}t~Zd+BN7_r#G`VQka|(dL+b#}Ut~E0I*d(5$1tIl+MgaK9X>poFB{DQ$1$MUeRz zFZx#{=Xa(`RC3mN7Z1i0s8uJ8DO)MjTz_?1ShSFtPac{Nv97Em-q7ZF?0}!tJR+WU z)@=azHOfm%OSbM3JL*Ooy!{ONTsA4?V|9xQpVtyz*?}xycx!!{Jh2L`NZqZ$Bh2nF zI+9j{R?LkT0t@rvTYbDQF6g&b_R=mih#Ja9!uh6uWL2e-DtY2sJ$_Urqz>b5isSrj`VNp5=4Kfxpz~fo+Z-%DZu7DS* zBdmO9saJbPs&a6e^`LA_qa9H9XHM3N(IQ9B%G`TcIWh!j9`IJK^1oDY z%8%O6`d6{k;_8z?_i0;MUlbw{EA2NBQ$;}=(`n=e_w#`J;Gz32)o8uWReyV^l+1kK zb0FlnFny7N7Uo~+3-Pm?%r7)a#D4M{I3q=?jg^g*4k{H0pBOwZnAKx4UlW01SDU%J2|LKh)`_h@)ZlFJiA}!1%T?!KaqcU1 znVPD{`Csqy#;JxZ3Fru;PY6uAQjM-RS%f`RCO-LTE>zYuv2AuhN|o7a(sEVb#1;zp zRf{P8mu1kP?`CnZ?WFb>-P1Ykt(*!yBWeX!g$|h%9AvDjNr?3-&`+nfZoY|&Dn#3! znnkTgH?7Sr9zadLi?6db;aitwR6c=^N@T0wGhdH?uzx=2(`+>)!t}!b9h64Ib$a*_CH_!sTjMpsa$TW+B35T_r^fN~ANpM+3bXFhHQti!tTd*_Jz@l;0I?J;jX$K+=+=?Fz%wRov&!wX;WAEA?;~pz|P68-XY0e zo~77>Z&p3RtJT~49s5Wg(IW%nsbH3LIf*L7TMvI4i2Luq+O4pIyui;?aTiq#*n1M` z=w3&ycC3Ov{Jng~xXe2(8zG$Pze9VE8p#Vls}wLmv3f8(w+8fKFQ*KaXz*6t-Uygt zYYbWw-xAD6Sky+bviciKkH+G;FJU!%Iqpo^mtAWdxCFK1#raZ96Eo>+8|JII#A6%J zU#L{JcO{lG(_AcX>tdwgZl1u=tI4H!YoK4XHAnmskr^yXWs%IjxOEq;*(!A3Hg}ZBh7WFXO~o4B7Uhc9d?6KBEmLftvP(*Mf`zj!)5_ z0aa;zeN>=Cku-0Z!Ag^i~omG-o!AgUwoud(?hA0s!0L>^VEAq5-ytny5|HFErdGzb? z6g(SkuZ)!wUjODpd_oJOtIydN zL1Gp39%ZF)X_}!g*wH^PJ9XQQwP=j%kve*(!pZUy|3t@719p)q^G&p{uKX!A;rOef@XPDUqVqtAwD?M-PaFae zA+vk^_-KPF^#$vHDC|!vKxvayS~72`O@2MR+BJ*wsnl2bsz(3y&)1=9^*9@9Drvj)peA{KE1*P=v2Qq{`!GTpG1QHQAIgxxwWjrs{V=Tl_aNS-A*u)4 zj;2dEFU^xmfA~AwPCW0Xc$1QEv!}QVIa%)WGWHE0c999_H2AWKy?^i3;I|WBo`EAL znrbPYCDYqMZe$wV>(7>@_1gTCrVEM9rzd;}=4ZwznHU{$wGwhJ76@- zm??%b5n3TN4J1}+*&Y;6T1cgoOj6nGVGG#b!DNTV`x-x>#7ie`bjG~Sl1~U`Pq9o6 zM&dfTBK468pjiMZA1wrL*FU(QQ0t8}VcC3ZGnKI|x}Bq}S?4xi#z15^_^;?DcR=FA z=q2E72ma}ioYj}Jkm$ddSM24+_zRfw?T({JZ36;F*hoG|bFUXGU@R;?P+IEILA5?D zTt;tVzF*m1*E5qy^rJW(#XqUM>>|cocL@+#hJ7CNKITYyru|DFwtQcn-2p4~;^*>u zf2&pvZ`Pq|LF5Jd%J`L(8-4}#FzqMl2c*S`t6EJ#Jf1t<^1hT_O`YBUZ?u5&ipv;zeC1B$3&WxIpPYFum?`2WD*Ss87oF;c?cBIGge|X?T5O~THlS$g)KB-` z#w*hj?bJvea^A_Spwc`6Yar%i1xx`xILR*P*t@gSC4yW>j+QypytZ_`V^`}>F#{ST z+0RA@_yg*Cik0$(&Ojt=aa6Yd>y&bJr2kz7^1PTfybgbi7@Y!%d0PH9@<_t&pcDjm zu$I9%(o$S|_PnIz%DB9UAA?O}YnMGKcj4sth_&6+k!0>B`vSLFsrKr0_i(91SgZ0M zYgyY6qCIS=d~VImDpuVM-w5zAbQfO=0Uk(ofB}3pX+VhYaBOqj#u2c6K&il9?{&L= zd&-Z86TL9m=D5+1FS6BGeh@XYC?DIiV4D6em;fY0ca@FMuZ;Y=1)e`33sC>wg+D{4 zB$(octEk{wIGx|K(De;r_hb`)R)!;$FOJ44|GfHS;?)@{u9|M*zueRGv|^7>@4?y7 z=m|sV>y4zo#N!>hN(6Af>R6p7?L%2l@<37p)W9S@L;*0x;hhFagC{Q{>AJ6_IGKl+ zk#7fJqkE<kTR8cRWh=qU=uOfj{3giE@V(1tfHkBY^w)g%Q{3Zu2tb+w@!Xm19eNn6oT;pPgn$i}2B{ok~=jjuN zRJHACdx}_mR`R-iP4~o}8C_7AxUk3xd3)-J;pAy5vGQrJ$svjR&lFLkUJJ*Gt~&3Kfq@@~rTV{*B#uB? zF2}|HHrheC-e(X`9E1!yKmw^_uaNI((J@@{nZ{va57!ZS$SH9HkUK@+`;ba4{|w+{TWs|k7a>o8rfdD9-=M227S#SUX#4UG>GKFT<>QCrxBF;h?Sv5TIVg>* zBdOtdg3{tlq}%`NPf!Lyso@yrml8A5-0^r{VDb%3kaqC~4SKv*rygqrfSjXBKqJ-| zD!L{@PM#cYk;AzMvzi>Vo5*%dEyD z6{5vryN>=rx7qY$1&lFWSt!5I!5@IBY<2*1s}i?it%=47PN+8fR)T_RgdgPhf3qF= z%3s5RLIS#mq+$4fAHP_R-bjh%%2s@MCctwRM80UO*B$8JZ(uyBd}##7z#WVnCtp|-4K@-7%I>K}w(kz4v$2Gmeb7t%K`k7m^$w~8(Lg!ZV3BeZ=tk$V#a1nXi*Mu`(bfh5oA=Tr7|R*Z)|{OTRboa za&CS0`{%lTjX+$?@SiKMawBw#;r}89!nr}5h*vl^Lro}GO7uF2*=G$jYIIj5Q>Af9 zz|PzOQJ42;KKm2AT!(p`-WFn=f!2E)wvT2GF#*EgLeb+Sej7f37smb-0Q6PNIrjDw zl3qHf$9bUUM^)%e9DLIeU-ny7ZjHHw&%0y|W)0iUM65&@ny>=EBB!l<_8$rO{^q6U zx;`PxWWTw%(y)AqOzZ+iM&Ot<8RHQ*8uzA?$B-))+dVu2&X8cDJR=xON1702W==LGW-8vDeQb-F+<;meIB%|iO2em{Bt1p z2W_^zD{R%+A9gz+osGv!3tgv`ay=1t2bLZWh(qj}%~;ttLutH}oEuZv?XG(q3AU2! z*xUdy5D#<#uI_NBoEuuCobz!L*FFb(Jy19?gNV-M`+f=hsCY5wmNU1PZ|6HUi|+N| zJQm~gkuZ)+#Ohrzarx&5-TDEF>!WoIwnhSH7wib0pZRJc z7A1U-$qwOzd6Qm;yc-lK1eyIzJgdWJHgt;<`2&3Nf(vBqznt83ozI7p%ohS>8%=HH zpW`eir!A>kXtimX`Y3RSy);OnRlK|Yb)YsSrMmstZ^JS*of zoxRwRC{}mpp^ZJvroE&8+=q*rA2#zeJ!<@Urr;jUDL7SUBB=%>b( zIX_iQ3aF(Ook5OyS2%Jl@?osOCpsrT{)9p!TSjo2yqRX+yC+nAiM%XT1kj#9r&&lmgFI+NZa9 zBL-sdnoKVrdXFf7V1uQ~K3OFg3HwFHW>wFloqt-B;v8c$E@3C9?_DehsHB`hy0e)x zfj(j4A~;43s23jrpVw<~$3Sq=`-0fFWZY9U3V8fyc5@EmWkqh4nx*Up%K#N|*1m@G*6t)F@O=%}b{}B_5Y11~nkEj3~94ibbTCrv%EIO*eo#W9^ zDfUf)fDe}3b zs?k>5!}z=J>beLPi~A$W6u41k+`F5JN7cOP`XVB^1Ee>Y&kWS)1HS2$`)a0iJsGB?mEWc!e7E*KIZ_maf^x1_9$vNWa(Y!fzZ-Qf8iJ;+4nC}gb7_v*-~;e14=c4{%7P;bL# z5oIIw^a26|Zq1o|i{wcCjzc?Ut7tI5nmoVpBr>_>t>o@J7Y+k{q?ss(qjx{1TNy4( z)iW!r)M#%e?|69Schk!kgM5-I3g8MBcSd|XcERw1n{!HAqHy-AB`_aGC<%_~nV+#Y z-zUKBeh(_dQs@=;o3i}Ze$Ctc=$uhnh3{va(j$gYqdo}cxeb2x#ur2lJ;Lx)my#ni zrBp7p)Eh`9g&@_U+o|i&7pGL}<`Xl@uVbfV|5Ei^tTK2i$}UC3L9xH$`$DZ`6w_kf z;S6y9I4ByMFooqqV@c2&mN6oblVw;MlXD03tvI=J_e;xMU<5h+Isg)QD89j(qQGOI zio1ei;GUiMXo7s56Mtv-QPP%n2drp*RxoJIQap+&idm~1x(=D9vx&vNuV)A7;X@H) zJ_qremv5DAgrin{80SaNf@IH;*`wfa3G~M0ro77_y&EspdJx#Ulv?SrGkdde8+Py& z>4!xA(;?E#&TIZU$N@1qW8=ig-lK-B0O$ojBsGQVRz89q-(IEf=<=#F`snH^xcl)- zml({VhJV1Tz7prBgZfG!SMkuRS>P=YG6PZqj@;hEQV@0)z#VuTc#2 zJ>WBA%`=1|5FhKobpCQjvC+9SP8mrU8>1N0M6Xjonf#iZUGca9$JOImdA)K!v&S~C zYhFu&bISP09<>#iF9Pf0BX)-hf1)<5Axm<;)e#wKkBdio&*<2}W@{R6g;eM44-|Fy zqS9%w(Bx2EQ!DhPZI;a$)FZMFi^YDMXGBNXJD~+$KnkP_)1aeZoW7es79p1U1b_pg z*aU)yd8e9_e-vM^p2@kg{x~CM5T38nS5Oxf9-R@QHH*w@pXS4+@Ad}9CM~}~RVu`&=|k{!!$b5JY@~8= zdeAK%o#|r6e`>AtN#xvw=~3hxEV$D@=fk|D_Pzs$30~SE%XZylbeTnEoj|%TzT=Jq zgzyEx-+lW3D@Fc{4YetQ8rVJIjdSyAq%a-pSwFEF_`CGQa20J8P|l6W z?c7y!t1LdMqRZ#FvBIS>Zst?}y?BBI{`qTalrW>2jGj2I+p~-q-R+-v97Le<&+LB1 z(Ac6gb(x=k;3bw~CwgREsAXbdhOnlg#2Su;+s+2PD*ZxL?5+OlF|Ts0BGOpkL)EGi z(DTXDID zT!>6D%tD$it_4WQwA((BvQra8^3^HB320m1r%3O^Ri$Cumlxq62Ox&yD0i}PE2i~J z)|suPx(zPBDmOG#bR?B=`sD`6#FXz4D|CY^Gg7HWQ+)S$0eW)Zj;0#cr?BdX=7}bb znqxZzt1)%d=n*P7_UZY^==ZNjz9e)PM!^E866o2+3pTLpT<~bniYom%l!Q03jE2~- z&xq*H?9Tx)e?b}j5@F%(I?7OLe`Cf7`%lHEpnvF@&{^omO(W8kot$i@(p~kWVwXQp z&u1~&T*Ly&YQVti(+=Bn;K!d;T5;~$migX^k+?lkgKVRN>&*N6 z^OsWqS1_}N(B-K1rAo8%mee0+W(Bd$ntmAb8te-)-|ooGgAwDBIZtsHQ0L2LtS2%rbZ0n&}GQ z)IS3X>FElAGj4P8)>r^Xil?Efv%;lEKfQy4%Rm3rdi+@I>$NrdhFklm=ch?Bn(NZ@ zygs85zZVpURE07T-f)B~&Gc6{$z?}Yd&-5QI=&^;?!V{-?|W|gVpD+?n92^aH5AE> z9u-Ol{POK_d-@9LT7t{R-w{QHpFU9eA);}RQHH+XUP;MWB%P$jR4+zomsI@e@Z4kd z(Oyj}<3m2tE&Kj&%FI`J8pzBFaGr~d=VNAPlZn#TR;nO1$OJ6_ycLWf1YftBa!3;% zRfU>9;?G|t&3Lbdt7iHKs-6{=yQ0t9#}^Ji{TTAi8?d2fSoK(YfrgZQ$FARaJd5R} z?S?bHwvf)Fsz#tR>6Q5oOt}@4%f#|4Gujg~?pxlP2my;Q%QgaE>$3%>Kk-W?fNLmH z_2DyIxQ<_3+_EOPSYgp`o+Rv!pM4FWnS4+nZ2V)gKc{*@#!H9S&M(uRq>Eyt8)q0z z?MM@3&5P0NV~PRE6Z!NAWT^kZ;t~5-07Hrw$HW>~GV2BA?Bit?;_I{$$DQr^;P5_x zsPlBdxRN842X5q^6k>g$d&vZjdV|+7XSKG6KIfLlRg{55|x#yg! z17oa@#TG>*_Y@Z?pGn4`H>?~5qUcBMUdY&Yxp7c{^xAl_*<+bw&)kNdq`W8`AV!ZY+EgXRKO4Sa6WTelMH3lR zW*DF$s@9sQaIMMde^%!tL#uHA=jwwwi@Zk@TX0^U{Fryx_nNy@UNh)QduFq}9k?e| z5R98Jg-`2S)AsgsXqnj#-PZASV&M7cbDo#(22iq#siDtYcqysO0$!vzB0COr6&?_u zWnpUoBr%PJjQsawwaJb51EK{@GLF?6R)tL>=*>7&Ys8_gqvKX<^??19@xL_SJ(FHO z;5EOAE(dz~59q%MjADcMr^rE%$hR3xMc|iy$@a1#rYXxzPh|;LI^`p>7`}I|R}C(| z7(Hs_>yLl8a^^CX!mMmF;aE~OSZ}EoC^Z)j*`^;j)*m;ghLFVRFZ;29<_rZIMU6phgr4- zO%axl!H=?ElcWI&P3G|XJ64Yc$q_|p-#F6TS0xNp8YGjZy)n3~wk0>Oh$>Ran1trz zmtQ@F6D0L9twR>34q%g8~y-h-ia) z8lDF>2D1uI^dn3YNm5jtNM@6$@>kWoYt%d~ODhsnj9!fyaOx9F%zyoqh&%AU`owYU z{Q&$$4fWp^E3U8_A?0n^ib8PH-Vx9Fqn#sAAb!wtO$?LQgS`dw=66T*q7Q$CeS73Y zHra~3rbBvjVVTtt_IdU}rxJp=XKO7tF_QXJ#aXu>S6Hur3=o#H7j^VyXv$dwL1Vtr zEU?g?`nMx4hnQhOMT_7i^Im!;C;wSpzl*06S_!$-cC7{I`JnrnAi#3`;IhiZ!U5uQ z9i)+B=#Tz0=BJ(4?$#bl@9s3Eipvqg%?^-{06dSD{I3{AL0^Z~>&Jx$ZFEPk`q{|c zl%~~pQC&52@=%Icp4zCeCG~vxNYMW0l@q^4Q>gh@9tOMecFWCepmYzJ!48 z<@?@}y5p71|`_2pT4<3A%J-C(Z`F)PUK_q^AAsA37cSvhd{PT#X@Vw=z?*E*(BG?Wsmny@gdoT3^L3S__%v%qbg{tP*Cq#rrza(ld-Mb8Ei0D0iOsL>AvLnp2 z_INZTwU?KqlTL}lVdTh&H9?8%Sgo}Fx^GzjlgHy1dj-*9PeMq@v+opMGOLY2KQthT z$BZ>C+WuaS?nT^6H{0K+d`(41hPrQ=WO}h6Orj8^2 z9}EsE(^`%#dosifpZa(mem)WK5tbkK^^A3VFol9c_j?$~|NHOd2l1XPZiCyjygTuC zL;=oH9xbLIQK@%B%8BdXA6KrkkL5SSAIC$@9=gam^e94M>6f3D{noLWQs=8r{kn1P zt&VQz7mL4g&B9|46v*GCX+(SJRBtyN>gCv(Vd@Z4V-qRCV@y7nS(n||@tKdsOx=fq z{FgjDDarkSX>%{LU6Wx(p&?Oi6d}k7C{9c+sFd>M#SI6enke(hwWHw3qG6dQ^WBIe z>Cc>zeR`F_K{mU0ZgesT0yuf)RxfZ(HTT{E{1v*>q_f7GI3>-h5K;pw1MVOFX8qeS z0t5Sv^|^%wyc@a)dA(b1#S;NQ2Goe)?~d|MO>wSBnznNOo0WuD*v`0EifpS;QT`2b z9>%7Nw^1{%b2PBS zo#&YQs*xBqBqzgPOGBgic~(r{AjwG zxzW4Z&cE34^Wg9&H21{x1wPLjFjd7sNd|oChb{aZFyjXHMoqN_MYYONg25`T!!ogH zJ3)zkyaOnqFTzq_4S45IP`1PfCGLeXQPpVqgiotz-tz|Q9ephkPGl-#{L z0&h92L}i~dP}CrAo_aBQ^wYzjf_PG@f&IQ}urx{^iN6CIVN!O#F_!e?Qg~j95kZEP zV@rG?3!|wUmmYaIDpO4{6h0|Z2zpnetKRWE&_6LZl*FGMEhq!EADRL5#kZa(RcOGH z2IpU9iUxaOT#t;>(DBZgEx9s=zBpsyl#Hs|+u@suK<*kunvSLRHJWE4nm8rUS0}HfjLb zr@S0gGrcpmLOU*jQtjo+|Nb25zuWqz{~WXh(7IFDitLYpMBR&AD?Fqt-HOPHBp4Ufz5me zi(>*K5)%ZDMNIg&cfDWM|DxYU2;&JjFs%FocmZC~`Z=~dDFbl`O_k;#TftaXj|a^T zm##!FZ^{n&i3IbDHuzbt)&${QS%8TZCTrQj6@~fKwS@TSJf1r;REMyk@TB-qsF2OV znpaF-ef6dEGOwmz7za4kH>k(EK>60j&uCFlBh5E8A$32+Q~FLb2*6tpYuFP%dqjy0 z>nZO9;+9}cL*BqU-JJ1m?>C0+%doIf@wNKJ$L@6`D&r#Sw&OnZ1zI?CZ}QOqlWgWZ}5V^{c5}XN~NiD+ND{>gmgI zb_>YgkK+i3_S^V>gZOPw7+bUqyCH*Q$`gDlfeVEH#HoS)SSooKl;?p_LXRV&FhY~Y z;;DOKwM1V>aIK0qT-LZ>^5FG5ak}YrV&!Iz{N>VG+zwaTyyzGfqoWTQy}Bl29wuT! zU-K16<<%e0j^xM^egT%2Qq`BVeJH_9+SM^5|LsTxDdtqfmJ6xZ`{nup)3$;1NdGPF zr+~5C(=7ich2|VOz$i3Io)*ts{8*wONT(#^RvX=9ic0q!Hv4=L!jjqMHKJT4v5{73O#LAHVkKmVVeJlxj&^B)li5r2Ln z=F#5(k9yy*w-%tNtN%WZC-sO>R0M1+f5H2`)u5zptyX2jxrw;>BRtH{(FyX>Ao$krbG2V*KF&0-nv6C-NreWfIvdt*l6^*DHa<8@A&rv zMwl*;WrKs^X)auCC%M+aWHhakJ;jD#iuf_WV`DHgrUH^F^X}LtGp^>}dQsL6zV_lV z6`w&j*=DZB-(d|8xy^BSb+9t8&Z1@0)|2*g1r9Wc3reu_bRy?b)Ic(0NTJ-|9U@0Y zN-qsTwAdi0nL+3O0<+O$O;(d^`Ulw{!G)Bb%Mq3IIx}3Q*siPhv7D&MkQ)4klIJnN z5ScV(0Z5=fmU2aAE8IR3b-lmRBmOWoh3_y)oxA$Dl<=!)2JrBu+yL1vwL&u$OD`u_ z?ob8omT~v1i0xK?+DsblVe8-J>*+oB<@r?8SsLWUATdd!=1<=5M;+$iBtK){#%qh` zOdp;2Az>u=01H4uNZyLUW=tsmA5{I$XpOr$ezUWuE|0X*p}HTSllh2CuYV_J<1*;f z+9KaoGv^a})bhKBs@aOKBlVN*;k34{mSNy|YRh1Lnv9y_`Xv^MAa3^2+`FtmAIp z6YoxZHC7NY-C-cG8XYXQzq-1?>!;-p5TV*XonYs zIr8(d@R4{^V*jZRWv>oJbEETe%Tbi*pTb6tWLh*riNen-cl4=uXDAHN)KyZNMz8Iz zb4oDD5G}~VM9UTl{qFYhIU|jiyKe{V?}C>5+0o~30>+FM!47Y621X;(fCs^4>6@hc z=h%U6%{Zy7&j^d(wVszeHDL1?PMnphz1W&eg|-t~F^jLQwWA-cH|B$qH5l`JYc<({ zSH+L$g&-A!N4ebqHONex4RtV2TK`AeB3|(hMn$PJh~Z!LnZTz^Kj76eO9|iyrEoy< zqyKzU=3Q}!gK3(-;e4Ex5A3#Pl>ti+94R3c8-} z+HnL2*SURn0P9u*Q51iN5{8CBB8f`Ch{4i@ITum2D5-FSx5{-pf_`HyLvQzuV8!r0 zj?b9iBWXxzP1jr#7r4i^F(hb|O3D~4_#)7#8rx7i;343z9m_m4CFE`NVek{G9A%29 zc{7z&m4 zZURGwGuwD~UD6@WHWN>rZ~>-`A*Rt7Rl=HwIi&yC2{Zwb&K&qs#BydT2X&`+_KbdV z?OMRQ`#Zz7?dx*oxE9rZ6nSDSmmw>eg+A)?7dx|uXli6BRr&Nv9wgEC=45~&76P^= zB~ACBK=1@FUu8lhUUG$kHKLA+3WCA^0s=*dHd8s^SHTJ(k7>Gz08DD~(XcHSZsgJ6 zZ(Z@cSmCUWysRbXlUkOv2*4hz8K4Dz%J;k!xZ0#2+~EJ-EFnWyGahlk$6kh|&{8$- z8ZQ6HFp1XoA?f-%l%F5iR*jVm2J0Vq-Kd4s~Ro2HZ=X+@AUqF)z`7%n(-#Z8^GrHkLW38sA z(G9W))}yKGq<#}mU{%VypO+5n%Dv)!(&&~w69h1-{ZI!u!1KP4 znXZ5^a6x=zzT)tGc-uX4G`Wo+a;iNX$VFG|b=d2GJp}zo%u;-oI_NZblOB0;X+>gh zF-?!OYn|m@u)aoeqESa7gs-qCL_AKigRg0kZoN%n(AUBE#_1Km8m5b|0qIFfagR-Y z)i_OT&R26F)zRNH(dFMMHZO(mM90bMmNtr^h?b?$->A>MWM7jEw}-f&i;l9n%8rgR zjSWSP!8UU3`$};fZPHXSIAso5ZiA7d78u+nmTh zAxnEi!@^TXty>7K;InwY(-5DroO~ zQpWKFE!HZnK~_5VrMFM$Ump3jRF~;(SMNDt4!8IUUr;T{KHc%~L_Xq^!T$G5NP9K* zR~b5Ay6|5*n1K)rUnWVVdghZMRly0)XL3t}v}|@@r5`>U=bI3i=>xU(jNFoI&NQy= z=tvGEZ`SF#P48GjO-g=9G(Qr@`<;@5Ydaj#nc^r!xB0J>p5S{bORXxz`Z+@L4WAQv z!~}H>a&Ir(-s9|AYVsM_{PXk=NrjsJv-4_IWEm!Pamu2zbQ(9}jd;rR-XW8bk3}ig z)d!sc?&$>rE-LPV3>TVIYFuGev`EI8hrWY_71Zijfor0=M2!*oliYumAyKLGMSF9 zHSM+c?KPQH60zsX$_;%*)eR5-KbpS7o$c>^Kh&O8wUZc8yNaTT*ej~4H427>PhLbFeN0#?-x5=*DN1vBuFL)T4g03Ux!OyyH(KRBIa`W;F7m61zS;X{ zwGw{M7Zx=CPYd9Bin-G%=q{12^}4_>Pjw3WOz5kpi=_*q_r{vWPKX>g?(6Yx?9wqq z4%T8_Oc_@5zFN=#(72o1%#$CB-Iju5Z4)y~p}%u`KtJr*xrLo1LDM62iFN3Z|_*avOW&={B~(%|Zmr5Z`!ZZ(!nG-{t)ZCO=NQDRK*{ zd9?Wz3#9>e9yK4)=-VMGDswy!`|!x1%E~aM)iu`Y&$W01+_7<;ml$HPe@f8aG$VM<1~v#34-;fkl8wGVISXc>h#<9sYTef-s09J zLKbXQ74e27&q8BL7&U7EI5{pjIiYtRzAIM?c2h~GFqz!?BX23CJxg=nsnvOBgf((-W>>JXi2Gj#cdwG>gcpPkild6+3S{+affU?|r<8ZG#YQ^E)_}l5hAVdR8k9|0h z<6=!?m`;~J3@2w?&Vw6bwp3tOw4WQGJSAUrpt{81+klh=cI?MAc#cy*b4@LT5pOoq zO1n2eMOWOLsF7M-f5}m8?MBUAp7!^Iu(eU29j6LkZo>qg=PVKGtyZWl?=>rnq=#;z z@~Q`{n-KVd9DQPHhfq`niWMFy0{3pEWFCNC|2%#eR_PTeUPv;XfFxVurvJ8PQ7c(2 z8SQjAl3YSosN?0?qxAmWDS(e`v-&x$5_i@o{DmKgre^}RMqWbUDpOo~)B4!|(s7@r z>X2Jx1B{y);u)l5x3*{Zwbl2)`$I`}n|%9K=E-|!M&3ffHu$t@AUI)5QE zb(JCWi^uv~ms>oP$AK>XoFJ5QW2=#U0F=0js`Vb^cdBY*))!&WV8Wi{ASP2wla z!^;kG^FckZuL$qa|7QI1$Na_l7*NG=K#fB6F{j3v^kJ&*wtu(?kh7okB$k5rL$v)& z+y~ycVNI@EuS;$#GL?Lcr&Q`}d=y-NCnA|anPG)SeyK$;@7g)8EP1^qJr|5DyD#s_ z>S|^4>XK)>=E+zbuuTT8DrFltDbr#l3g6~<$_f8VzY3f*#9l=`h||SVvGd#_r|G=v zYAzu`wQayjj$Oyr%~y9sBw&W_a-tO{l2=M|ZaoK+`f#6TRu?v0#_y8yiVH-C2R+59 zGtQzUUpj4!Tq?==MdrH;zO$zqdA`2uQma0&M2YzC1#lR24Sa9yQ|dHOSG;-1ZJ>Z# zToVwnej`h$?lb!PaPPv((}d-TnP-eYv2B!TZBWaU5ou!G&%{$M1}I3>ZM3bc(G4v) z^4Iqxu?=tOcec`~A8bZ9xIA@vPcZP~z>-u2Gm5Ytn;DQ)V&#&H(k}nD%rcXOz9res zJL@GyP2W5Q$PJDajTcVj)jXH-D-a5%Gm=ntWK-sCE;x$c-%b0xYL7nN9UCF4LN%G; zrno!ApX7;(OcEJ8i)KHmGsL#n59O~fakw|ixtkXnD8tmAz^cPSWFw{=@^ws77F^zW zef6UwX5H+NP#Czc@@LDYmN1hpiDM#j4q#``f?Y_621?C?TFynvu#(M629me(olJzf z@W&MJ-IoOhIM!Hod~Xkn2si(4hz~4KOAPS=_YC~A2mA1(DlMRXe>*GGf^?G0hx0dF zCGQ@`2x4Hn$JzKPlMK7s(_^BUO1SoS8CdwpY~4y3aH>j4z368&_WnNG>fy96cgpJh zD@BV6Fc=HQ{$q-InDPf?d26Iuw2JS|06W{#EzA{ok&0lzrd0byFkE&b`_cu8od zNNZRLVBP3zRa#$lcaBHHixbg2lIv?HVXKaLx10heM!Nde}#h&5sYD` zx9(sg(Pw7^9A0$WOIC2>wF524}%omcRS<+NC%8Q@L;uFoGwoeOB=( zQBcnW?DdhmZqDr1V>TC#Ie(L>-0}6LZ?>b@(wyGebWig2!1>aOjCMI~C&$CBxz`rEqrt6{Y%jb z@6=Yn%ORws*OsWcK@~xs%HI#14!XLP`$GLk9mJxpk?eZB2>A+%+P+8+n4;#JB3V7Arq6HR z`RfN3)LM%nZwvtGwNwXqWm{=pB2md~PLKW7@3z{&Xko$- z9=l1jr6KW1Cy#@F9)oCf`(~BbSlRdCYauFuY%zzUlF6Cd1WYbOSJ51zPjHM)cf&cC z;)k$LGuamZg=lVFKUM3DMkC$kxsb5HZSoITW`X)i^`Xbcwp2ECfcIg#DaX+@(VrtM zQDy^#JGs81avK%dq)h@@Sk{c#_xU|IFUmo04=t6<+2>ZHtY`G;>346w( zO{7`}G>O|}zH0YZ7eQ$ZMX8Ld{ZPMCPn*WNd~kG@%vB-3aZ}!J`o4kLUo;l*9NgRky``lB9mC_q-#P9 zp|p8ae+y^vgywrmc&j*Imn~0_U*n}u2w4Wsl9|nCa@kSos08F>?n|yq$l&qDz-8<2 z(jE;Il_2r#>D~*}<%S=L2US{P=3aU>#WCw}GP`1}3qN&IezxDn@>KjDU1D@a@&GIx)dC(Z~juFrAb^i zp5XY5aP!dOL9!lSdMOoASuH3Idx}_Xpx2!S_spE*Iv)T0Z=NA0Py}{o{PI;s-{^+@ zo})kizFYq=*iOzey4GYqemnn1EBQ7I>mC#s#H-<6X`K4dt;wA=ZF+vUcd3qw6|z8a zTG~|QND=GLJzKg=7|Hm7w3#WEYgwg@U?%f3pU+ZBc!wf|xjsXH+$!4!KG31!_tl_1 z(C@ISv-lmX5M_$Q-tx}gL<22;)V=BzL;8Tf>l=gFeDPl&|KgAF z#lM>96TA8(T%Ck{@ZisQ-S-yTnCU7iw#qihQdRf{ed%M@Rgn_*n1-cG5S#ukMNh5q$sXze$(W?QN=41uh7l6>mfUtQa> zUOd(f6z|zohs)mv8(fmTM6F9Ia9|H#!hek;{FCA#iFB251dmiP|JtD34*T#-$@Or+ zwBq?t_qs`Ayp2y{mwv7B?C!64Nww1=+r5HWI%p*&5>%2=Z@@(cm-0y2BOy_;=a#o1%ia_Sj=T)<}J%DHfz zU!Zqt$Vf*ezAyC6q~at+C_)LWDH301Oj)kM?;c_7h!Ci0Sl(~NPH`a>w{Hht!QE5V1mRXTRx)pg|C-|Cna z=I*{Z{3id(AfN=#@+!R+QlBB~J5L9HKcBvnNz~7@S4q~dUMEkKPQY7UYg@Pp9YTv4 zlm%0PUw-0P4=WjF(Jf`w0*lly3IpC=_i`K0gsU@mcmvK}zkxD5a%(u?cSW#c-CobX z!I17Pcr<+uBYQLfU$1+Hy`mGDD0-vuU?x=T^D)J)kl>Xm1h^8-#~fumbtX>s8E(CJXnMv_OKRIcb}(U%t?1_LC|uXE0|X{@ zAn;%LuC`oHF#MSE8Qt;HOEnPv%J#>uSL%z^`+@Da+mz$7t@RlRxO4IJfqYbAiA$qH z(j^hxs3xuU%8%PVBpX#x9``;Kw%Ir$1ssUT82U4A^sdK=O~d9&g&Duq>qG359!iH4 zQD_9zCIK73Mu#AFvMqWtqNZD(((bo`GZIA>q~BaF@I;6HY`T94S1!m($sB?mUap=@ zJS^2P9{BFx`;aZ=U}8BfH_AvC*C$J2B>pxJnpcKv{&ViUs*D;MC=d@V)dR<8Z^;ot zUnOQ2*aeY)gHv&RS4f-d{+dt2HIb(0O^9$>Ij^yB>5+-EZV)WLZg z31V+<{|E353Jkl#uisknuVes{FTpJhZYNEgC1|%BXu-& zY*n0^yf^4qb-}MrzaXDoSV|W=;OU0MxgW_5#0fBRlXUMPReR7H%7$aVD8 z9A@)=A%z*??SNFZ?l@flrwNa7IQ>qWlqu2*EW?JPB>`B}22k8bS&vPidwK9R+7TI7 zJdTNqc!1_Z@>OFwQITro`I4x=ZBY$T}eTVq%Pya*gQYi zE;bomTb{J$!5_|j5Va}l3sK~>JcDz1Ce|ShCU)sgDCcOlHkZTSw1cBdsRK&RuI$ay zf0o-<^~0#8%&@QT=6WV#>uM>1TC zK~U__Du&=okbK%VHLIZ`bDZ^p`Fe&;d zF`45(7k1G-W-^iU2*_VdJxU?V4;nx%YbyQuk4fB41Y@1}?{Y7?kZgaED4RHrO0Q&y{gY_9|8QdGNB ztdS}q#-`&3GtD$90a!^9v)SE_S_-PPpzit_SZE`veF(qTcS}%2FKk7_!`-+@)}dy|N40q%ECc1t$B5qx7ZX`(3s(sq)!@{a%Wu#dY}jZEp%7Z-qt5iP9&`1l zUzd*0)bV0=o_L2iWXq4EI5HuKi~8 zdGsL4SaF`bytZ$6nacn4`AAdW(#xlpemp>GTUYVii1On^C`H)M0~~#}X2i6j66T)* zeQif|MUwlUeaQ2D$8(e8*?-5JR|`*$?6UbUHL)M%4k@hsVy8->s%9D~G+{I*TQk@J zpVNWC0fd zWl%L#JsnjmGjl=n?O0JA`-<79w#4#`GVIky*>uk9U8%Vyj-f5=-z9rx4}V$EBVO!C z)8n!vnfNt78#z$SW2XfVY3{oPTtU?h5qTHIGu~tA7XhUvTUeP@w;$%qNWN zm(9Frgt!I2XK#LTNTk3MXA z&-^^LS!}r-sIFz%c5x&vQ#1ZhUl!mk#YmZ>6{-KMya~hJfBQwms@2!1mRLn}@43nY zWwt)n^FZV6BY@6``jcQIP>_cl^(xd`*JfqX%bzyHVPzuC8(>23{)j^wr@HRXvEQB2)4?xmi`MQo=jXe68wU~ z-X;;ErmRYxcZ?K>ZXl*>#ZFKr(bZ=r38wScmY;CF2=kP9spuGIhk87#J@x}=QENMc zmW8W*3(9L$V;~YV7`^SP_;e?tzR@{Z*GlMvyl4j{3ED4^dLqvPY{V1gVZKkw_gdTS zDf&QI&qGun!F3-U1uCo$4eHtS{(W*=21Jj|XGS^X+m}Ah{+TtrhS1B&iG3|>j8ctJ z(hnEBU|auW=vGtEC&CAv!ap!Z4?o+9Ro_C7GMtptS-LI zoWmJWvXW@dSV;`v?@5g}u3>0!b-GJHJ`YkV7&&CRU&~a=&Dgb34C=n|antH~etJcY zaU@ggb&T!i3?qy`l|355g<=IZUn1S~$+XzS&d%bK80#6L6?3FX1U|6CxeqR z>su9=kXK(g=qpNCb^oU9g;TG}UWf-%o=t;TkpCFBj=!#fzD}@r=MOGqS0k(L$rBZ^ zat5DeaIQxztGl%6?;*K74wZ8)ig*OwQ|s>cnx-ncWLnjTf-luF2{^q565ec#JFD-Y zrG@6n;zA_j9yDtHo$&+gJBp%Kn59e_!>@9n3CAb)x}ZxoMVyOtABtb+G5?~b*SnlM zXY)thFS*!``;Z*D4lgJkI1mt_zzgln1D#bbMFSbty&_;-ft3w6jndVx+(p=qZM<0o zf@f|3EvFfIe^eOW=D7x^b>2|8Ny~}axE{N_nLEMwia%{Q0QUQ=u($517$4MoapC9> z1@v+-qA0!9MJh!9@k$1Qn6h4&$(X5o)7~EdR-$z=pu z!(g(J{keLNX!(B~=ju*tT7w)w<@Hw4l;jRf;GYMv_rS9$)2=Tpp2oJ~H6uq>fX3ns zJ4&ReOAOslXWOnU^rc^aZX4Kg?N0i2asB(AN&gcjEZOd$-aNVKqh1lU;Xfy!wtakD z&{oJ=xy{5)&ygEzumk|KZ|a2pCmvF7izQcLF6U)qvN^1hcv}-(NfD`_TRd=y--N%x zc;`dbpsH%YO@%Gzo3DK7k}8=5CTyN|OA9$!^KgGKC%Wq)QVp}o>Ap9&835JJHeXW* z)A7;BVSu%xidI<46&R_PCZrMt^^OMp{772|*&k-!nwk7S(G5dDa>OnPB;IkESTs%0;+j>GT#hy-yI0{SgW6Yv2mn*pn59ATmWk6xa-3T7)kRGnqHDQ)I_1!}OD=f;6E z%qBjEjZIR$#vUS5{1gJk-AF8?>$Q}q+1(F0)dQqWSM0=d+^d-(^z!&PIfGcxt297- zHKr5eJ|5$Q9}teh_<@<{)lx9!kW!JH|LbY}(GL=of z|4y3^m4KD_Bb*3d{Qi z{g6(F8}bHNTZdX2r^V+Fncdm`;yLA~Hu-?#S=n*v3Y6b*h_3f};k7BIdZXSv3=f4O zz+A|?g7%zE&vX&gIHD%bp#Q;~54l%CKSdDALGyuIc`AG1p~D-A0*(C|Fz18ZAhJWoy|I>f^;68$E~N_i z69UFv)L$cbPrJA&=J9F@!h1&wPkMpjQTD$bN>@ffKD_;zg;ZZLduqs=+FmdE2IMB_ z;Xswz1fm0wY@kfauJ`3wytHwo}Rf0km0=c)GM`wA29la{FPjuTl*|d9qxJWsO)}9p_U$UO5A59L$5yyzIcQT^*#Y( zMD6&}Apg{t*fbS&qhs&a=S9s&=+L@j`m{MIY zDo?NsR#1mW`6`RW+8L+jZK2{d{A@ml+=W?I))QR324NZF=)`=`MOyR1-@A@6k$TN; zS8X~{e~!3vG=F^9YUs8|ZuidN-Xaf+45{HBg-*HSqE)Fp^w>OGw}Te%T{Ijv+Vd6Q zode>O_OIM(X~l~Mn`{NoOb8Hfw9<#Tee#m8fxJhu{s4(RqjUS->}*wlM;xivgSJ(` zEBpx)RzW%gN*?`cQ7s3#LSV^2e=2l*yzT>9$XR7t4G0vTcn!I}=>!Jd0j-GO_4_kq zFB;|Lg7{S%M&$h7{Mm4YV7X?k751M4UrHlpU#Zzu4n4x2%d|pA)0JR>jhou!|BZ!s zY5g;M065S1YhVo6ne!n^sme}i;kB-X3n?jRIY%fw24gCS=!G<+R6>Pzgu(%WGL~IZ zz_1V4{~=y87yQjSnr~XB*QNIi^+lk1NQdKElqE}G4OONV7Vh?TKpcj_fnMH_@g@yE zd;Wy=K~IxAS(Zk@EOWxHV{ z^e7`4xJv$jN$|WZC4yKjkkJsNpZELlQvB7-tx*@ZjfW~9w=X=_uJ%%LuxeQ6!zew{ zYZ8dagB6O!^ASy}o_7}Hgr#@M)(oA_O0m7&z5B3L?>eHB?Xco$!epY=0CtHNKPPy9 zxHV`-t=< z!}o4eNMX(VPCJXi{=VTRTiN@ko^Hp9L2HTCDvC}tpZtESMMw*P6(oweGDJPMDgKVk zzvM54*l9m7Kva%+Ve~_go1(vcAH$Xx>%RU-^uS$&mcMfM#3zc|I(ow!xJVxhZfC3EqZj?-HO=ST}2u+es|l7%*fE}1v=yJMLe zMm@faboTlKIt-D(L?&ZN3G;F!>gJ{>u|8@{Dok*NR+cP*Du1IzwdQ3KM$nhbF^+6G zCVw0>$Q^E}WB&skuQkA2_oMB$JxsGF%88^W+s9Gf%uGzU#NfT9zEqB_j0+-Kl;EFQ zUqqO$*knm@Q`I<9=d^7O-iW(P4raRtYLB6Eb^>_(!0upPnkgNUp*1-IR^^2@(j!Ga z=-&)_q4qp3zTZ||vn>j(qJQ(ixxzAoIfH6!eNV5CkHen7UesUlYkJ|~UU zyR2y)KUO`rDtRE;obEvoP)`|g4{;5{=_bA^x!kMp2%r?wS^{B|L_V5G55zI1hl+Y` z{XWaHS@2v?9KgOk$c;girK?N$%^5TySPcE^0=e>|Rmzjh`!a5{)VcOUa^GrD+(H{E z_Z-q{Y*@!#gI4ZqM>1m6?e9<2T_oZx8aKm5MD|~Ca`-MI&DfH>@AWhp{LDnn!Z0UJ zmf+-^g7%64WF=ZWWxUE8pqC12j+m-;@Py+;Zk~QeSY6B58F#J?ACw zYBzbsQ37ug&$_XSq3y}8roAWV6EW8UQmf<6_pYw*zt0v#GZ-=p(?SY+g#S(>JkmAi=nTp1U7Nh2t_&KQ&;d)4(qCrOWsQ*Iyq;tTuoFv62g0WK!#K^!;D#755O`kDu+dRGpQc)a zttco#GzK==^kVNpi@1Q7#32$juo4r%B0YU?@5tEtuaS1&X^S}Lj8W#8_<5-eXoT4A z7cs8yensbr)XlwYl5sjkmc!4dsAS`}R-JZL;`D7+g60dC8~%AiA#sCr#v|Ekj~{W~45?VZZvJNVe+-##%8;?J`4$On^d4xV2HDa)Xy1f{`rn5~&x(W=XPUoIh;#D07fWLKK}t(XZ2>7)vr|396}x!wOB{E`^kw(U0e{!{A7M$lo|pFP zoj*QtK3!HqB-o-x>jQyKngIVS%14UxL~!zd7(FqP4C){2%V{zeqA}TuRn7BnzZu$i zz%S@GGcBw2^3Dq_ntrY#$-Y;+ut@Oh1S8+T=Y#(=v|2r$&>E@Sv7V|s70cvyhxv-F z`TF|;<0ITi|Hu;$aqDPT5~PHbfKX-&R( zov+7loFb&EU(CCF{B3rmN;PGx7)YXw-3;PrLk1B-8M9{6Ecl@5H%$a3g6njjPj$(yJqL8 zA5F+Kfw^Ktl@)1SnIc&4?R2NT9{-o+^I|)&PKKG8&~A*~g6`cWX|w{O#MYK$rc*&{ z{!_Jh-XRBi4T6*guR+n1Y2th$*hkE5hl|6yBMp zCQkW+Mf>ioLAY`*EzZ zWoq|4ArG7M9|zL#IpHb+eEfmp(-2{wk6ACowherk2y9Y?jxAOUQ2KvL@EtG(`$rv^ zM~U6EbyM5>%4q-hbN=PH0*gZ|SNE?{3OE$2jfMaBc=QP8<9mMYH2sM(jTL>+`MdL- zV4-f#DCzbzut;Ohk@Q~=-#SL&FgUve3-OlgEknxi!x=DJvs~m0v7|bdRzp?Qw&U-8 z`|A&{!UEQJ#esgj9EdyE>a@%uY~*-)#Y7M+%aVAsl}Mej#>~&4j+(F(~?q2ZKSnt^i$Fk^HMsY)M$YPGi1?^AQGn3Ow$)v z$>iOct<8l2tRLLC1N&xo*2Pr_BjPYRvHGloB;+*8p?0!!IpweSk-}f)le-?wrktE< zH}2F73rF(#SgE7_T_-Cd(k;3(3UrvGL`gddLjJBVUHqujmL4>?hakHO#gUSm#D#Y> z+($(}*(WG!GpL8g=rH-Ji(1tud^7A}s?7-cE>;tucf8ppqnrB#9k+lNohgBa~a#Y}Bky zNA`s}FY}2@|Hkg^S(kIaqR`e3wEy0T&&2*xYA&sl^J+yr8%!UGq^DM}5*^d<|A99b za^PdXDh9zfMrdtr!8sDpic#!VnV%4MaE`3L4<`FRqis78@-EfJrXU2LT4)!cS`YK2 zkqOi4Yroo#?^yq5@~{J#r>+(%M{C#GcQ7Gqb=3mbl5#n=aRZL!>Nf?79OT9d&O zv&ER00i@3DO0i~`Mlb+$9kez~3K9Z(RK09?2jESAp9d)=8cYQ=8O=W8@zI<_X#9J8 z?tb=d@F(*x{pCczL@IK+y#x3S@aiBISU0jeA8nECj?ktIU>n#`XE$#B_6*Dnl5zmO zBAvH#{22Q9VOrXWKNhJ3{-hwNZlL++n{$QC0I=MUD5L2I#999490C3SZGmg}9DiD? z!&O~bee1R=dZ!gbN6aqWZ|J=nci5PI#qQ`Pe7{=Gwv*b?NGIM|#3=V_!VWOw4>JQx(!nN-0{$s802Zwb=B;;B z0}F!ics?{VbShX}y4Aj0&|jFl4>oqpm&2zQFr9w!ew7h+i|cxqe9>j~;_uhM(4{iS zmxX0n6mqmkO+NAoEYEuS814UTz`eY6clm$tTN#U7jefE?lR!)`E5;VkuRM8;j9b7S zbqq&Pd21JsKSc(2F9sArm0}BII#Re9@mDsXIk0WPV(3K|&^hk&w@W8+2#O4;cly{9 zv3%w8^W|ynf=^?|%evE&W59a^q72tttPpX|`f#ff*b`Jhu5+yTxJz&aM3JmoylMho zXU$*b%l+ZCSIMJKoWAml%#GLpzi6Y0LLyt~yL-Q4Gj}eM_5vrhykd~=>M47Pa{4F} zS%fKB24>H*Qg9YA;5*d?;3m0Q1B~hjx`AwOfHm_$1!xKbsWq8;%m7Lt?f4?JcR!2Q zZ>#4ZXCfMd)e&7I#T&o>eShG>IQNQ@IE*BgVqMJG(!OXjAnl`KI;CC+G+Y?e zs7Efnb}JTFdTmGd%k=sa1eXu~?s&Brn0>aO*M~K6>Fg(aU{^~3ShL||pg8@@FV0oY zx_Ki{@c{embr~tL1DelwU7lLjJkZEfbk+L0%S3=>2zSsg z^+h!~2UnUtB?~Ubk@oow*uVMIbQ(l^L_U8QO2s|ew*z_wKZn>NS1>^A!23s@)4L3$ z5aFsIBC#zq$ElmypA-Q)bT%)RLBg^$gv6gumXKp) zR`qsjIX{b&TTS$z&CGkVr_}#ptfu9()U&?2 z8bba3fLMxo%rrh4pPpgS@*ZcRNvPY~q;`PHjm~xpLLVV?rcEO@FB2HO#RMI`N_D#q-J|h+SWfe!V9V^~u z?`{_R$c)qZmb)_`Dv}g}H_wIIDhDq5v5gVzq&@0B!`M>;bA1m(ui;587K~3AuX9r| zJU7-x7;yiUK6m-B{VWn+5&$%4uiS(K8NZ_sT#%L|o6fq;JU`Na;IKn@Gyb2f(pSYa zOW!HPu&}*{<)g12602!ro z>(&394b+de0p9zRHD3R7Hbh0g^ziRKXc}y&Z@0&UR9Lqu6OOe4Rf0P{;@Pdja@vnE z9QzDX)Vw|Q29Aaq!WyZZN`*m+X)gmex|0y`)l*xG;cW_K626OjkW_`P>GYf$Y=qQli73? zrV#_Qt(vpeVtl9PEu`f*cI@&KA>4E~itCd9N4-8l5h|&~WXULZ+xG}&J^n~b^*?1# z*LVtZJi)EPg8e3fKv`Gfcs=1;`gO&Vk%+q5T~+yH8lj20;~gkwhaRH{>|e8r{)pEr zHD)NCSc9rZI(D->qOhi3qYU`(|ErfO6-ckty`bn@faaVA`p@m>6SD#104jpM@|)83=Q%MBe&jVcA%{K)aK8Z5`&#Dv#`sDB zgE^_pNBF^Y;A2(GCiiE4EeRsLSR=GZvkQqRD zl88^?K_V8QTgnO16fPh@6)JyWay3gT60S)k^+w7?$aRF7I{sY;Ji1Ebd2%c;Rq<)y z3Q5SXd0>ziv1l3a>pgl6*NM3?Bg0G!EC=ruC3y-8^c^_erSz} zK&BF%3Z7ID#04RmNGIZEGr{&2hd;Kha#YQ`Kl|bbh4dYJ)XKy9;?w(OKBt_U8C%tUjznCT*Cg?BiOdGEhc`3vElUGLB`LB zRE}2?XPL=KvUk!h*S-5EZ`!ZTBR2h(TG4KVJP<;k7GDQ3di$?Jzk$|f6tuAHSk`~j zLdrRMvc$)XpK!6sLz#anp9EyXG&cn}#mEnE))56>Z|kTX{|<~)tSi)BrNq9J`7)>N z-ERHAhONW%&Cj9Jwrf#VBvzb0&XMEtLQ28=d*yT_#AI!ehRz=e5w4Upl{W&=csPaO zF`Jm$N9~scr92<6Ny(Emkdf*B<@lI6U=O}+(wNR!EgUT*?BLMz- zMULiU^=m;w9XvnB-=pa$MfhFk1!%Rxab74M8Eu~2)t+) zVu=h$M$GWusRID`U*6W&vAj}~*MS4=OC-1>oJ<|XRpG9^y|j}#)=$~fu3y5ZTA=Oh z=Z*|l%An>cH-}Qe$$4U2$v12(e*{EId|@T!-Gy*#2|{VX9k7$9TMj?HDbOp*yso-E z-P->zP#CZ0h5_NQh<-%&`#fuGYd?h+Uk$0YVGg9`RWq~ z=eUE!igg3zFCx+aV=DhyAlv`$sBvxkZ_%jw#wGiW*~PJ*96zwZag?HQhvO^!(KkGT zxr4$17RirqMtY7+(0Np$V<-ZK?D7zR{4I*yu!vxUI(3h?G3vm$)QnWMiGz-Dl)jM* z)xwUa6VM}8st(8h`#<_fX&nbvlVdo5 zk!om!ad!Iu+dtXbSndBsjB|oCj@NQjIUG?HFj6+aL4*Sce(cBRq!3bj!{cE<9;+xI zSF8+3M&wU+jPP$~FluVt4Mi($TqNTNhhyy+D;TqlL!$A0JUAR*u~?OE({KYmL(RDp?gp(h>9LvG}jVqGU$CPF1EjkGG9M?*2RR z#yC`6&~7}lG;S+a>!$JKaD2@_dSyq>mP7kvCqAd?AD?I-r6>T_9-n0oSeq0!gh{l4%J*ha>?q8Clyi=9AaYDcGbfz?pcW1{JXUFX+;*k$Ou7miC!H)uv zNoLILikOowNJ?W(s%BjQ35fi7ygpS>%);1}7(ZKL+%>?7()geB{YG0D_jZ9zqu|Eu zHwKHNk8)n`k3Qyb08+1JztwbyA45x!39hp4XdnkkkjF|`xn}(%5GgTv3zZd#D-;on zOpGv1-KWEe#;P$jjpMow0uRRy1M2L;c21lV9cXoVjcC7BllXO4M)1}=%ntF1W z=j^)TAyokdB!wacA{mkl$_h>K`Imr5zqJ@f{!}cs)R^|wsZgkf(2b14#!+(P>Nf_5 zWAPiGUNIcU;fVZ5=U56o(rK$2-@?})Aw8$P|CpZecu>Wvbvh&sD2N0|ZkVjF`~qhF zK`8wC)&G`XVPR2%Q4UmxUCRxg;iS+TsfxbwDyBDQ&>ONazY&EKSesjZ5 z^##Z4jKRj$;5f0P>QyZq4oBPm$l(Bh$n~ei%m;`)$JJhw$DoI-l;3fzRVzUfp;m#J z|4+gYl>~nZ7LV;L6^L?ZoL2WRsD|ql-*WqhFO)bZn*3U zSj~lps#oKVnpG`51{k$`eljFgPiTIqnq?@Ki*|I$`1tUiv9tMa7XP=r#&6Za0Va;k zvvDFDM?M@^bc?V2PC6XH-*FzL-RfM_&ZdA>Ej)P0*fx+4>BV`9`;-^6e|`h3Xkn>W7tusipJ5C(+1`s?p)-?5NzxgvaW)G6g!JB}iC6?z$Ub_K*XBsM6$T`ut>AZl90!uaElG zX8|IRqMF^P3C^%<^^erpL{!P1;Niovm>@qH5jaGmOKbU4u<_HJc=#jLuG30W>Y0&^WSM3uOtDU@k$l+jhP+2 zSampJIKYNRwm)V(vSN-7>a-5X7LbX9kyCo2YL!zRNs|?9`SV$RtbZNpA^+mxI7kE4 z6U4}w>zxxErB1L^fB?MQQ?ie0<{wA{_mRx^1Kd$C{?P@Qo_sMsifuc;gorsX81j32QcZ zV7)pCJYM1cBQ}t&LPstkq3nwfZap+hBF!C*rm`K_813RvVK_X#_tyf|PL^tDLvc81 ze4gY5$JTG`?C5Yb?T_*}@+1_j3o3Mkgw+5fhmYa~xSP71h zPrl+&oD4vER2^h$f;+-9Gaas6yEJ*{pNIwHu$vf@n&6muIHB7%3eC8-aNtdx_rq%^ zIXWEMy<@gN%4@7uzRLG`=PTmzO#(9XY>?sJ7U2dUht?bU@CP)hPwf1)r7<<@4KYx~ z4aaps%{bkt5*HldOqH{v!_n|t(e+2^x1v!5O3I^JLG}O{0=(Gisolr050I)f-M8u2 z7vk(tV{jRph3c{_t!8{WlZPX-qtr$@9377OX*vG*4(H~i!DHrv^{ox<(79H!i`->R z7MKInW7cj7U3?3B4qNEy0vVyQSdgeSXFu@E9y-V*^I9-?&!u z219ThxoxZ`?Yj=>6C8=JGyPC+P7!s$h3DGw^ zKe1_BMt1ufc8MI0pnNhY#5Oh?S|3FG$t%Yn&B)$q*^!sd;kx} zYH;+;hQske`y(5!XyZ{8<;;(4^3XA?ooHkk;IZ3)_2Zw|*QQ$esa8~6fnrokR!u-`4taEr>nK1L^<4bl@nST0{*N(ZzD>mw z)hmW?phy)oeYlFZ@S2#{C!*Mu%S2M>KJXVp;gg12x zRZeCH8SYV}R_t^nt?`FQF&h6uNZsge{6np~RoB?aa2BCa9Z@nqo;~*8;rN}WV>NiZ zvt;fBlDQR-RbAe(dC<-yTHACf3}}1F-{r+14~ZvK58avIC~mA^T%@6K1pme=l6$9< zac<#oI6nXM1db~>8L+mE@b~f*WRqnI|wjJO{#&&R-3y0fj|}a z&t+K@9EloN1=E=;)fJBZUOn{GzZ3WTR)@_E1d8$^nFGz-CYoCjdBGX0rDTm}U;vP0 zXj2pckU`-sT2PFj2oIuFY(#LK4}vkkq7j?ME8pD^@g=2jkPeO$+Nu1#>iZr28}s0x zb+j~dh{!E3fB@O*bZ*UAB{Y+ayb5hn#_hmx!fi-aLaP36z%4M!Iu%4X%OYer=PCcq zETS9v$hhzQ9gaV!C?^T)dzH);kq(JiXE9`LWje6;uqjfh1x$;iT-^uJ6askls5Z#! z;mInOZI!sS^?&ixM9V!KCQ-W|1nQjF}iCGvmV9RJCbjFtSM1v*H|%zb#>qg*!f7bBVB~SC%oQI67;};;$>L7$ z2ftC}aQxXd2mtAq(V=Jd5a5@kN27Z#Eo`zxxyj@+|QvusLNwMpLQN)6XS!M;Wsrk=U$m(99@KiUm`@ zMs1di0*g_UsrfUBz5fV$@pBGRC|JzJ>gey4!|@j+tXeZ?ssg4pyQu=wY9hnUHc~G^ zlsBufUg%$=MK-q(33JpCV}F>cz_`pH5ic^F33ND|SnKbV!||7%o{%5MQ2;W3NfPtz zofU3KZNIvY$d)Pf2}yfgqvo^W-h#2EM(7tK<=`L~*NY_-oVtETa0I|YvU^}W&!fww|8J&x=dKbrjq(qrlkX2NY8-o>I!Pu*^AAR5=s@r){* zD#JOmDh@^C{$4p8f2Vh>)56n61dPX$jZ6~rN+)a0TD4`Wg(Qxw-CKC%lMFzH&^`Kg zqe87?8>3}JW-JGAV5GW!Sf6@0hin zAZ>j)Qsn*0HH9DfC|0yPMwx=Ml*g(NY0O#G_Ty2O3^$Z+=^hXbS}a8>nl>(U8Lq&QzM5vl;$d^2jr6If`TWgs zIQ|8{)%L&2js<}fR-V6Rae01^8?BD6TZOFkAyB608pXh4q}Zua%VJ}h8H_pSe_^4j z0ORUDtK2x2v+n-pI2`}p)6-!jK&}+IMn9gIA?FzrlD8N8cF~H{R&wC)Aj;c7lu}d$ zM5<4L8&_hae7H@4Gt2D8vPrCY#+4fnd@0l4oZWEr@5J7xBMw?Y#CpbSkY8^rZavE0 zW4W$_)+ppUZze}Z1kppfx_hOm{3+gU7_Cw2BG>*0TD6iY?&N;|pLpuum}gW0e4F)z zssLC+;v$mPc7(`SuI)5ME7F(3V})h3;fE{;f6p8K28hUuw2--$fsNQ};AUgvK-Q<$ zMWYC(av6@p@ox`Wt3oFkarrW9@Ei4ZR-IEvC$`W#-g@0jv;>` zPXUa3hhsE06~O3KalAJO$DfOeN(b7IS=*56-{E-H=f~4P>s;1Z(lB&-^EniyHk@%< zys!J0wZ#ZnR4R3YMq|uIr)F$z#CS!CD(?-#@jIi&R>)1*sYR(*GqS8owC=|2So33m z<$0YbM*+Iekb{*5f^iMS8H@kjZivN3r6QM;eQQHq;#&2}{o;h-3UoORGIeS+#z}@lDu-~q zhp4t8RTm%zSN*$?bJ{XGSxi@D=Fsjlw7m0idf&?~nici1c($~-do;Ew|J}DX7L7*j z`UiT&5sr5gO}-5on>$4ZWN71nTLDD2FN;f(nj_yzlOKJ+`$3a`HN%K|Z=}(vU%ED9 z&yI@5;A>Uh8-(LeMcaL-aBLZ}B@s=Lu=%Rm&Z%3nkS4dAV&puNJePk$A^bGZr`p!I z`3XkZdZVs4ipEXg*j>Bo!*XM_65_o9&zM~zGCmW?0 z@%V07LMn9hDK`4MGvffqQotz{&Edp4H6%r2lEm1J_IPg)j`tHyS8-$QkA+7v*v@7A zx;R+elyMyub+0{_(8V4CuL3rZxNb)l3V2xTz`4$;QuE~H3`uZ&iGlF!4vNYr`Ruq2UQ}uhr{A$-;~{&v zN|{Pyal-K~qYjYHk~IYJ^pg>1* zn=rG%vGPEsJ6bLtM=HEYSvqs4*h>T`DjaoADj*nzoH7rb!0h<>QGOC%b(C~{kLY>U z;E0@q*|EflK0AmZtuc}Ic}D2&oA~>D4i%hxgN=RLx8Zc?m{j3z^u!2V|HyRsB~gAb zU!)2+j*<~tk#>q~+piFQTXB_ZoyO`YS`?V8gtseR_m|Tl$WR5^Ze}q$?#3;Jt7%a? z{;dSy)h8Sur|;2^R%73zBQiUt6_1jA{6pbYH%Gn&$G4)|+#f{Z*_{?+@#IZHF15l@ znN(&+!tv3f2uP%L`cV=f8QpYNwy7o?!?&L0$KY60a!}A<1I!uCR>KjgMy2YGMo5ml zzJ%jLMJpJi0CG*Vw&&qH zeZuh}`yN%i0;_hMlZRL)Lt&eZ$*?I0Ihj%raYUrE|9G0CqhT73c;)Yg^cDm zYJVeaD)jt$eF?{hj2iKga2;LtkD#xXGaMF{S&}GZI73{qyeYkl&4&1WCqLVOMstHx zbXENjo+PvQZRoZQ0Au9!B^)2GShf1D5j?PN$5{vHELM9lR+w#bBqr0jl+FEj$;;Cr z{ntAl4K}|Rk{J8z4_IQPS0my03!_N@Y5N4CkS0L}KLr))|>{=a5+= zb`!-~qy9R$8=KN#bxJrg+KAR5kf?}Ex)w`zWA(Ld*>^=OciM9*N3%6JTi$I*Y==cT zCW4ZW*NAYWz*Sm{b>BrY#kp@%=D0Zj0aO=Yji}49H#UOTAjxY)I5OIaR)u5`?amCx z1<`|ObkWt%UTr|5Sv3dbYj_n1M@B8$k8x(#maYp(ffW6EO%qsQCo@Lto9i}8mz8-H z2uDWU*%6snrFl}9@OZ#o;kg29vQaK|)QC2A$*Vv(GWwxt!ZrxDNMaujNrKlYJDM=I zlQj`Ko<`>Kb0!=a{WnFO=*NSUvRbY-`D=*!OH0+hbuxhYMtnUh^C}RIjE>Q`-2P$u zHKSv$vN9qL{JraC-^j00000NkvXXu0mjfb|xt5 literal 0 HcmV?d00001 diff --git a/res/emoji/heart_eyes.png b/res/emoji/heart_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..de0eed6171edabbf695c6af760f190fcdc958b3b GIT binary patch literal 100906 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 literal 0 HcmV?d00001 diff --git a/res/emoji/innocent.png b/res/emoji/innocent.png new file mode 100644 index 0000000000000000000000000000000000000000..c58bd37a3a9b5547b6cf1e31fd4e7ecc10349de7 GIT binary patch literal 13310 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 H7Qz1um}e@? literal 0 HcmV?d00001 diff --git a/res/emoji/joy.png b/res/emoji/joy.png new file mode 100644 index 0000000000000000000000000000000000000000..cb80d82ddb84a416d17ac009d085ea695dcb32ce GIT binary patch literal 13740 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 Y`>HFlsUs)zyW|C^DrzcJ%UOl}FV1MTDgXcg literal 0 HcmV?d00001 diff --git a/res/emoji/laughing.png b/res/emoji/laughing.png new file mode 100644 index 0000000000000000000000000000000000000000..701c1def4199df5f610e956a5b1990ba6b884253 GIT binary patch literal 15365 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 Tlp`lW00000NkvXXu0mjf;?6FR literal 0 HcmV?d00001 diff --git a/res/emoji/partying_face.png b/res/emoji/partying_face.png new file mode 100644 index 0000000000000000000000000000000000000000..625c1e85ab0bed6106de7b194464949a0197fde6 GIT binary patch literal 6908 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 literal 0 HcmV?d00001 diff --git a/res/emoji/sweet_smile.png b/res/emoji/sweet_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..53b9d41cabe7a30b129188ac41e33676f4056291 GIT binary patch literal 15115 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 literal 0 HcmV?d00001 diff --git a/silentdragon-lite.pro b/silentdragon-lite.pro index 60d9b13..094d7f4 100644 --- a/silentdragon-lite.pro +++ b/silentdragon-lite.pro @@ -14,6 +14,7 @@ QT += widgets QT += websockets + TARGET = SilentDragonLite TEMPLATE = app @@ -121,6 +122,7 @@ HEADERS += \ FORMS += \ src/contactrequest.ui \ src/deposithush.ui \ + src/emoji.ui \ src/encryption.ui \ src/hushrequest.ui \ src/mainwindow.ui \ diff --git a/src/Chat/Helper/ChatDelegator.h b/src/Chat/Helper/ChatDelegator.h index 12f94db..602d0ac 100644 --- a/src/Chat/Helper/ChatDelegator.h +++ b/src/Chat/Helper/ChatDelegator.h @@ -51,6 +51,16 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons bodydoc.setDefaultFont(QFont("Roboto", 12)); QString bodytext(index.data(Qt::DisplayRole).toString()); bodydoc.setHtml(bodytext.replace("\n", "
")); + bodydoc.setHtml(bodytext.replace(":smiley:", "")); + bodydoc.setHtml(bodytext.replace(":-)", "")); + bodydoc.setHtml(bodytext.replace(":money_mouth:", "")); + bodydoc.setHtml(bodytext.replace(":laughing:", "")); + bodydoc.setHtml(bodytext.replace(":sweet_smile:", "")); + bodydoc.setHtml(bodytext.replace(":joy:", "")); + bodydoc.setHtml(bodytext.replace(":innocent:", "")); + bodydoc.setHtml(bodytext.replace(":partying_face:", "")); + bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":fire:", "")); qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; bodydoc.setTextWidth(contentswidth); qreal bodyheight = bodydoc.size().height(); @@ -174,6 +184,16 @@ inline QSize ListViewDelegate::sizeHint(QStyleOptionViewItem const &option, QMod bodydoc.setDefaultFont(QFont("Roboto", 12)); QString bodytext(index.data(Qt::DisplayRole).toString()); bodydoc.setHtml(bodytext.replace("\n", "
")); + bodydoc.setHtml(bodytext.replace(":smiley:", "")); + bodydoc.setHtml(bodytext.replace(":-)", "")); + bodydoc.setHtml(bodytext.replace(":money_mouth:", "")); + bodydoc.setHtml(bodytext.replace(":laughing:", "")); + bodydoc.setHtml(bodytext.replace(":sweet_smile:", "")); + bodydoc.setHtml(bodytext.replace(":joy:", "")); + bodydoc.setHtml(bodytext.replace(":innocent:", "")); + bodydoc.setHtml(bodytext.replace(":partying_face:", "")); + bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":fire:", "")); // the width of the contents are the (a fraction of the window width) minus (margins + padding + width of the bubble's tail) diff --git a/src/connection.cpp b/src/connection.cpp index e584da0..ca8c62e 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -67,7 +67,6 @@ void ConnectionLoader::doAutoConnect() { qDebug() << "Doing autoconnect"; auto config = std::shared_ptr(new ConnectionConfig()); - config->dangerous = false; config->server = Settings::getInstance()->getSettings().server; // Initialize the library @@ -78,7 +77,6 @@ void ConnectionLoader::doAutoConnect() { main->logger->write(QObject::tr("Using existing wallet.")); char* resp = litelib_initialize_existing( - config->dangerous, config->server.toStdString().c_str() ); QString response = litelib_process_response(resp); @@ -93,7 +91,7 @@ void ConnectionLoader::doAutoConnect() else { main->logger->write(QObject::tr("Create/restore wallet.")); - createOrRestore(config->dangerous, config->server); + createOrRestore(config->server); d->show(); } @@ -154,12 +152,12 @@ void ConnectionLoader::doAutoConnect() }); } -void ConnectionLoader::createOrRestore(bool dangerous, QString server) +void ConnectionLoader::createOrRestore(QString server) { // Close the startup dialog, since we'll be showing the wizard d->hide(); // Create a wizard - FirstTimeWizard wizard(dangerous, server); + FirstTimeWizard wizard(server); main->logger->write("Start new Wallet with FirstimeWizard"); wizard.exec(); } diff --git a/src/connection.h b/src/connection.h index a253e2f..9076abd 100644 --- a/src/connection.h +++ b/src/connection.h @@ -10,7 +10,6 @@ class Controller; struct ConnectionConfig { QString server; - bool dangerous; QString proxy; }; @@ -32,7 +31,7 @@ private: void doAutoConnect(); - void createOrRestore(bool dangerous, QString server); + void createOrRestore(QString server); void showError(QString explanation); void showInformation(QString info, QString detail = ""); diff --git a/src/emoji.ui b/src/emoji.ui index fb923db..774681e 100644 --- a/src/emoji.ui +++ b/src/emoji.ui @@ -1,72 +1,142 @@ - - - - - Dialog - - + + + emojiDialog + + 0 0 - 400 - 300 + 261 + 46 - - Dialog + + Emoji - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + + + :/emoji/res/emoji/emoji1.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/laughing.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/sweet_smile.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/joy.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/innocent.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/partying_face.png + + + + true + + + + + + + + + + + :/icons/res/money-mouth.png + + + + true + + + + + + - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - Dialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - + - diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 397baf1..400ee9f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -20,6 +20,7 @@ #include "ui_sendHushTransactionChat.h" #include "ui_contactrequest.h" #include "ui_deposithush.h" +#include "ui_emoji.h" #include "ui_requestContactDialog.h" #include "chatmodel.h" #include "requestdialog.h" @@ -35,6 +36,9 @@ #include "DataStore/DataStore.h" #include "firsttimewizard.h" #include "../lib/silentdragonlitelib.h" +#include +#include +#include #ifdef Q_OS_WIN @@ -2612,3 +2616,67 @@ void MainWindow::on_givemeZaddr_clicked() }); } + +void MainWindow::on_pushButton_clicked() +{ + + QDialog emojiDialog(this); + Ui_emojiDialog emoji; + emoji.setupUi(&emojiDialog); + Settings::saveRestore(&emojiDialog); + +QObject::connect(emoji.smiley, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":smiley:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.money, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":money_mouth:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.laughing, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":laughing:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.sweet_smile, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":sweet_smile:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.joy, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":joy:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.innocent, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":innocent:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.partying_face, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":partying_face:"); + + emojiDialog.close(); +}); + + + emojiDialog.exec(); +} + +void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1) +{ + + Qt::Key key = Qt::Key_1; + QKeyEvent pressEvent = QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString()); + QKeyEvent releaseEvent = QKeyEvent(QEvent::KeyRelease, key, Qt::NoModifier); + QCoreApplication::sendEvent(ui->memoTxtChat, &pressEvent); + QCoreApplication::sendEvent(ui->memoTxtChat, &releaseEvent); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index ca4d8cc..abc44bc 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -111,6 +111,12 @@ private slots: void on_givemeZaddr_clicked(); + // void on_pushButton_clicked(); + + void on_pushButton_clicked(); + + void on_comboBox_currentIndexChanged(const QString &arg1); + private: bool fileExists(QString path); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index f771bc4..77687b1 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1341,8 +1341,8 @@ HushChat - - + + @@ -1546,7 +1546,7 @@ - + QLayout::SetDefaultConstraint @@ -1683,6 +1683,12 @@ 0 + + + 850 + 0 + + false @@ -1708,7 +1714,19 @@ - + + 6 + + + 6 + + + 6 + + + 6 + + @@ -1747,7 +1765,34 @@ - + + + + + 20 + 0 + + + + + + + + :/emoji/res/emoji/emoji1.png + + + + + 17 + 17 + + + + true + + + + From ff064b26243c2582113124f64f58ced80ee8df30 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 21 Jun 2020 22:25:40 +0200 Subject: [PATCH 21/37] rename button --- src/mainwindow.cpp | 11 +---------- src/mainwindow.h | 5 +---- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 400ee9f..e8fdf4f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2617,7 +2617,7 @@ void MainWindow::on_givemeZaddr_clicked() }); } -void MainWindow::on_pushButton_clicked() +void MainWindow::emojiButton_clicked() { QDialog emojiDialog(this); @@ -2671,12 +2671,3 @@ QObject::connect(emoji.partying_face, &QPushButton::clicked, [&] () { emojiDialog.exec(); } -void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1) -{ - - Qt::Key key = Qt::Key_1; - QKeyEvent pressEvent = QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString()); - QKeyEvent releaseEvent = QKeyEvent(QEvent::KeyRelease, key, Qt::NoModifier); - QCoreApplication::sendEvent(ui->memoTxtChat, &pressEvent); - QCoreApplication::sendEvent(ui->memoTxtChat, &releaseEvent); -} diff --git a/src/mainwindow.h b/src/mainwindow.h index abc44bc..4eccfa3 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -113,10 +113,7 @@ private slots: // void on_pushButton_clicked(); - void on_pushButton_clicked(); - - void on_comboBox_currentIndexChanged(const QString &arg1); - + void emojiButton_clicked(); private: bool fileExists(QString path); From ef2d9354fddf1dfed937514ce4b72446f69e988c Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 00:05:07 +0200 Subject: [PATCH 22/37] set icon for emoji button --- src/mainwindow.cpp | 2 +- src/mainwindow.h | 4 +--- src/mainwindow.ui | 60 +++++++++++++++++++++++++--------------------- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e8fdf4f..9ff349a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2617,7 +2617,7 @@ void MainWindow::on_givemeZaddr_clicked() }); } -void MainWindow::emojiButton_clicked() +void MainWindow::on_emojiButton_clicked() { QDialog emojiDialog(this); diff --git a/src/mainwindow.h b/src/mainwindow.h index 4eccfa3..ac77d8b 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -111,9 +111,7 @@ private slots: void on_givemeZaddr_clicked(); - // void on_pushButton_clicked(); - - void emojiButton_clicked(); + void on_emojiButton_clicked(); private: bool fileExists(QString path); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 77687b1..da36c3f 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 1274 + 1282 779 @@ -428,7 +428,7 @@ 0 0 - 1226 + 1234 509 @@ -1727,66 +1727,72 @@ 6 - - - - 0 - 0 - - - + + - 100 + 20 0 - - false - - :/icons/res/sendBlack.png + :/emoji/res/emoji/emoji1.png - 50 - 49 + 17 + 17 - - false - true - - + + + + 0 + 0 + + + - 20 + 16777215 + 50 + + + + + 100 0 + + false + - :/emoji/res/emoji/emoji1.png + :/icons/res/sendBlack.png - 17 - 17 + 50 + 49 + + false + true @@ -1828,7 +1834,7 @@ 0 0 - 1274 + 1282 22 From 5907b40f1cbb90b5611d535e48504e6119f1559f Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 10:28:34 +0200 Subject: [PATCH 23/37] add more emojis --- application.qrc | 13 +- res/emoji/face-with-rolling-eyes.png | Bin 0 -> 10169 bytes res/emoji/face-with-tongue.png | Bin 0 -> 9976 bytes res/emoji/face_with_3hearts.png | Bin 0 -> 11047 bytes res/emoji/fire.png | Bin 39293 -> 0 bytes res/emoji/heart_eyes.png | Bin 100906 -> 0 bytes res/emoji/heart_shaped_eyes.png | Bin 0 -> 11262 bytes res/emoji/nauseated-face.png | Bin 0 -> 9025 bytes res/emoji/pile-of-poo.png | Bin 0 -> 8550 bytes ...rious-face-with-symbols-covering-mouth.png | Bin 0 -> 10790 bytes res/emoji/smiling-face-with-sunglasses.png | Bin 0 -> 11853 bytes res/emoji/stuck-out.png | Bin 0 -> 11459 bytes src/Chat/Helper/ChatDelegator.h | 23 ++- src/emoji.ui | 169 +++++++++++++++++- src/mainwindow.cpp | 55 ++++++ src/mainwindow.ui | 54 +++--- 16 files changed, 283 insertions(+), 31 deletions(-) create mode 100644 res/emoji/face-with-rolling-eyes.png create mode 100644 res/emoji/face-with-tongue.png create mode 100644 res/emoji/face_with_3hearts.png delete mode 100644 res/emoji/fire.png delete mode 100644 res/emoji/heart_eyes.png create mode 100644 res/emoji/heart_shaped_eyes.png create mode 100644 res/emoji/nauseated-face.png create mode 100644 res/emoji/pile-of-poo.png create mode 100644 res/emoji/serious-face-with-symbols-covering-mouth.png create mode 100644 res/emoji/smiling-face-with-sunglasses.png create mode 100644 res/emoji/stuck-out.png diff --git a/application.qrc b/application.qrc index b7d5138..025a9a8 100644 --- a/application.qrc +++ b/application.qrc @@ -70,8 +70,17 @@ res/emoji/joy.png res/emoji/innocent.png res/emoji/partying_face.png - res/emoji/heart_eyes.png - res/emoji/fire.png + res/emoji/face_with_3hearts.png + res/emoji/face-with-rolling-eyes.png + res/emoji/face-with-tongue.png + res/emoji/heart_shaped_eyes.png + res/emoji/nauseated-face.png + res/emoji/pile-of-poo.png + res/emoji/serious-face-with-symbols-covering-mouth.png + res/emoji/smiling-face-with-sunglasses.png + res/emoji/stuck-out.png + res/emoji/sweet_smile.png +
diff --git a/res/emoji/face-with-rolling-eyes.png b/res/emoji/face-with-rolling-eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac0b715acc8a91293e629ad8ec294ead75a70d3 GIT binary patch literal 10169 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 literal 0 HcmV?d00001 diff --git a/res/emoji/face-with-tongue.png b/res/emoji/face-with-tongue.png new file mode 100644 index 0000000000000000000000000000000000000000..b83c92152ebbe7aef948a8c9b9f2e87ada01926b GIT binary patch literal 9976 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 diff --git a/res/emoji/heart_eyes.png b/res/emoji/heart_eyes.png deleted file mode 100644 index de0eed6171edabbf695c6af760f190fcdc958b3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100906 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 diff --git a/res/emoji/heart_shaped_eyes.png b/res/emoji/heart_shaped_eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..ddeefdc2cec4344cb690c8f0d183b6328e1866c7 GIT binary patch literal 11262 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 literal 0 HcmV?d00001 diff --git a/res/emoji/pile-of-poo.png b/res/emoji/pile-of-poo.png new file mode 100644 index 0000000000000000000000000000000000000000..f063a7787509ad1211d4f504f6dc07238816bb9d GIT binary patch literal 8550 zcmV-sA(`HZP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3;uawIpBh5zFea|GnUN6y-2E*M$n5|7-(&uV|BCh1#8hf-Ia~gVEjHizrP}vjyWgFS_xt{<*&MdiwQ&uV=XN$Jb5$yyNTVM!#-+{|kDueqTQa$?N{T?&9Z0 zZNFb~tL5iV$LB`#bKxDz=U@CD*88Eq%^zMUtkOz6D0shv3zqLbd`1x7zs|qRch5CU zAvAtZp_%)}*IZeUKTPlIr?o#9=nsqh^_%&9^}m1nZSj5oydHjA%lug*e)-ckT>9Ry}9G+4Y!N(frA%yV&mQHe5JZ@^C+v`6~QN{9f)? z|2-CWpWE*9rmH-8IWF~%n>mI2-+h_Cdho-i*u}FB|x2#`w;yg0xl)L7^IIOWN(VEUeD$;#ocRt^4aTUu!%q< zDytA1YKmaRn8=?JD>>9tNHL|9Q%TjNmU<33=9F_TSs>R-D6yoHODVOq(rc)(rkZQ1 zwYJ)uZvhNUEw|EYYpr*0IuGjHt8;zlmElJiaioz)8FjSLC+RceOf%0i>uj?xzrq40 zR$gV*)mGomY>;Bdop#=3*WGqM&kc3 zc-55hbqgmrNs1W}^U)FUq6m=CUNN)P#po3|#mqKOQ6$eGlVW3*Q^W{i+|H-tzGL?* za{nl9Ce?owH~)8$GYZ{*BXWk&{cGI*Bx*}=H*dsV6>3dwp!#@!*KU06BDMavKl_@Y zr`=r%&d*_4lNE;>MeCKCscx?oZI7#`QJ2pr`<`4X=M1VXAD-E5T3Z+!$cCC6h+Fz7 zXF*qt`P`yiB#Lh(L{{UpoL23QK=82{RvL`jl`?d3wYr&$2Y=7Wb)3Yz#sz( zVP&~7uvJ1De)qwPWyHjSmF3*2+~4U>`{zH6eknW(zB!xhA6~;9xt&8%r2^v+p;JR- zWbVFQf$&}PN|VU&SLtm9QxgN!XI4CJk>sSy$~{U6`7uvMaj_OXZ@UyQ)Xy1uNWbNr z`+;;%NrtJ<*a?=bQ3hZ z3|W0l&|qoIvq$P9PqJN?-%!9qgK+L%40u*{D2l=Yna-$TH*QVNw#A!~{O$*MV9{$y zITDGzU20>eAlQkO^=jF)^?9M5LLEf!dmc{X0i17*0V28G5k{(bgF$-`2Y#QsE$+Q5 z_-z`H8llV;fN3{Zu|&*PM#~(-+KbSg0SIiL2eCe(&J@N7m0MXb5*Q2so$({z0-eE? z(M#g3l0qDLFGrfr8Z(b-o^n;G)RCw$a5ne4LG3itY9LEA{G08+5IR#kbv2p0rUbr^ zxEpY_`74*zf~zA_C*vrqb_qZYc-=IZq@;6&%#6^{VCmew3q|3QS9Apux0vo4_q*h~ zhZ}ICpMa50pecU_@F;~o8KD7r`H1N#IlIYvi%qjt9yN>N`7NLdFNRq+A zmbRHW06d zD#jsNwyiLh=YB24I4OLW>m=^6odR4Tpy2!FvPR17$Z=8ks@_vtAsot^qUFV8H&r$u zVwD=HPlb`^w`@)MHrqyil%)@zD>77+vIrcFVCGF z3s8WLL8!CL$yWiR;Ov5EQUm}~Ya8XrRf^+S;yfhERz%l^;-N0`wDwYcY*PNkni}~i zi=9^v>xGbj_1($@7^NV+=Gb2@j~H70Q(b5NO7IQVyGncDKc6B1#|L7-wnP=7PqSyS zk$O>9bR+W^b*kG3J|~%@$tn?%t@a=WPGY6E7J>Oj)#;4AQx5#)6440DfEl?-W`Ye+ zc0T(py>E7{xh;8e^jE^)vMf9>q(w1&yMn-w~130qgLo-yBvP^D9=E_ZKL&uA@{&-;lNVHPz&kK95M zK|#RVAfGk$M#A`{!P)|TKA~atOFv@bg?<o3(L1g!AV6cq^ z`+-53Z+&7q@gh(Ilqrw?$RiD+=J3!I0)~mifE-xvxpNifkmMb7+i(`^M&*$!r}0;j z5ZkD(;^3u$5W{7Uj?YUTa4uf)M(n2iAQtof_ZWP09-)P@rrI5zf`^crtG)c3=;9o< zjpPBV*PgDR-t2OHNX;pdPEeJ^W>n-6jk3)8sHO4TMCp9ACODI z{gQ0vFErgAWjmRPIv=pDYd|4}mO`Lxaown49)Nx@5T!I+sa(6SSXU}N8G{gRA-OrI zCV++EWI-=tWU?U81pcT5kH?0xk&q0V*?Nm&WLb#`Y)ZC+-iTwYTLJ^?!k>V!c$qZ; zMcAaF>$=Mbf-q(@vRFGKi{-@nzIj`4hFz|4F7CYJd+h>PNB@MK)AYzMK8V!A?vd}t zQVd8FoJNV!<1BfdDn)()BD_4&MDX3L4vBZt7-B=zcb6(bZi&DX!qXIKtbnhh4v<{A zfUfbz3=a^IGGl2r0m&s_P1Q>Qat-E=)IOc1fEt!T^dMKM*ix@^Mhi@476v?vOdCMN z%mbl1N%2#kR0bHIMN$Kui&->-GrI8YFPO8?(BZBr4MImg`vf873h+b8ZL7-z!oung zdKojwy%dNgkY>mTV`L&?SU* zLl^1jR;+=*(xoy+uCMm}mg>^zc5_-Ic&caJdqR_lfbB>f5)zp(n(7<9gF@d>9aT!A zW)*M6&^QOI6zT`>I;pkx!tcNZ6$!XHVa`I;gu*M1R8@k7EWFcOFtVgeZ!kAP1Hnof z7-Hnoc@6_Rck0b~948jEbdB!j*Y+0?lG++xwip*MeRxCA9L*kY&dV~LfpEduAp}uv zK2-G2O}wn0-MO%?th}1rem7&3++HI>eU|~coQ{TtqkZ|4%>7PW{0-&T)KfsZvuqwd zh^X2_`r#{?*HX%CBm~)tSXReDd;wg}PKLz2$sUI!XycRg!F@N8Ov+GQu$5Jq!;{gZ zL1|Bqb>U4#A%v~GZVm?;J`D}4vWw~^NvUD{uIHiro7k!>5p5+yoHkN`g(QqfXd!YE zJ1fZ_xSWR*H0YK0(P)E-M^TZv4d9k6LDLf8TG z#?*#2WR#Ve?L!e@C6DNR;mc4aOvQq%Q8N|p>gESNK++7^36JX%gyUHa8l#nF)$n4N zi!~<6lANy(P_AGO)u>K6UMGzHL>58-RflWG$)HpjBT>su1s3dxwNib(h5?v2VTR2p zVM_E!^t;+PX7zz% zcIF@ej&prg^qXSc=hXJu+d4yX0^f+-yFNi{br)%zY6R?J z0l>(Lw$C4JU*}aTJZE(UIxN+cR2FCqO*N9Nb}cqSB_gCIBDAu?g18xndNKHsm93Qi zC5C)|f&j8Pgo;_CYJjN@j5IY*>+2A2xooYg@Q6Yq!5|G7TYc=`%M?1JN-4`+NU~$9 zV_+mQWW_>K`2MulW1E;x))%?4m|0QR6sn)%J0fK9UuCmGo?*1m4CqYeQkA$wb<*O; zn@v?zB%N6^(o>CfD4*h5_0}nN{8!gEPeyc;FXxvj51W8rY0X=#@fK_Tx5fHuHRFyv zadv7FZ!qR3Q_U%pg~elK^>;k7^i1U-W0)!>fND~d`%JhaHF%+PG#aY|>ySc-rxAjP zbNM&Yrk-2f?X~q63pUOQaAA)%>_VIjvESHoO5>=JRpkSwyM6@XWUGTqXIDq{Md^{{vNudj2F?l(J zvghDqC8!J;(aHPbi@McLLEugDsQAMoqSp|@d=4jfT?f(ap!R^r5goGO)V?F(5KO&K&qDRAPI-?FGkP4Ze2J=X8537k z@>2dBuV^jBK0z<>B%|hPEa`Scn)a$H>4odg+?7|=OGg_559p*MHFo^0ejlXt8xsK$V10FU!=Nw zu$t8L@2@jkgLiMFgb(6f@N8bakI8_WdsAd*cAAtved9*)=mZ$i{c~%dG+AsoEo}8+Z5I*1MzQ+cDb8x z)Sy%$Q@qL_D2gn{fIrb}xbRQQbxED8K?j_yli%b~b2Zn-x&!eMc1Ql>SJY&|C5N>@ z^9dLdc4X)wkJKJH0IAPiZHE<7MFSuVfEmfV-A9~dU^rsJ{2Fb$X!iwbAc?3hJUEK3 zQ>tf#+bV;k+6NnPIm2E@o8vBDW6w2dJA;o_Feg#xO&bW~!d6qi5e$xtYNI#^@LkHLwiYaC^wCg2yF=?H?_1qNO<8|dn8`mfeu`^!SEmt5tG#D0>!CW&z(cl zmab8ePTm^o(#+e^e(qJq%QY+%w@M-67cUaPkgu%(Vw30E81=5yZMY{=yD%D@&WvOQ zsR0~Gfc$QZ(fY{K+3F!b9P$+{zR|~EUSn!J8^8yk!fKIFZ@IOuCd^&3#!7byy5N7V zJOy@l_FIf@rRK=&h^%Q@?aIY^=6kvXqZhS#Q*DF^u)HHnpN{60hXlt55KE+ z-!dWgchA6u0&PmA#zjqQR}KLK><3>@4ErbrPc~{%F8M|({O+v2eRaqEL{IjbAM~9HA<{pPRB}%RE`o(aON60pkoYAU!DXp=@)apR2p6=>l1&?`2m9w^? zWdIWPw=&+97dm4sO<IDWWhcY7Dm?)SHou_b{GvwDqc5g)AXZI#Q z`|H$LY58@P(4T0X3aQ}jk*{0(Z2^L8&f~C9XOp3=q0XtSYEl0vw|3dBtNMVSVh2uZ zh_7r{Qvo}knJYRd@Ep_gXk$f2-3JywYaca}C|NejF7M!xJ}rwdF6IxE zKPiIk)@rNIf;&5a;9g*6jcQEZ$*rJXap|2BjMx^z+S>u(^F)=*PTIMKIKl6sgK;1= zYWC5Rd;R~RrfqlHgw$~pRwa-euZKJab%exsmmsTU7?P2S#7NgWgnN{r5A`e2=MhH3 zJeR1fneSN2L-G3BX=+48w-Fv;!n6n0&5w1}waTpf)?N)Jfh>PWGB&{zf!}ol)cMAZ!r(>1~xk)kLc8 zCuAP2!#|_8&xY{^*p6(EmwLz1pw>JvjXoL6p&bL>OX3kk5j!1aF0ecxk#ZqK+sc$z zGm`0xRDUga@8z)1d}kuKD;$Xq$S8Cbb4k!6NDrA)WXoqpd_?aP4T(_>q}1(`!=#u` z6i%Za@E`r|OKS5Hjnp8&j?|$3)CwYJhxV`TzBUQDcoa2PJR$`ULu$@k5MlnN=GzGm zFv5|)4Zc-z8H6y^z^Cru3T0L?svTb1gEGhxf5G`(CJUN})B)<7`U$WbdOyqJ&HSlr zfe{z7^hufhq?C$NhX~((YE@f@TgpWC`LPCXtuA7Q!!czC*L}3MxGX_g6&tHk*meL z4eu=eoiHRLshCPKhxPVVY$8RQ?(NWlSG34=-ylgbs8-YJrs{3?cJ0T0K%wnxfLDet z*SXW0Q#t2Hcki?ffRkBspeHZQ0bVeg#M@NX2CqQ=K34naI!vO6X6Z5~F^0j=9x7P6 zz-53E{(&;_`F`&9>3IaLZ-m5{8gb3RKDArfTs#oQw6M%b{yWpWA+D@e_u=^ez}JPdSo z&{fVrYR?{y- z_RMw2Jts5=m4r^vrcTnXj+!Ha+6`tl>Z(~lsA(HM15H3E`8c&H(}dTN+SR2Nd9}9( ztnX<&VV#cnG=rPD*pSoD4f?5%-3x^w6p+0P_Psd`{G)&(VnaCVkj6%-6M>2?k@}7W zU|^}ju1y<6b5+ox7WiNy5DBq|;CXf-$HzS=@FlpE?vW^%#R8D|FPi&|b~gtJ=ZB zT~R4ULZDLoAeR154A2)RrCs@V#D$_zXLPD3Dap(kzBhPOk@+C}{EF;#Rr^uPk%j3N<)1-~>h&#%K1_jrWUZi*CH22Pq9 zxdZ!&)sf5Q1Io8~6G!_aYV1f)dz}#T^4^8=g&d~N2H<-zJgHV2AbA`DL``^>`Jm&C z5cqS?@rKtMElNwB%h@0!HrMOiIfj!91hQcPsOhS+6XeV&v}O!vh4akh`eW=d{XndX=gIHty2~|#Ed+~9_c11`5bk2 zx@h~g4V{SUscWk-#;|7F}muez`7|Lok7nP>=|f!PdY&ZB)W zG%I|}KTHwHfXmhnh7Q+CkV?V-Kd+2N8ImHUD*yliglR)VP)S2WAaHVTW@&6?001bF zeUUv#!$2IxUsJUr6$gumIAo|!7D^Ry)G8FALZ}s5buhW~3z{?}DK3tJYr(;f#j1mg zv#t)Vf*|+-;^gS0=prTlFDbN$_29T4@9sVB-T^|r%rvVj3TV1*rV?>6lU)@9ujs)L z0*E0hGs~Ehq$E0yuY36TdKckYozML_`qiAp0G~)a%M8;d-XNadv<=St#35FcRpN8v z36m~J{K$31<2TL)mj#{~GSjJf;t;V|Xk(>~S<%#pr-;L^3A0^y{D4^000SaNLh0L01FcU01FcV0GgZ_ z00007bV*G`2jm782RjAwqyyyu00PQML_t(I%e7KlNEBfhJ#*W2-CeJ!tCpHtmMh(C zSCcR(>_S38f>D7%2tnHAMS>`Th@j9Os;44M=)uAsqD<%^FoP&4VI%26Nab~R9oL=t zXa1dkW_kz(4W)vlg|8g$^|{($eVkBm-C@0Dc*sVOc1wqH@yj>WLt!a>)Goub<q1FU7LqfUiPOweJsnfdFR7&K#EuN=@HMS( zY+2ze--wLtWl%?k;K;8;ps^Xb6#*nnF;-W|^*#&zP<~T#_hh|CQsedPJlG1S+E z^1@u~-Cm2&&mTfjC_Enb#Jm@G9;@AF!@eUqq;v=ZELT13DdM-+XUSgnvqvl316unGvmXMzrF^? zaZq)JnK*?)DB?4^;Wg8K*=gJ1Z_tQ#%P^SRwrp9F_=r>DNwP~y6?iV6G0RCQ69{Ft zN*D;CI@PUr2}5XmIuU(27yHAjOC*gXq=JeK+O^(CbJ0FkvsRMBVW%x7JE<+$950%N gAm}}z5S_*R1ayl=zllQ+SO5S307*qoM6N<$f+mn*od5s; literal 0 HcmV?d00001 diff --git a/res/emoji/serious-face-with-symbols-covering-mouth.png b/res/emoji/serious-face-with-symbols-covering-mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..917b8fc8780455ecc580647b3fc2e262a152b96c GIT binary patch literal 10790 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%0D2|}RJH7GJ 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 Hu0mjfQ|Yj& literal 0 HcmV?d00001 diff --git a/res/emoji/stuck-out.png b/res/emoji/stuck-out.png new file mode 100644 index 0000000000000000000000000000000000000000..fa98c80ee4f9a0c4afe5bcdeccf3c5deab8585e6 GIT binary patch literal 11459 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 literal 0 HcmV?d00001 diff --git a/src/Chat/Helper/ChatDelegator.h b/src/Chat/Helper/ChatDelegator.h index 602d0ac..42dac58 100644 --- a/src/Chat/Helper/ChatDelegator.h +++ b/src/Chat/Helper/ChatDelegator.h @@ -61,6 +61,17 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons bodydoc.setHtml(bodytext.replace(":partying_face:", "")); bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":fire:", "")); + bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "")); + bodydoc.setHtml(bodytext.replace(":p", "")); + bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "")); + bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":nauseated:", "")); + bodydoc.setHtml(bodytext.replace(":poop:", "")); + bodydoc.setHtml(bodytext.replace(":symbols_mouth:", "")); + bodydoc.setHtml(bodytext.replace(":sunglass:", "")); + bodydoc.setHtml(bodytext.replace(":stuck_out:", "")); + bodydoc.setHtml(bodytext.replace(";p", "")); qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; bodydoc.setTextWidth(contentswidth); qreal bodyheight = bodydoc.size().height(); @@ -194,7 +205,17 @@ inline QSize ListViewDelegate::sizeHint(QStyleOptionViewItem const &option, QMod bodydoc.setHtml(bodytext.replace(":partying_face:", "")); bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":fire:", "")); - + bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "")); + bodydoc.setHtml(bodytext.replace(":p", "")); + bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "")); + bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); + bodydoc.setHtml(bodytext.replace(":nauseated:", "")); + bodydoc.setHtml(bodytext.replace(":poop:", "")); + bodydoc.setHtml(bodytext.replace(":symbols_mouth:", "")); + bodydoc.setHtml(bodytext.replace(":sunglass:", "")); + bodydoc.setHtml(bodytext.replace(":stuck_out:", "")); + bodydoc.setHtml(bodytext.replace(";p", "")); // the width of the contents are the (a fraction of the window width) minus (margins + padding + width of the bubble's tail) qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; diff --git a/src/emoji.ui b/src/emoji.ui index 774681e..3717731 100644 --- a/src/emoji.ui +++ b/src/emoji.ui @@ -7,7 +7,7 @@ 0 0 261 - 46 + 152 @@ -135,6 +135,173 @@ + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + + + :/emoji/res/emoji/face-with-rolling-eyes.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/face-with-tongue.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/face_with_3hearts.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/heart_shaped_eyes.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/nauseated-face.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/pile-of-poo.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/serious-face-with-symbols-covering-mouth.png + + + + true + + + + + + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + + + :/emoji/res/emoji/smiling-face-with-sunglasses.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/stuck-out.png + + + + true + + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9ff349a..08923ef 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2667,6 +2667,61 @@ QObject::connect(emoji.partying_face, &QPushButton::clicked, [&] () { emojiDialog.close(); }); +QObject::connect(emoji.rolling_eyes, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":rolling_eyes:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.tongue, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":stuck_out_tongue:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.hearts3, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":face_with_3hearts:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.heart_eyes, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":heart_eyes:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.nauseated, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":nauseated:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.poop, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":poop:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.symbols_mouth, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":symbols_mouth:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.sunglass, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":sunglass:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.stuck_out, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":stuck_out:"); + + emojiDialog.close(); +}); + + emojiDialog.exec(); } diff --git a/src/mainwindow.ui b/src/mainwindow.ui index da36c3f..8f3e13a 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1712,6 +1712,33 @@ + + + + + 20 + 0 + + + + + + + + :/emoji/res/emoji/emoji1.png + + + + + 17 + 17 + + + + true + + + @@ -1726,33 +1753,6 @@ 6 - - - - - 20 - 0 - - - - - - - - :/emoji/res/emoji/emoji1.png - - - - - 17 - 17 - - - - true - - - From ab2140b72d5e4fa63c2c9b170aaae09e7870e8ae Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 11:13:10 +0200 Subject: [PATCH 24/37] add hush/sd emoji, scroll to the end of chat after clicking new contact --- application.qrc | 4 ++-- res/emoji/SD.png | Bin 0 -> 9759 bytes res/emoji/hush-money-white.png | Bin 0 -> 2131 bytes src/Chat/Helper/ChatDelegator.h | 4 ++++ src/addressbook.cpp | 3 +++ src/controller.cpp | 5 +++++ src/emoji.ui | 32 +++++++++++++++++++++++++++++++- src/mainwindow.cpp | 12 ++++++++++++ 8 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 res/emoji/SD.png create mode 100644 res/emoji/hush-money-white.png diff --git a/application.qrc b/application.qrc index 025a9a8..5fc7a70 100644 --- a/application.qrc +++ b/application.qrc @@ -80,8 +80,8 @@ res/emoji/smiling-face-with-sunglasses.png res/emoji/stuck-out.png res/emoji/sweet_smile.png - - + res/emoji/hush-money-white.png + res/emoji/SD.png res/silentdragonlite_de.qm diff --git a/res/emoji/SD.png b/res/emoji/SD.png new file mode 100644 index 0000000000000000000000000000000000000000..a68ab62fd56f99acd746322d50434b69a5729054 GIT binary patch literal 9759 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 literal 0 HcmV?d00001 diff --git a/res/emoji/hush-money-white.png b/res/emoji/hush-money-white.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e1ebd24ca68b4498054c8ed7a97b381323dd8a GIT binary patch literal 2131 zcmV-Z2(0&sP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U;0vcI74v{m&}81SBB@%i;5!?x4%>74}Q=GMP-K z?Z4)6Y%rE3ajz`o7uH{Y?(heG%o;;dE4k(z@k=#TZWxq!{pvYWOy_+4=H1ite4vK_ zV@lA=b!qLEZL(o`4{<|QN%XO`OoxsHY-z??{%%N zr3^ Z?5tdZ>Y52jp@d%V>r}F}BkxT8S+VP(I^`9c@r02I4zVqDhT5t> zL(e=|&Rh}W%0L!8C2zFZq{@^6{sylgf@yy7g^t~N>(5a?Qk&sbw=OR;?8& zsc6Z?N-4Fp%2kj9wdQKI)LL8P&|s)RSA%@ROy@2=b?v!ZFTM6Q5I!Rf9eLO&qmDLt z%0!x&dD<+q&bBBlWQvuRuDooORae`HwJkes-Fe$CyYBYF8r`q$`}P~G(ajnkrd-Zm zSi@{Ed#E5!C+eJmF-`==%^5&IvvU>;rNqvha~3P(rBH^G>fD4$&KM|6i&!_kaQDjG zmv{?WzQh~HmAFwukpBsm<>n(Ilqu}ks{Z(36MfL*Bn~Loj;m|T9 z!QS$Q(BfRYFNtJiyt|28?sf0NtM+rJ!U8-9eMVWa+8$Nc1l?;c!2@+ASLw<=Gt+z7 zu!4Y;O`L1plzPg294m3J)`58^xZPK-YqV4*8KMU{SW6jkRF1YJAxc#yrJ%m&;`C2? za^HJ0UrvxQ<+wSJ8@9s+Pgag?x3NAa%A8F)BB*J|u`f;7 zffK^d2o7hPLv1WTisWNufQ_PQ+A$b)3ZNrj)Yy}BMmWS?L|`w0KqExy@X;Vk(_b-U zt*@&J$ZDUdaxgQbe~H<@0{dIhx1w)F--`Z!itrt9GP>Ex!j0PY9E<{f%#(^$>16LZ z_m$9d4_8LdB4<}crRw<{y5_G`nW2CyGPEvEGljjl<}y*hU=*k3wPsEzB5a7vg$Jdua`nVKd<}SDq-!yx!VXxenqM5{-=7vg}N{rM&^hce)E2-{}rG4$Ubu)}(_K z1BA4F6nbm}IHPP+s7Hy1uV!c|Y3)-G`Nx+oFNshK33*XeTJxGp`d#cyL$L#}Ph`33bK*8n{{mT!rn+RCwTPJXWzv z|EFc=4|JEveE|p`JR1)mdvo=Oi9IWT{2MDp6s-~oMdAPe0fcEoLr_UWLm+T+Z)Rz1 zWdHyuk$sUpNW(xJ#a~mkMJf&!5pl>+oh*o7IBFG&P$AR`tvZ-o`UOoIk`xz5!L{Jv z$70pN#aUMeS3wZ`0C943Qgo3L|Cbh8#CUMrk9YSTckck9R$`jfF$QS5Z6@O}F`Zcz z1Fz^pKZ2M-L}r#TCrJr-j<0+8_<9%RS>EUV96f5*Vt`L1o@It<6K@btZ`uauec~`H z$SUzU@u*1`B!1+&(%?7Fd6xyA88%bNdEzj!m~UgHjak9eh$o37s-{!EkZ!Qbd5g1F zs<7rg`3pl?ePx;JG=~t!B9j(dX-`!fdiSb5KCRA0S2B7*_2($PgBU{fcG={rVP+`3v{nFdTZ|E^Z`gwSBV?o;1C$eQ}(*Y zyMyh${d=a_-w&c@a=MT1T{{2(00v@9M??Vs0RI60puMM)00009a7bBm000fw000fw z0YWI7cmMzZ2XskIMF->t76>)~JUq@C0003(NklBsfjjiutDS{d+dmlh0AlfJhDFjP3MA2j6T>0m^;DKeA z*>jeeGqVhkDywxGsNiH_7EXFDKbkX|^PHDn2b~F zF=7rogO?xTY-{aDPxQ44-^K=>;3pQbnxyqaugdOst+nrE^%q>j1MKaIMp!~iatUWz zYpHnaHWwH1yqr6UM@go=f`_8XU{9s`U(paRa39}#mt$<={akzt_d5I!*c@RQ&&po4 z-^5!Stfr>cM)Chn`MxB#YsS`U-VP@@n&if?PhBLrGW$=x``@eWtNkNv@HYSe002ov JPDHLkV1j{F^1lE8 literal 0 HcmV?d00001 diff --git a/src/Chat/Helper/ChatDelegator.h b/src/Chat/Helper/ChatDelegator.h index 42dac58..cccac36 100644 --- a/src/Chat/Helper/ChatDelegator.h +++ b/src/Chat/Helper/ChatDelegator.h @@ -72,6 +72,8 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons bodydoc.setHtml(bodytext.replace(":sunglass:", "")); bodydoc.setHtml(bodytext.replace(":stuck_out:", "")); bodydoc.setHtml(bodytext.replace(";p", "")); + bodydoc.setHtml(bodytext.replace(":hush_white:", "")); + bodydoc.setHtml(bodytext.replace(":sd:", "")); qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; bodydoc.setTextWidth(contentswidth); qreal bodyheight = bodydoc.size().height(); @@ -216,6 +218,8 @@ inline QSize ListViewDelegate::sizeHint(QStyleOptionViewItem const &option, QMod bodydoc.setHtml(bodytext.replace(":sunglass:", "")); bodydoc.setHtml(bodytext.replace(":stuck_out:", "")); bodydoc.setHtml(bodytext.replace(";p", "")); + bodydoc.setHtml(bodytext.replace(":hush_white:", "")); + bodydoc.setHtml(bodytext.replace(":sd:", "")); // the width of the contents are the (a fraction of the window width) minus (margins + padding + width of the bubble's tail) qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; diff --git a/src/addressbook.cpp b/src/addressbook.cpp index 1f19fff..4271324 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -250,6 +250,9 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target) ); + parent->ui->listChat->verticalScrollBar()->setValue( + parent->ui->listChat->verticalScrollBar()->maximum()); + }); // AddressBook::getInstance()->addAddressLabel(newLabel, ab.addr->text(), cid); diff --git a/src/controller.cpp b/src/controller.cpp index b777da2..cb3d9f3 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -101,6 +101,9 @@ void Controller::setConnection(Connection* c) ui->listContactWidget ); + + ui->listChat->verticalScrollBar()->setValue( + ui->listChat->verticalScrollBar()->maximum()); } std::string Controller::encryptDecrypt(std::string toEncrypt) @@ -1482,6 +1485,8 @@ void Controller::refreshChat(QListView *listWidget, QLabel *label) void Controller::refreshContacts(QListView *listWidget) { contactModel->renderContactList(listWidget); + ui->listChat->verticalScrollBar()->setValue( + ui->listChat->verticalScrollBar()->maximum()); } // If the wallet is encrpyted and locked, we need to unlock it diff --git a/src/emoji.ui b/src/emoji.ui index 3717731..8118466 100644 --- a/src/emoji.ui +++ b/src/emoji.ui @@ -7,7 +7,7 @@ 0 0 261 - 152 + 150 @@ -300,6 +300,36 @@ + + + + + + + + :/emoji/res/emoji/hush-money-white.png + + + + true + + + + + + + + + + + :/emoji/res/emoji/SD.png + + + + true + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 08923ef..4e94a2b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2721,6 +2721,18 @@ QObject::connect(emoji.stuck_out, &QPushButton::clicked, [&] () { emojiDialog.close(); }); +QObject::connect(emoji.hush_white, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":hush_white:"); + + emojiDialog.close(); +}); + +QObject::connect(emoji.sd, &QPushButton::clicked, [&] () { + ui->memoTxtChat->insertHtml(":sd:"); + + emojiDialog.close(); +}); + emojiDialog.exec(); From d7e97b32b6393f5b6e4cee547c17cfdebe9d08c6 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 11:31:31 +0200 Subject: [PATCH 25/37] disable chatinput while sending #139 --- src/chatmodel.cpp | 13 +++++++++++++ src/mainwindow.cpp | 21 +++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index 712828a..a3b9775 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -544,6 +544,7 @@ void MainWindow::sendChat() { QMessageBox msg(QMessageBox::Critical, tr("You have to select a contact and insert a Memo"), tr("You have selected no Contact from Contactlist,\n") + tr("\nor your Memo is empty"), QMessageBox::Ok, this); + ui->memoTxtChat->setEnabled(true); msg.exec(); return; @@ -573,6 +574,7 @@ void MainWindow::sendChat() { QMessageBox::Ok, this); msg.exec(); + ui->memoTxtChat->setEnabled(true); // abort the Tx return; @@ -592,6 +594,7 @@ void MainWindow::sendChat() { movie->start(); ui->sendChatButton->show(); ui->sendChatButton->setEnabled(false); + ui->memoTxtChat->setEnabled(true); } else { @@ -601,6 +604,8 @@ void MainWindow::sendChat() { movie1->start(); ui->sendChatButton->show(); ui->sendChatButton->setEnabled(false); + ui->memoTxtChat->setEnabled(true); + } ui->memoTxtChat->clear(); @@ -619,6 +624,8 @@ void MainWindow::sendChat() { ui->sendChatButton->setIcon(sendIcon); movie->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); + }else{ QPixmap send(":/icons/res/sendBlack.png"); @@ -626,6 +633,7 @@ void MainWindow::sendChat() { ui->sendChatButton->setIcon(sendIcon); movie1->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); } }); @@ -638,6 +646,7 @@ void MainWindow::sendChat() { // Errored out [=] (QString opid, QString errStr) { ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); + ui->memoTxtChat->setEnabled(true); if (!opid.isEmpty()) errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; @@ -652,6 +661,7 @@ void MainWindow::sendChat() { ui->sendChatButton->setIcon(sendIcon); movie->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); }else{ QPixmap send(":/icons/res/sendBlack.png"); @@ -659,6 +669,7 @@ void MainWindow::sendChat() { ui->sendChatButton->setIcon(sendIcon); movie1->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); } @@ -676,6 +687,7 @@ QString MainWindow::doSendChatTxValidations(Tx tx) { if (!Settings::isValidAddress(toAddr.addr)) { QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr); return QString(tr("Recipient Address ")) % addr % tr(" is Invalid"); + ui->memoTxtChat->setEnabled(true); } // This technically shouldn't be possible, but issue #62 seems to have discovered a bug @@ -693,6 +705,7 @@ QString MainWindow::doSendChatTxValidations(Tx tx) { if (available < total) { return tr("Not enough available funds to send this transaction\n\nHave: %1\nNeed: %2\n\nNote: Funds need 1 confirmations before they can be spent") .arg(available.toDecimalhushString(), total.toDecimalhushString()); + ui->memoTxtChat->setEnabled(true); } return ""; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4e94a2b..68157ec 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1367,6 +1367,11 @@ void MainWindow::setupchatTab() { } QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChat); + QObject::connect(ui->sendChatButton, &QPushButton::clicked, [&] () { + + ui->memoTxtChat->setEnabled(false); + + }); QObject::connect(ui->safeContactRequest, &QPushButton::clicked, this, &MainWindow::addContact); QObject::connect(ui->pushContact, &QPushButton::clicked, this , &MainWindow::renderContactRequest); @@ -1764,6 +1769,7 @@ void MainWindow::sendMoneyChat() { QMessageBox::Ok, this); msg.exec(); + ui->memoTxtChat->setEnabled(true); // abort the Tx return; @@ -1792,6 +1798,7 @@ void MainWindow::sendMoneyChat() { movie1->start(); ui->sendChatButton->show(); ui->sendChatButton->setEnabled(false); + ui->memoTxtChat->setEnabled(false); } ui->memoTxtChat->clear(); @@ -1810,6 +1817,7 @@ void MainWindow::sendMoneyChat() { ui->sendChatButton->setIcon(sendIcon); movie->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); }else{ QPixmap send(":/icons/res/sendBlack.png"); @@ -1817,6 +1825,7 @@ void MainWindow::sendMoneyChat() { ui->sendChatButton->setIcon(sendIcon); movie1->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); } }); @@ -1824,17 +1833,20 @@ void MainWindow::sendMoneyChat() { // Force a UI update so we get the unconfirmed Tx rpc->refresh(true); ui->memoTxtChat->clear(); + // ui->memoTxtChat->setEnabled(true); }, // Errored out [=] (QString opid, QString errStr) { ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); + ui->memoTxtChat->setEnabled(true); if (!opid.isEmpty()) errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; QMessageBox::critical(this, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); movie->stop(); + ui->memoTxtChat->setEnabled(true); if (theme == "Dark" || theme == "Midnight") { @@ -1843,6 +1855,7 @@ void MainWindow::sendMoneyChat() { ui->sendChatButton->setIcon(sendIcon); movie->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); }else{ QPixmap send(":/icons/res/sendBlack.png"); @@ -1850,9 +1863,9 @@ void MainWindow::sendMoneyChat() { ui->sendChatButton->setIcon(sendIcon); movie1->stop(); ui->sendChatButton->setEnabled(true); + ui->memoTxtChat->setEnabled(true); } - - + } ); @@ -1867,12 +1880,14 @@ QString MainWindow::doSendChatMoneyTxValidations(Tx tx) { if (!Settings::isValidAddress(toAddr.addr)) { QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr); return QString(tr("Recipient Address ")) % addr % tr(" is Invalid"); + ui->memoTxtChat->setEnabled(true); } // This technically shouldn't be possible, but issue #62 seems to have discovered a bug // somewhere, so just add a check to make sure. if (toAddr.amount.toqint64() < 0) { return QString(tr("Amount for address '%1' is invalid!").arg(toAddr.addr)); + ui->memoTxtChat->setEnabled(true); } total = total + toAddr.amount; @@ -1884,6 +1899,8 @@ QString MainWindow::doSendChatMoneyTxValidations(Tx tx) { if (available < total) { return tr("Not enough available funds to send this transaction\n\nHave: %1\nNeed: %2\n\nNote: Funds need 1 confirmations before they can be spent") .arg(available.toDecimalhushString(), total.toDecimalhushString()); + ui->memoTxtChat->setEnabled(true); + } return ""; From 30afb623d55c10be9976529f1c574023a1dc0eba Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 20:08:53 +0200 Subject: [PATCH 26/37] fix copy txid money transactions --- src/Model/ChatItem.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Model/ChatItem.cpp b/src/Model/ChatItem.cpp index 349be68..4e1984f 100644 --- a/src/Model/ChatItem.cpp +++ b/src/Model/ChatItem.cpp @@ -185,11 +185,11 @@ QString ChatItem::toChatLine() if (_outgoing == true) { - moneyText = QString("

Outgoing Money Transaction

") + QString(" "); + moneyText = QString("
") + QString("
") + QString(" Outgoing Money Transaction ") + QString(" "); }else{ - moneyText = QString("

Incoming Money Transaction

") + QString(" "); + moneyText = QString("
") + QString("
") + QString(" Incoming Money Transaction ") + QString(" "); } }else{money = ""; @@ -200,11 +200,11 @@ QString ChatItem::toChatLine() if (_outgoing == true) { - moneyTextRequest = QString("

Outgoing Hush Request

") + QString(" "); + moneyTextRequest = QString("
") + QString("
") + QString(" Outgoing Hush Request ") + QString(" "); }else{ - moneyTextRequest = QString("

Incoming Hush Request

") + QString(" "); + moneyTextRequest = QString("
") + QString("
") + QString(" Incoming Hush Request ") + QString(" "); } }else{moneyTextRequest = ""; From 3c9ca974f0f86b77681c9fb54d249dfc44e19a68 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 20:09:21 +0200 Subject: [PATCH 27/37] add AppImage to mkrelease.sh --- src/scripts/mkrelease.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/scripts/mkrelease.sh b/src/scripts/mkrelease.sh index 15e22ac..1a965df 100755 --- a/src/scripts/mkrelease.sh +++ b/src/scripts/mkrelease.sh @@ -35,6 +35,15 @@ rm -rf bin/SilentDragonLite* > /dev/null # Build the lib first cd lib && make release && cd .. make -j$(nproc) > /dev/null +make install INSTALL_ROOT=AppDir + +# now, build AppImage using linuxdeploy and linuxdeploy-plugin-qt +# download linuxdeploy and its Qt plugin +wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage + +# make them executable +chmod +x linuxdeploy*.AppImage echo "[OK]" From c26df43d8509096b9793c818bb6017ccc86edd9e Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Mon, 22 Jun 2020 22:42:12 +0200 Subject: [PATCH 28/37] fix position of cancel button --- src/sendHushTransactionChat.ui | 39 +++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/sendHushTransactionChat.ui b/src/sendHushTransactionChat.ui index 64b1e1d..94bc851 100644 --- a/src/sendHushTransactionChat.ui +++ b/src/sendHushTransactionChat.ui @@ -6,14 +6,14 @@ 0 0 - 216 - 384 + 212 + 405 Send or Request Hush - + @@ -223,15 +223,34 @@ - - - - Qt::Horizontal + + + + QLayout::SetFixedSize - - QDialogButtonBox::Cancel + + 6 - + + 6 + + + 6 + + + 6 + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel + + + + From b435f7b698b9206fef2da5498ead463991a72ce6 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 07:18:36 +0200 Subject: [PATCH 29/37] fix emoji --- src/Chat/Helper/ChatDelegator.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Chat/Helper/ChatDelegator.h b/src/Chat/Helper/ChatDelegator.h index cccac36..36a856c 100644 --- a/src/Chat/Helper/ChatDelegator.h +++ b/src/Chat/Helper/ChatDelegator.h @@ -59,11 +59,9 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons bodydoc.setHtml(bodytext.replace(":joy:", "")); bodydoc.setHtml(bodytext.replace(":innocent:", "")); bodydoc.setHtml(bodytext.replace(":partying_face:", "")); - bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":fire:", "")); bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "")); bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "")); - bodydoc.setHtml(bodytext.replace(":p", "")); bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "")); bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":nauseated:", "")); @@ -205,11 +203,9 @@ inline QSize ListViewDelegate::sizeHint(QStyleOptionViewItem const &option, QMod bodydoc.setHtml(bodytext.replace(":joy:", "")); bodydoc.setHtml(bodytext.replace(":innocent:", "")); bodydoc.setHtml(bodytext.replace(":partying_face:", "")); - bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":fire:", "")); bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "")); bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "")); - bodydoc.setHtml(bodytext.replace(":p", "")); bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "")); bodydoc.setHtml(bodytext.replace(":heart_eyes:", "")); bodydoc.setHtml(bodytext.replace(":nauseated:", "")); From d9e3889463670dd1198b45792829c3c526ae6a69 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 09:32:20 +0200 Subject: [PATCH 30/37] fix bad_alloc --- lib/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/lib.rs b/lib/src/lib.rs index f1be0d3..3314c90 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -102,7 +102,7 @@ pub extern fn litelib_initialize_new(server: *const c_char) -> *mut c_char { /// Restore a wallet from the seed phrase #[no_mangle] pub extern fn litelib_initialize_new_from_phrase(server: *const c_char, - seed: *const c_char, birthday: u64, number: u64) -> *mut c_char { + seed: *const c_char, birthday: u64, number: u64, overwrite: bool) -> *mut c_char { let server_str = unsafe { assert!(!server.is_null()); @@ -124,7 +124,7 @@ pub extern fn litelib_initialize_new_from_phrase(server: *const c_char, } }; - let lightclient = match LightClient::new_from_phrase(seed_str, &config, birthday, number, false) { + let lightclient = match LightClient::new_from_phrase(seed_str, &config, birthday, number, overwrite) { Ok(l) => l, Err(e) => { let e_str = CString::new(format!("Error: {}", e)).unwrap(); From 114a5e199e7df54e9daa98a3e0084ad88461514f Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 18:37:58 +0200 Subject: [PATCH 31/37] update travis.yml --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0651152..1cba99c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,10 +20,10 @@ before_install: - gem install bundler - curl -sSL https://sh.rustup.rs | sh -s -- -y --default-toolchain=nightly --profile=minimal - export PATH="$PATH:$HOME/.cargo/bin" - - sudo add-apt-repository ppa:beineri/opt-qt591-xenial -y + - sudo add-apt-repository ppa:beineri/opt-qt514-xenial -y - sudo apt-get update -qq - - sudo apt-get install qt59base qt59websockets libgl1-mesa-dev - - source /opt/qt59/bin/qt59-env.sh + - sudo apt-get install qt514base qt514websockets libgl1-mesa-dev + - source /opt/qt514/bin/qt514-env.sh - chmod +x res/libsodium/buildlibsodium.sh script: From d814fbd2070240ee78168bb33a4952dcd4ddfb12 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 18:41:44 +0200 Subject: [PATCH 32/37] update travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1cba99c..db3255e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ before_install: - gem install bundler - curl -sSL https://sh.rustup.rs | sh -s -- -y --default-toolchain=nightly --profile=minimal - export PATH="$PATH:$HOME/.cargo/bin" - - sudo add-apt-repository ppa:beineri/opt-qt514-xenial -y + - sudo add-apt-repository ppa:beineri/opt-qt-5.14.2-xenial -y - sudo apt-get update -qq - sudo apt-get install qt514base qt514websockets libgl1-mesa-dev - source /opt/qt514/bin/qt514-env.sh From 221f345f2c9f7cc735d3a50a3d7f17a04a3bd477 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 19:38:37 +0200 Subject: [PATCH 33/37] update travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index db3255e..dc3b2d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ matrix: include: # works on Precise and Trusty - os: linux - - dist: xenial + - dist: bionec compiler: clang addons: apt: @@ -20,7 +20,7 @@ before_install: - gem install bundler - curl -sSL https://sh.rustup.rs | sh -s -- -y --default-toolchain=nightly --profile=minimal - export PATH="$PATH:$HOME/.cargo/bin" - - sudo add-apt-repository ppa:beineri/opt-qt-5.14.2-xenial -y + - sudo add-apt-repository ppa:beineri/opt-qt-5.14.2-bionic -y - sudo apt-get update -qq - sudo apt-get install qt514base qt514websockets libgl1-mesa-dev - source /opt/qt514/bin/qt514-env.sh From 6d456e72d9a075499a8dee2c7959405986f1bb86 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Wed, 24 Jun 2020 19:47:06 +0200 Subject: [PATCH 34/37] update travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index dc3b2d0..7c6ee33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,8 +8,8 @@ matrix: compiler: clang addons: apt: - sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7'] - packages: ['clang-3.7', 'g++-5'] + sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-7'] + packages: ['clang-7', 'g++-5'] before_script: - export PATH="$PATH:$HOME/.cargo/bin" From 825e1926c30546e72cc46920ae6c73f70c3592c9 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Thu, 25 Jun 2020 09:39:11 +0200 Subject: [PATCH 35/37] fix Balance render problems --- src/restoreSeed.ui | 72 ++++++++++++++++++++++++++++++++++++++++++++++ src/seedrestore.ui | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 src/restoreSeed.ui create mode 100644 src/seedrestore.ui diff --git a/src/restoreSeed.ui b/src/restoreSeed.ui new file mode 100644 index 0000000..fb923db --- /dev/null +++ b/src/restoreSeed.ui @@ -0,0 +1,72 @@ + + + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + + diff --git a/src/seedrestore.ui b/src/seedrestore.ui new file mode 100644 index 0000000..fb923db --- /dev/null +++ b/src/seedrestore.ui @@ -0,0 +1,72 @@ + + + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + + From 3edf50f39f99f6df14e86ae23c791e5d2c2c38b7 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Thu, 25 Jun 2020 09:40:42 +0200 Subject: [PATCH 36/37] fix Balance render problems --- silentdragon-lite.pro | 1 + src/controller.cpp | 36 +++++---- src/mainwindow.cpp | 118 +++++++++++++++++++++++++++-- src/mainwindow.ui | 8 +- src/seedrestore.ui | 168 ++++++++++++++++++++++++++---------------- 5 files changed, 245 insertions(+), 86 deletions(-) diff --git a/silentdragon-lite.pro b/silentdragon-lite.pro index 094d7f4..77544e2 100644 --- a/silentdragon-lite.pro +++ b/silentdragon-lite.pro @@ -131,6 +131,7 @@ FORMS += \ src/newwallet.ui \ src/recurringpayments.ui \ src/restoreseed.ui \ + src/seedrestore.ui \ src/sendHushTransactionChat.ui \ src/settings.ui \ src/about.ui \ diff --git a/src/controller.cpp b/src/controller.cpp index cb3d9f3..a33a38f 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -638,7 +638,7 @@ void Controller::getInfoThenRefresh(bool force) refreshAddresses(); // This calls refreshZSentTransactions() and refreshReceivedZTrans() refreshTransactions(); } - + refreshBalances(); int lag = longestchain - notarized ; this->setLag(lag); }, [=](QString err) { @@ -730,7 +730,7 @@ void Controller::processUnspent(const QJsonValue& reply, QMap* QString qsAddr = it["address"].toString(); int block = it["created_in_block"].toInt(); QString txid = it["created_in_txid"].toString(); - CAmount amount = CAmount::fromqint64(it["value"].toInt()); + CAmount amount = CAmount::fromqint64(it["value"].toDouble()); bool spendable = it["unconfirmed_spent"].isNull() && it["spent"].isNull(); // TODO: Wait for 1 confirmations bool pending = !it["unconfirmed_spent"].isNull(); @@ -741,7 +741,7 @@ void Controller::processUnspent(const QJsonValue& reply, QMap* if (spendable) { (*balancesMap)[qsAddr] = (*balancesMap)[qsAddr] + - CAmount::fromqint64(it["value"].toInt()); + CAmount::fromqint64(it["value"].toDouble()); } } }; @@ -906,9 +906,9 @@ void Controller::refreshBalances() // 1. Get the Balances zrpc->fetchBalance([=] (QJsonValue reply) { - CAmount balT = CAmount::fromqint64(reply["tbalance"].toInt()); - CAmount balZ = CAmount::fromqint64(reply["zbalance"].toInt()); - CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].toInt()); + CAmount balT = CAmount::fromqint64(reply["tbalance"].toDouble()); + CAmount balZ = CAmount::fromqint64(reply["zbalance"].toDouble()); + CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].toDouble()); model->setBalT(balT); model->setBalZ(balZ); @@ -985,7 +985,7 @@ void Controller::refreshTransactions() { address = o.toObject()["address"].toString(); // Sent items are -ve - CAmount amount = CAmount::fromqint64(-1* o.toObject()["value"].toInt()); + CAmount amount = CAmount::fromqint64(-1* o.toObject()["value"].toDouble()); // Check for Memos @@ -1169,7 +1169,7 @@ void Controller::refreshTransactions() { ); DataStore::getChatDataStore()->setData(ChatIDGenerator::getInstance()->generateID(item), item); - updateUIBalances(); + // updateUIBalances(); } } @@ -1194,18 +1194,18 @@ void Controller::refreshTransactions() { } else { - // Incoming Transaction + + { // Incoming Transaction address = (it.toObject()["address"].isNull() ? "" : it.toObject()["address"].toString()); model->markAddressUsed(address); QString memo; - if (!it.toObject()["memo"].isNull()) { + if (!it.toObject()["memo"].isNull()) memo = it.toObject()["memo"].toString(); - } items.push_back(TransactionItemDetail{ address, - CAmount::fromqint64(it.toObject()["amount"].toInt()), + CAmount::fromqint64(it.toObject()["amount"].toDouble()), memo }); @@ -1214,7 +1214,14 @@ void Controller::refreshTransactions() { }; txdata.push_back(tx); - + } + + address = (it.toObject()["address"].isNull() ? "" : it.toObject()["address"].toString()); + model->markAddressUsed(address); + + QString memo; + if (!it.toObject()["memo"].isNull()) + memo = it.toObject()["memo"].toString(); QString type; QString publickey; QString headerbytes; @@ -1470,8 +1477,9 @@ void Controller::refreshTransactions() { chat->renderChatBox(ui, ui->listChat,ui->memoSizeChat); ui->listChat->verticalScrollBar()->setValue( ui->listChat->verticalScrollBar()->maximum()); - + }); + } void Controller::refreshChat(QListView *listWidget, QLabel *label) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 68157ec..84aa862 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -26,6 +26,7 @@ #include "requestdialog.h" #include "ui_startupencryption.h" #include "ui_removeencryption.h" +#include "ui_seedrestore.h" #include "websockets.h" #include "sodium.h" #include "sodium/crypto_generichash_blake2b.h" @@ -162,17 +163,124 @@ MainWindow::MainWindow(QWidget *parent) : // Rescan QObject::connect(ui->actionRescan, &QAction::triggered, [=]() { - // To rescan, we clear the wallet state, and then reload the connection + + QFile file(dirwalletenc); + QFile file1(dirwallet); + + if(fileExists(dirwalletenc)) + + { + file.remove(); + file1.remove(); + } + + + Ui_Restore restoreSeed; + QDialog dialog(this); + restoreSeed.setupUi(&dialog); + Settings::saveRestore(&dialog); + + + rpc->fetchSeed([&](QJsonValue reply) { + if (isJsonError(reply)) { + return; + } + + restoreSeed.seed->setReadOnly(true); + restoreSeed.seed->setLineWrapMode(QPlainTextEdit::LineWrapMode::NoWrap); + QString seedJson = QLatin1String(QJsonDocument(reply.toObject()).toJson(QJsonDocument::Compact)); + int startPos = seedJson.indexOf("seed") +7; + int endPos = seedJson.indexOf("}") -1; + int length = endPos - startPos; + QString seed = seedJson.mid(startPos, length); + restoreSeed.seed->setPlainText(seed); + + int startPosB = seedJson.indexOf("birthday") +10; + int endPosB = seedJson.indexOf("seed") -2; + int lengthB = endPosB - startPosB; + QString birthday = seedJson.mid(startPosB, lengthB); + restoreSeed.birthday->setPlainText(birthday); + }); + + QObject::connect(restoreSeed.restore, &QPushButton::clicked, [&](){ + + QString seed = restoreSeed.seed->toPlainText(); + if (seed.trimmed().split(" ").length() != 24) { + QMessageBox::warning(this, tr("Failed to restore wallet"), + tr("SilentDragonLite needs 24 words to restore wallet"), + QMessageBox::Ok); + return false; + } + + + // 2. Validate birthday + QString birthday_str = restoreSeed.birthday->toPlainText(); + bool ok; + qint64 birthday = birthday_str.toUInt(&ok); + if (!ok) { + QMessageBox::warning(this, tr("Failed to parse wallet birthday"), + tr("Couldn't understand wallet birthday. This should be a block height from where to rescan the wallet. You can leave it as '0' if you don't know what it should be."), + QMessageBox::Ok); + return false; + } + + + QString number_str = restoreSeed.quantity->text(); + qint64 number = number_str.toUInt(); + + auto config = std::shared_ptr(new ConnectionConfig()); + config->server = Settings::getInstance()->getSettings().server; + // 3. Attempt to restore wallet with the seed phrase + { + char* resp = litelib_initialize_new_from_phrase(config->server.toStdString().c_str(), + seed.toStdString().c_str(), birthday, number); + QString reply = litelib_process_response(resp); + + if (reply.toUpper().trimmed() != "OK") { + QMessageBox::warning(this, tr("Failed to restore wallet"), + tr("Couldn't restore the wallet") + "\n" + reply, + QMessageBox::Ok); + + } + } + + // 4. Finally attempt to save the wallet + { + char* resp = litelib_execute("save", ""); + QString reply = litelib_process_response(resp); + + QByteArray ba_reply = reply.toUtf8(); + QJsonDocument jd_reply = QJsonDocument::fromJson(ba_reply); + QJsonObject parsed = jd_reply.object(); + + if (parsed.isEmpty() || parsed["result"].isNull()) { + QMessageBox::warning(this, tr("Failed to save wallet"), + tr("Couldn't save the wallet") + "\n" + reply, + QMessageBox::Ok); + + } else {} + + dialog.close(); + // To rescan, we clear the wallet state, and then reload the connection // This will start a sync, and show the scanning status. this->getRPC()->clearWallet([=] (auto) { // Save the wallet this->getRPC()->saveWallet([=] (auto) { // Then reload the connection. The ConnectionLoader deletes itself. - auto cl = new ConnectionLoader(this, rpc); + auto cl = new ConnectionLoader(this, rpc); cl->loadConnection(); - }); - }); - }); + }); + }); + + + } + + }); + + // }); + + dialog.exec(); +}); // Address Book QObject::connect(ui->action_Address_Book, &QAction::triggered, this, &MainWindow::addressBook); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 8f3e13a..4e62995 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 1282 + 1308 779 @@ -59,7 +59,7 @@ - 5 + 0 @@ -428,7 +428,7 @@ 0 0 - 1234 + 1260 509 @@ -1834,7 +1834,7 @@ 0 0 - 1282 + 1308 22 diff --git a/src/seedrestore.ui b/src/seedrestore.ui index fb923db..697c2c2 100644 --- a/src/seedrestore.ui +++ b/src/seedrestore.ui @@ -1,72 +1,114 @@ - - - - - Dialog - - + + + Restore + + 0 0 - 400 - 300 + 637 + 429 - - Dialog + + Restore your Wallet - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + + 0 + 284 + + + + + + + + + + Birthday : + + + + + + + Quantity : + + + + + + + + + + + + 529 + 0 + + + + + 16777215 + 25 + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + + + + + + 529 + 0 + + + + + + + + + + + + + Qt::Horizontal + + + + 521 + 20 + + + + + + + + + 89 + 16777215 + + + + Restore + + + + - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - Dialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - + - From af8dab4fd172df22c719eadc73faab47e757258a Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Thu, 25 Jun 2020 09:55:26 +0200 Subject: [PATCH 37/37] push version --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index cabdbc4..06e80b4 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "1.3.7" +#define APP_VERSION "1.3.8"