Browse Source

add contact request flag to headermemo - work in progress

pull/130/head
DenioD 4 years ago
parent
commit
45f3a80885
  1. 180
      src/chatmodel.cpp
  2. 2
      src/mainwindow.cpp
  3. 5
      src/mainwindow.h
  4. 2
      src/mainwindow.ui

180
src/chatmodel.cpp

@ -83,11 +83,7 @@ void ChatModel::renderChatBox(QListWidget *view)
{ {
view->takeItem(0); view->takeItem(0);
} }
//QModelIndex index = parent->listContactWidget->currentIndex();
// QString itemText = index.data(Qt::DisplayRole).toString();
for(auto &c : this->chatItems) for(auto &c : this->chatItems)
{ {
@ -109,7 +105,7 @@ void ChatModel::renderChatBox(QListWidget *view)
} }
} }
QString MainWindow::createHeaderMemo(QString cid, QString zaddr, int version=0, int headerNumber=1) QString MainWindow::createHeaderMemo(QString safeContact, QString cid, QString zaddr, int version=0, int headerNumber=1)
{ {
QString header=""; QString header="";
@ -121,6 +117,7 @@ QString MainWindow::createHeaderMemo(QString cid, QString zaddr, int version=0,
h["v"] = version; // HushChat version h["v"] = version; // HushChat version
h["z"] = zaddr; // zaddr to respond to h["z"] = zaddr; // zaddr to respond to
h["cid"] = cid; // conversation id h["cid"] = cid; // conversation id
h["c"] = safeContact; // Is this a safe Contact request?
j.setObject(h); j.setObject(h);
header = j.toJson(); header = j.toJson();
@ -135,13 +132,7 @@ Tx MainWindow::createTxFromChatPage() {
CAmount totalAmt; CAmount totalAmt;
// For each addr/amt in the Chat tab // For each addr/amt in the Chat tab
{ {
QString addr = ui->ContactZaddr->text().trimmed(); // We need to set the reply Address for our Contact here QString addr = ui->ContactZaddr->text().trimmed(); // We need to set the reply Address for our Contact here
// Remove label if it exists // Remove label if it exists
addr = AddressBook::addressFromAddressLabel(addr); addr = AddressBook::addressFromAddressLabel(addr);
@ -162,9 +153,11 @@ Tx MainWindow::createTxFromChatPage() {
QString cid = c.getCid(); QString cid = c.getCid();
QString myAddr = c.getMyAddress(); QString myAddr = c.getMyAddress();
QString safeContact = "false";
QString addr = c.getPartnerAddress(); QString addr = c.getPartnerAddress();
QString hmemo= createHeaderMemo(cid,myAddr); QString hmemo= createHeaderMemo(safeContact,cid,myAddr);
QString memo = ui->memoTxtChat->toPlainText().trimmed(); QString memo = ui->memoTxtChat->toPlainText().trimmed();
// ui->memoSizeChat->setLenDisplayLabel(); // ui->memoSizeChat->setLenDisplayLabel();
@ -291,5 +284,166 @@ QString MainWindow::doSendChatTxValidations(Tx tx) {
.arg(available.toDecimalhushString(), total.toDecimalhushString()); .arg(available.toDecimalhushString(), total.toDecimalhushString());
} }
return "";
}
// Create a Safe Contact Request.
Tx MainWindow::createTxForSafeContactRequest() {
Tx tx;
CAmount totalAmt;
// For each addr/amt in the Chat tab
{
QString addr = ui->ContactZaddr->text().trimmed(); // We need to set the reply Address for our Contact here
// Remove label if it exists
addr = AddressBook::addressFromAddressLabel(addr);
QString amtStr = "0";
// bool ok;
CAmount amt;
amt = CAmount::fromDecimalString("0");
totalAmt = totalAmt + amt;
for(auto &c : AddressBook::getInstance()->getAllAddressLabels())
if (ui->ContactZaddr->text().trimmed() == c.getName()) {
// QString cid = c.getCid(); // This has to be a new cid for the contact
// QString myAddr = c.getMyAddress(); // this should be a new HushChat zaddr
// QString addr = c.getPartnerAddress(); // this address will be insert by the user
QString safeContact = "true";
QString hmemo= createHeaderMemo(safeContact,cid,myAddr);
QString memo = ui->memoTxtChat->toPlainText().trimmed();
// ui->memoSizeChat->setLenDisplayLabel();
tx.toAddrs.push_back(ToFields{addr, amt, hmemo}) ;
qDebug()<<hmemo;
// tx.toAddrs.push_back( ToFields{addr, amt, memo});
qDebug() << "pushback chattx";
} }
tx.fee = Settings::getMinerFee();
return tx;
qDebug() << "ChatTx created";
}
void MainWindow::safeContactRequest() {
// Create a Tx from the values on the send tab. Note that this Tx object
// might not be valid yet.
// Memos can only be used with zAddrs. So check that first
//auto addr = "zs1fllv4hgrjddnz2yz5dng9kchcg3wkhs0j2v5v3nc89w3r3kntkgq2sefcz2a9k2ycc8f6t0gm2q";
// if (! Settings::isZAddress(AddressBook::addressFromAddressLabel(addr->text()))) {
// QMessageBox msg(QMessageBox::Critical, tr("Memos can only be used with z-addresses"),
// tr("The memo field can only be used with a z-address.\n") + addr->text() + tr("\ndoesn't look like a z-address"),
// QMessageBox::Ok, this);
// msg.exec();
//return;
//}
Tx tx = createTxForSafeContactRequest();
QString error = doSendChatTxValidations(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;
qDebug() << "Tx aborted";
}
// Create a new Dialog to show that we are computing/sending the Tx
auto d = new QDialog(this);
auto connD = new Ui_ConnectionDialog();
connD->setupUi(d);
QPixmap logo(":/img/res/logobig.gif");
connD->topIcon->setBasePixmap(logo.scaled(256, 256, Qt::KeepAspectRatio, Qt::SmoothTransformation));
connD->status->setText(tr("Please wait..."));
connD->statusDetail->setText(tr("Your Safe Contact Request will be send"));
d->show();
// And send the Tx
rpc->executeTransaction(tx,
[=] (QString txid) {
ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid);
connD->status->setText(tr("Done!"));
connD->statusDetail->setText(txid);
QTimer::singleShot(1000, [=]() {
d->accept();
d->close();
delete connD;
delete d;
});
// Force a UI update so we get the unconfirmed Tx
rpc->refresh(true);
},
// Errored out
[=] (QString opid, QString errStr) {
ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000);
d->accept();
d->close();
delete connD;
delete d;
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);
}
);
}
QString MainWindow::doSendRequestTxValidations(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 5 confirmations before they can be spent")
.arg(available.toDecimalhushString(), total.toDecimalhushString());
}
return ""; return "";
} }

2
src/mainwindow.cpp

@ -987,7 +987,7 @@ void MainWindow::setupchatTab() {
// Send button // Send button
QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChatButton); QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChatButton);
QObject::connect(ui->safeContactRequest, &QPushButton::clicked, this, &MainWindow::safeContactRequest);
///////// Set selected Zaddr for Chat with Doubleklick ///////// Set selected Zaddr for Chat with Doubleklick

5
src/mainwindow.h

@ -48,6 +48,7 @@ public:
QString doSendTxValidations(Tx tx); QString doSendTxValidations(Tx tx);
QString doSendChatTxValidations(Tx tx); QString doSendChatTxValidations(Tx tx);
QString doSendRequestTxValidations(Tx tx);
void replaceWormholeClient(WormholeClient* newClient); void replaceWormholeClient(WormholeClient* newClient);
bool isWebsocketListening(); bool isWebsocketListening();
@ -76,7 +77,7 @@ public:
Logger* logger; Logger* logger;
void doClose(); void doClose();
QString createHeaderMemo(QString cid, QString zaddr, int version, int headerNumnber); QString createHeaderMemo(QString safeContact, QString cid, QString zaddr, int version, int headerNumber);
public slots: public slots:
void slot_change_theme(const QString& themeName); void slot_change_theme(const QString& themeName);
@ -103,6 +104,7 @@ private:
bool confirmTx(Tx tx, RecurringPaymentInfo* rpi); bool confirmTx(Tx tx, RecurringPaymentInfo* rpi);
Tx createTxFromChatPage(); Tx createTxFromChatPage();
Tx createTxForSafeContactRequest();
void encryptWallet(); void encryptWallet();
void removeWalletEncryption(); void removeWalletEncryption();
@ -110,6 +112,7 @@ private:
void cancelButton(); void cancelButton();
void sendButton(); void sendButton();
void sendChatButton(); void sendChatButton();
void safeContactRequest();
void addAddressSection(); void addAddressSection();
void maxAmountChecked(int checked); void maxAmountChecked(int checked);

2
src/mainwindow.ui

@ -1502,7 +1502,7 @@
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="sendChatButton_2"> <widget class="QPushButton" name="safeContactRequest">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>943</x> <x>943</x>

Loading…
Cancel
Save