diff --git a/res/css/dark.css b/res/css/dark.css index 7846b25..6dc6cfe 100644 --- a/res/css/dark.css +++ b/res/css/dark.css @@ -1,5 +1,5 @@ -QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow +QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow, ChatModel, requestDialog { background-color: #303335; color: #ffffff; diff --git a/reuqestDialog.ui b/reuqestDialog.ui deleted file mode 100644 index fb923db..0000000 --- a/reuqestDialog.ui +++ /dev/null @@ -1,72 +0,0 @@ - - - - - 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/silentdragon-lite.pro b/silentdragon-lite.pro index 5e745f4..a3364d2 100644 --- a/silentdragon-lite.pro +++ b/silentdragon-lite.pro @@ -126,6 +126,7 @@ FORMS += \ src/mobileappconnector.ui \ src/createhushconfdialog.ui \ src/recurringdialog.ui \ + src/requestContactDialog.ui \ src/newrecurring.ui \ src/requestdialog.ui \ src/recurringmultiple.ui \ diff --git a/src/addressbook.cpp b/src/addressbook.cpp index 1dd1a8f..a16d7c8 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -1,3 +1,5 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 #include "addressbook.h" #include "ui_addressbook.h" #include "ui_mainwindow.h" diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index b55dd5c..b9133b8 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -6,6 +6,7 @@ #include "controller.h" #include "mainwindow.h" #include "ui_mainwindow.h" +#include "ui_requestContactDialog.h" #include "addressbook.h" #include "ui_memodialog.h" #include "ui_contactrequest.h" @@ -83,6 +84,7 @@ void ChatModel::showMessages() { qDebug() << c.second.toChatLine(); } + } void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView &view) @@ -97,7 +99,10 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView &view) void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view) { - + QObject::connect(ui->pushContact, &QPushButton::clicked,[&] () + { + renderContactRequest(); + }); QStandardItemModel* chat = new QStandardItemModel(); @@ -136,15 +141,98 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view) ui->listChat->setModel(chat); } - + + } + } + +void ChatModel::renderContactRequest(){ + + Ui_requestDialog requestContact; + QDialog dialog(main); + requestContact.setupUi(&dialog); + Settings::saveRestore(&dialog); + + { + QStandardItemModel* contactRequest = new QStandardItemModel(); + + + for (auto &c : this->chatItems) { + if ((c.second.getType() == "cont") && (c.second.isOutgoing() == false) && (c.second.getMemo().startsWith("{"))) { + + + + QStandardItem* Items = new QStandardItem(c.second.getAddress()); + contactRequest->appendRow(Items); + requestContact.requestContact->setModel(contactRequest); + // requestContact.requestContact->show(); + + + + } + } + } + // } + + + QObject::connect(requestContact.requestContact, &QTableView::clicked, [&] () { + + for (auto &c : this->chatItems){ + QModelIndex index = requestContact.requestContact->currentIndex(); + QString label_contact = index.data(Qt::DisplayRole).toString(); + QStandardItemModel* contactMemo = new QStandardItemModel(); + + if (c.second.isOutgoing() == false) { + if (label_contact == c.second.getAddress()) { + if(c.second.getMemo().startsWith("{")){ + + }else{ + QStandardItem* Items = new QStandardItem(c.second.getMemo()); + contactMemo->appendRow(Items); + requestContact.requestMemo->setModel(contactMemo); + requestContact.requestMemo->show(); + + requestContact.requestZaddr->setText(c.second.getRequestZaddr()); + requestContact.requestCID->setText(c.second.getCid()); + requestContact.requestMyAddr->setText(c.second.getAddress()); + } + } + } + + } + }); + + + + QObject::connect(requestContact.pushButton, &QPushButton::clicked, [&] () { + + QString cid = requestContact.requestCID->text(); + auto addr = requestContact.requestZaddr->text().trimmed(); + QString newLabel = requestContact.requestLabel->text().trimmed(); + auto myAddr = requestContact.requestMyAddr->text().trimmed(); + + QString avatar = QString("res/") + requestContact.comboBoxAvatar->currentText() + QString(".png"); + + qDebug()<<"Beginn kopiert" <addAddressLabel(newLabel, addr, myAddr, cid, avatar); + }); + + + dialog.exec(); } + + void ChatModel::addCid(QString tx, QString cid) { this->cidMap[tx] = cid; } +void ChatModel::addrequestZaddr(QString tx, QString requestZaddr) +{ + this->requestZaddrMap[tx] = requestZaddr; +} + QString ChatModel::getCidByTx(QString tx) { for(auto& pair : this->cidMap) @@ -160,11 +248,31 @@ QString ChatModel::getCidByTx(QString tx) return QString("0xdeadbeef"); } +QString ChatModel::getrequestZaddrByTx(QString tx) +{ + for(auto& pair : this->requestZaddrMap) + { + + } + + if(this->requestZaddrMap.count(tx) > 0) + { + return this->requestZaddrMap[tx]; + } + + return QString("0xdeadbeef"); +} + void ChatModel::killCidCache() { this->cidMap.clear(); } +void ChatModel::killrequestZaddrCache() +{ + this->requestZaddrMap.clear(); +} + QString MainWindow::createHeaderMemo(QString type, QString cid, QString zaddr, int version=0, int headerNumber=1) { @@ -183,6 +291,7 @@ QString MainWindow::createHeaderMemo(QString type, QString cid, QString zaddr, header = j.toJson(); qDebug() << "made header=" << header; return header; + } diff --git a/src/chatmodel.h b/src/chatmodel.h index cde16cb..945c27c 100644 --- a/src/chatmodel.h +++ b/src/chatmodel.h @@ -14,6 +14,7 @@ #include "camount.h" + class ListViewDelegate : public QAbstractItemDelegate { int d_radius; @@ -163,7 +164,9 @@ class ChatItem long _timestamp; QString _address; QString _contact; - QString _memo; + QString _memo; + QString _requestZaddr; + QString _type; QString _cid; QString _txid; bool _outgoing = false; @@ -171,24 +174,28 @@ class ChatItem public: ChatItem() {} - ChatItem(long timestamp, QString address, QString contact, QString memo, QString cid, QString txid) + ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid) { _timestamp = timestamp; _address = address; _contact = contact; _memo = memo; + _requestZaddr = requestZaddr; + _type = type; _cid = cid; _txid = txid; _outgoing = false; } - ChatItem(long timestamp, QString address, QString contact, QString memo, QString cid, QString txid, bool outgoing) + ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, bool outgoing) { _timestamp = timestamp; _address = address; _contact = contact; _memo = memo; + _requestZaddr = requestZaddr; + _type = type; _cid = cid; _txid = txid; _outgoing = outgoing; @@ -215,6 +222,15 @@ class ChatItem return _memo; } + QString getRequestZaddr() + { + return _requestZaddr; + } + QString getType() + { + return _type; + } + QString getCid() { return _cid; @@ -224,6 +240,7 @@ class ChatItem { return _txid; } + bool isOutgoing() { @@ -244,12 +261,22 @@ class ChatItem { _contact = contact; } - + void setMemo(QString memo) { _memo = memo; } + void setRequestZaddr(QString requestZaddr) + { + _requestZaddr = requestZaddr; + } + + void setType(QString type) + { + _type = type; + } + void setCid(QString cid) { _cid = cid; @@ -258,7 +285,7 @@ class ChatItem { _txid = txid; } - + void toggleOutgo() { _outgoing = true; @@ -291,6 +318,7 @@ class ChatModel Ui::MainWindow* ui; MainWindow* main; std::map cidMap; + std::map requestZaddrMap; public: ChatModel() {}; @@ -303,13 +331,19 @@ class ChatModel void setItems(std::vector items); void renderChatBox(Ui::MainWindow* ui, QListView &view); void renderChatBox(Ui::MainWindow* ui, QListView *view); + void renderContactRequest(); + void triggerRequest(); void showMessages(); void clear(); + //void renderContactRequest(Ui::MainWindow* ui, QListView *view); void addMessage(ChatItem item); void addMessage(QString timestamp, ChatItem item); void addCid(QString tx, QString cid); + void addrequestZaddr(QString tx, QString requestZaddr); QString getCidByTx(QString tx); + QString getrequestZaddrByTx(QString tx); void killCidCache(); + void killrequestZaddrCache(); }; diff --git a/src/connection.h b/src/connection.h index 5ed3a09..7130710 100644 --- a/src/connection.h +++ b/src/connection.h @@ -5,6 +5,7 @@ #include "ui_connection.h" #include "precompiled.h" + using json = nlohmann::json; class Controller; diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp index 17d3fd4..adeeb45 100644 --- a/src/contactmodel.cpp +++ b/src/contactmodel.cpp @@ -1,6 +1,9 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 #include "contactmodel.h" #include "addressbook.h" #include "mainwindow.h" +#include "chatmodel.h" void ContactModel::renderContactList(QListView* view) { @@ -12,7 +15,7 @@ void ContactModel::renderContactList(QListView* view) auto theme = Settings::getInstance()->get_theme_name(); if ((theme == "dark" || theme == "midnight")) { - QString avatar = c.getAvatar(); + QString avatar = c.getAvatar(); QStandardItem* Items1 = new QStandardItem(QIcon(avatar) ,c.getName()); contact->appendRow(Items1); @@ -22,10 +25,8 @@ void ContactModel::renderContactList(QListView* view) view->setDragDropMode(QAbstractItemView::DropOnly); view->show(); - } - - - + } } + } \ No newline at end of file diff --git a/src/contactrequest.ui b/src/contactrequest.ui index e2939ee..d2ae8ef 100644 --- a/src/contactrequest.ui +++ b/src/contactrequest.ui @@ -11,7 +11,7 @@ - Dialog + Send a contact request diff --git a/src/controller.cpp b/src/controller.cpp index fd1189f..4566827 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #include "controller.h" #include "mainwindow.h" #include "addressbook.h" @@ -6,6 +9,7 @@ #include "camount.h" #include "websockets.h" #include "DataStore.h" + template<> DataStore* DataStore::instance = nullptr; template<> @@ -860,7 +864,8 @@ void Controller::refreshTransactions() { QString memo; if (!o["memo"].is_null()) { memo = QString::fromStdString(o["memo"]); -} + } + QString cid; QString contact; @@ -876,6 +881,8 @@ void Controller::refreshTransactions() { address, contact, memo, + QString(""), + QString(""), cid, // we have to set the cid here, its included in our Addressbook for this contact txid, true // is an outgoing message @@ -930,37 +937,40 @@ void Controller::refreshTransactions() { QString type; QString cid; + QString requestZaddr1; + QString requestZaddr; + if (memo.startsWith("{")) { type = memo.mid(75,4); cid = memo.mid(14,36); + requestZaddr1 = memo.right(82); + requestZaddr = requestZaddr1.left(78); - qDebug()<addCid(txid, cid); + chatModel->addrequestZaddr(txid, requestZaddr); } - if (type == "cont") - - { - - qDebug()<< "Als Request erkannt"; - - - } - - + if (chatModel->getCidByTx(txid) != QString("0xdeadbeef")){ cid = chatModel->getCidByTx(txid); } - - else{ cid = ""; } + + if (chatModel->getrequestZaddrByTx(txid) != QString("0xdeadbeef")){ + + requestZaddr = chatModel->getrequestZaddrByTx(txid); + + } + + else{ + requestZaddr = ""; + } QString contact; for(auto &c : AddressBook::getInstance()->getAllAddressLabels()) @@ -968,23 +978,23 @@ void Controller::refreshTransactions() { if (address == c.getMyAddress()){ contact = c.getName(); - qDebug()<< "Addressbuch Addresse: " << c.getMyAddress(); - qDebug()<< "Addresse: " << address; }else{ contact = "";} - + } ChatItem item = ChatItem( datetime, address, contact, memo, + requestZaddr, + type, cid, // we have to set the cid here, its included in the headermemo txid, false ); chatModel->addMessage(item); -} + } } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5b71245..eb7b244 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,3 +1,5 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 #include "mainwindow.h" #include "addressbook.h" #include "viewalladdresses.h" @@ -15,6 +17,8 @@ #include "version.h" #include "connection.h" #include "ui_contactrequest.h" +#include "ui_requestContactDialog.h" +#include "chatmodel.h" #include "requestdialog.h" #include "websockets.h" #include @@ -1006,22 +1010,21 @@ void MainWindow::setupchatTab() { // Is request Contact checked? - if (ui->request->isChecked()) { + // if (ui->request->isChecked()) { QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::ContactRequest); // qDebug() <request->isChecked()->text(); - }else{ + // }else{ - 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::addContact); - -///////// Set selected Zaddr for Chat with Doubleklick +///////// Set selected Zaddr for Chat with Klick QObject::connect(ui->listContactWidget, &QTableView::clicked, [=] () { @@ -1046,6 +1049,19 @@ void MainWindow::setupchatTab() { } + +/* +void MainWindow::setChatItem(ChatItem * item) +{ + this->currentChatItem = item; +} + +ChatItem* MainWindow::getChatItem() +{ + return this->currentChatItem; +}*/ + + ChatMemoEdit::ChatMemoEdit(QWidget* parent) : QPlainTextEdit(parent) { QObject::connect(this, &QPlainTextEdit::textChanged, this, &ChatMemoEdit::updateDisplay); } diff --git a/src/mainwindow.h b/src/mainwindow.h index ee2e5ee..b077593 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -6,6 +6,7 @@ #include "logger.h" #include "recurring.h" + // Forward declare to break circular dependency. class Controller; class Settings; @@ -61,6 +62,10 @@ public: void updateLabels(); void updateTAddrCombo(bool checked); + // void setChatItem(ChatItem* item); + //void ChatItem* getChatItem(); + + // Disable recurring on mainnet void disableRecurring(); @@ -74,6 +79,8 @@ public: QLabel* statusIcon; QLabel* loadingLabel; QWidget* hushdtab; + //ChatItem* currentChatItem; + Logger* logger; @@ -83,8 +90,10 @@ public: public slots: void slot_change_theme(const QString& themeName); void slot_change_currency(const QString& currencyName); + private: + void closeEvent(QCloseEvent* event); void setupSendTab(); @@ -93,6 +102,7 @@ private: void setupBalancesTab(); void setuphushdTab(); void setupchatTab(); + void renderContactRequest(); void setLenDisplayLabel(QLabel* label); void updateContacts(); @@ -147,6 +157,9 @@ private: void restoreSavedStates(); bool eventFilter(QObject *object, QEvent *event); + + + bool uiPaymentsReady = false; QString pendingURIPayment; @@ -154,6 +167,7 @@ private: WormholeClient* wormhole = nullptr; Controller* rpc = nullptr; + QCompleter* labelCompleter = nullptr; QRegExpValidator* amtValidator = nullptr; QRegExpValidator* feesValidator = nullptr; diff --git a/src/mainwindow.ui b/src/mainwindow.ui index b5f3539..74739f7 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1414,9 +1414,9 @@ - 30 + 0 640 - 211 + 91 25 @@ -1427,7 +1427,7 @@ - Add conversation contact + Add contact false @@ -1493,6 +1493,19 @@ Is this message a contact request? + + + + 110 + 640 + 191 + 25 + + + + Incoming contact request + + @@ -1667,7 +1680,7 @@ AddressCombo QComboBox -
addresscombo.h
+
addresscombo.h
QRCodeLabel diff --git a/src/requestContactDialog.ui b/src/requestContactDialog.ui new file mode 100644 index 0000000..b862cda --- /dev/null +++ b/src/requestContactDialog.ui @@ -0,0 +1,355 @@ + + + requestDialog + + + + 0 + 0 + 1011 + 503 + + + + Incoming contact request + + + + + 9 + 9 + 256 + 461 + + + + true + + + QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked + + + false + + + QAbstractItemView::SingleSelection + + + + + + 263 + 9 + 741 + 271 + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + QAbstractItemView::NoEditTriggers + + + QListView::Adjust + + + 0 + + + false + + + true + + + + + + 276 + 296 + 101 + 17 + + + + Request from : + + + + + + 393 + 296 + 601 + 25 + + + + + + + 276 + 327 + 30 + 17 + + + + Cid : + + + + + + 393 + 327 + 601 + 25 + + + + + + + 276 + 358 + 71 + 17 + + + + My Zaddr : + + + + + + 393 + 358 + 601 + 25 + + + + + + + 276 + 389 + 68 + 17 + + + + Nickname + + + + + + 393 + 389 + 221 + 25 + + + + + + + 276 + 420 + 228 + 17 + + + + <html><head/><body><p align="right">Choose a avatar for your contact :</p></body></html> + + + + + + 510 + 420 + 106 + 25 + + + + + Stag + + + + :/icons/res/Stag.png + + + + + + Elsa + + + + :/icons/res/Elsa.png + + + + + + Denio + + + + :/icons/res/Denio.png + + + + + + Duke + + + + :/icons/res/Duke.png + + + + + + Yoda + + + + :/icons/res/Yoda.png + + + + + + Berg + + + + :/icons/res/Berg.png + + + + + + Sharpee + + + + :/icons/res/Sharpee.png + + + + + + Garfield + + + + :/icons/res/Garfield.png + + + + + + Snoopy + + + + :/icons/res/Snoopy.png + + + + + + Popey + + + + :/icons/res/Popey.png + + + + + + Pinguin + + + + :/icons/res/Pinguin.png + + + + + + Mickey + + + + :/icons/res/Mickey.png + + + + + + SDLogo + + + + :/icons/res/sdlogo2.png + + + + + + + + 300 + 470 + 80 + 25 + + + + + 100 + 0 + + + + Cancel + + + false + + + + + + 400 + 470 + 101 + 25 + + + + Add Contact + + + + + +