Browse Source

render only new requests

pull/130/head
DenioD 4 years ago
parent
commit
cfbcc43b14
  1. 1
      src/Chat/Chat.cpp
  2. 9
      src/DataStore/ChatDataStore.cpp
  3. 6
      src/FileSystem/FileSystem.cpp
  4. 4
      src/FileSystem/FileSystem.h
  5. 17
      src/Model/ChatItem.cpp
  6. 7
      src/Model/ChatItem.h
  7. 7
      src/Model/ContactItem.cpp
  8. 5
      src/Model/ContactItem.h
  9. 3
      src/addressbook.cpp
  10. 9
      src/addressbook.h
  11. 35
      src/chatmodel.cpp
  12. 6
      src/chatmodel.h
  13. 3
      src/contactmodel.h
  14. 38
      src/controller.cpp
  15. 3
      src/controller.h
  16. 7
      src/mainwindow.cpp
  17. 50
      src/requestContactDialog.ui
  18. 2
      src/sendtab.cpp

1
src/Chat/Chat.cpp

@ -55,7 +55,6 @@ void Chat::renderChatBox(Ui::MainWindow *ui, QListView *view, QLabel *label)
{
for (auto &c : DataStore::getChatDataStore()->getAllMemos())
{
//////Render only Memos for selected contacts. Do not render empty Memos //// Render only memos where cid=cid
if (
(p.getName() == ui->contactNameMemo->text().trimmed()) &&

9
src/DataStore/ChatDataStore.cpp

@ -3,6 +3,8 @@
#include "ChatDataStore.h"
#include "addressbook.h"
#include "chatmodel.h"
ChatDataStore* ChatDataStore::getInstance()
{
@ -53,15 +55,14 @@ std::map<QString, ChatItem> ChatDataStore::getAllNewContactRequests()
{
std::map<QString, ChatItem> filteredItems;
for(auto &c: this->data)
for(auto &c: this->data)
{
if (
(c.second.isOutgoing() == false) &&
(c.second.getType() == "Cont") &&
(c.second.getContact() == "")
(c.second.isContact() == false)
)
{
filteredItems[c.first] = c.second;
}

6
src/FileSystem/FileSystem.cpp

@ -1,8 +1,11 @@
#include "FileSystem.h"
// Copyright 2019-2020 The Hush developers
// GPLv3
#include "FileSystem.h"
#include <QString>
#include <QList>
#include "../Crypto/passwd.h"
#include "addressbook.h"
FileSystem::FileSystem()
{
@ -99,7 +102,6 @@ QList<ContactItem> FileSystem::readContactsOldFormat(QString file)
qDebug() << "Detected old addressbook format";
QList<QList<QString>> stuff;
in >> stuff;
//qDebug() << "Stuff: " << stuff;
for (int i=0; i < stuff.size(); i++)
{
ContactItem contact = ContactItem(stuff[i][0],stuff[i][1], stuff[i][2], stuff[i][3],stuff[i][4]);

4
src/FileSystem/FileSystem.h

@ -1,3 +1,5 @@
// Copyright 2019-2020 The Hush developers
// GPLv3
#ifndef FILESYSTEM_H
#define FILESYSTEM_H
@ -13,7 +15,7 @@ class FileSystem
static bool instanced;
static FileSystem* instance;
FileSystem();
public:
static FileSystem* getInstance();
QList<ContactItem> readContacts(QString file);

17
src/Model/ChatItem.cpp

@ -5,7 +5,7 @@
ChatItem::ChatItem() {}
ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool notarize)
ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool notarize, bool iscontact)
{
_timestamp = timestamp;
_address = address;
@ -18,9 +18,10 @@ ChatItem::ChatItem(long timestamp, QString address, QString contact, QString mem
_confirmations = confirmations;
_outgoing = false;
_notarize = notarize;
_iscontact = iscontact;
}
ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing, bool notarize)
ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing, bool notarize, bool iscontact)
{
_timestamp = timestamp;
_address = address;
@ -33,6 +34,8 @@ ChatItem::ChatItem(long timestamp, QString address, QString contact, QString mem
_confirmations = confirmations;
_outgoing = outgoing;
_notarize = notarize;
_iscontact = iscontact;
}
long ChatItem::getTimestamp()
@ -88,6 +91,11 @@ bool ChatItem::isNotarized()
return _notarize;
}
bool ChatItem::isContact()
{
return _iscontact;
}
void ChatItem::setTimestamp(long timestamp)
{
_timestamp = timestamp;
@ -140,6 +148,11 @@ void ChatItem::notarized()
_notarize = false;
}
void ChatItem::contact(bool iscontact)
{
_iscontact = iscontact;
}
QString ChatItem::toChatLine()
{

7
src/Model/ChatItem.h

@ -21,11 +21,12 @@ class ChatItem
int _confirmations;
bool _outgoing = false;
bool _notarize = false;
bool _iscontact = false;
public:
ChatItem();
ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool notarize);
ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing, bool notarize);
ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool notarize, bool iscontact);
ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing, bool notarize, bool iscontact);
long getTimestamp();
QString getAddress();
QString getContact();
@ -38,6 +39,7 @@ class ChatItem
bool isOutgoing();
bool isdouble();
bool isNotarized();
bool isContact();
void setTimestamp(long timestamp);
void setAddress(QString address);
void setContact(QString contact);
@ -49,6 +51,7 @@ class ChatItem
void setConfirmations(int confirmations);
void toggleOutgo();
void notarized();
void contact(bool iscontact);
QString toChatLine();
json toJson();
~ChatItem();

7
src/Model/ContactItem.cpp

@ -1,4 +1,9 @@
// Copyright 2019-2020 The Hush developers
// GPLv3
#include "ContactItem.h"
#include "chatmodel.h"
#include "Model/ChatItem.h"
#include "controller.h"
ContactItem::ContactItem() {}
@ -8,7 +13,7 @@ ContactItem::ContactItem(QString name, QString partnerAddress, QString myAddress
_myAddress = myAddress;
_partnerAddress = partnerAddress;
_cid = cid;
_avatar = avatar;
_avatar = avatar;
}
QString ContactItem::getName() const

5
src/Model/ContactItem.h

@ -1,8 +1,11 @@
// Copyright 2019-2020 The Hush developers
// GPLv3
#ifndef CONTACTITEM_H
#define CONTACTITEM_H
#include <vector>
#include <QString>
#include "mainwindow.h"
using json = nlohmann::json;
class ContactItem
@ -13,7 +16,7 @@ private:
QString _name;
QString _cid;
QString _avatar;
public:
ContactItem();
ContactItem(QString name, QString partnerAddress, QString myAddress, QString cid, QString avatar);

3
src/addressbook.cpp

@ -40,7 +40,10 @@ void AddressBookModel::loadData()
QSettings().value(
"addresstablegeometry"
).toByteArray()
);
}
void AddressBookModel::addNewLabel(QString label, QString addr, QString myAddr, QString cid, QString avatar)

9
src/addressbook.h

@ -23,6 +23,7 @@ public:
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
private:
@ -32,7 +33,8 @@ private:
QTableView* parent;
//QList<QPair<QString, QString>> labels;
QList<ContactItem> labels;
QStringList headers;
QStringList headers;
};
class AddressBook {
@ -63,6 +65,10 @@ public:
QString get_avatar_name();
void set_avatar_name(QString avatar_name);
@ -76,6 +82,7 @@ private:
QString writeableFile();
QList<ContactItem> allLabels;
static AddressBook* instance;
};

35
src/chatmodel.cpp

@ -71,6 +71,26 @@ void ChatModel::showMessages()
}
}
void ChatModel::addAddressbylabel(QString address, QString label)
{
this->AddressbyLabelMap[address] = label;
}
QString ChatModel::Addressbylabel(QString address)
{
for(auto& pair : this->AddressbyLabelMap)
{
}
if(this->AddressbyLabelMap.count(address) > 0)
{
return this->AddressbyLabelMap[address];
}
return QString("0xdeadbeef");
}
void MainWindow::renderContactRequest(){
@ -89,17 +109,22 @@ void MainWindow::renderContactRequest(){
contactRequest->appendRow(Items);
requestContact.requestContact->setModel(contactRequest);
requestContact.requestContact->show();
requestContact.zaddrnew->setVisible(false);
requestContact.zaddrnew->setText(c.second.getAddress());
}
QStandardItemModel* contactRequestOld = new QStandardItemModel();
for (auto &p : AddressBook::getInstance()->getAllAddressLabels())
for (auto &c : DataStore::getChatDataStore()->getAllOldContactRequests())
{
if (p.getPartnerAddress() == c.second.getRequestZaddr())
{
QStandardItem* Items = new QStandardItem(c.second.getAddress());
QStandardItem* Items = new QStandardItem(p.getName());
contactRequestOld->appendRow(Items);
requestContact.requestContactOld->setModel(contactRequestOld);
requestContact.zaddrold->setVisible(false);
requestContact.zaddrold->setText(c.second.getAddress());
requestContact.requestContactOld->show();
}else{}
}
@ -135,11 +160,11 @@ void MainWindow::renderContactRequest(){
QObject::connect(requestContact.requestContactOld, &QTableView::clicked, [&] () {
for (auto &c : DataStore::getChatDataStore()->getAllRawChatItems()){
QModelIndex index = requestContact.requestContactOld->currentIndex();
QString label_contactold = index.data(Qt::DisplayRole).toString();
/* QModelIndex index = requestContact.requestContactOld->currentIndex();
QString label_contactold = index.data(Qt::DisplayRole).toString();*/
QStandardItemModel* contactMemo = new QStandardItemModel();
if ((c.second.isOutgoing() == false) && (label_contactold == c.second.getAddress()) && (c.second.getType() != "Cont"))
if ((c.second.isOutgoing() == false) && (requestContact.zaddrold->text() == c.second.getAddress()) && (c.second.getType() != "Cont"))
{
@ -809,7 +834,7 @@ QString MainWindow::doSendRequestTxValidations(Tx tx) {
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")
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());
}

6
src/chatmodel.h

@ -20,6 +20,7 @@
#include "Chat/Helper/ChatDelegator.h"
#include "Chat/Helper/ChatIDGenerator.h"
namespace Ui {
class MainWindow;
}
@ -34,6 +35,7 @@ class ChatModel
std::map<QString, QString> requestZaddrMap;
std::map<QString, QString> confirmationsMap;
std::map<int, std::tuple<QString, QString, QString>> sendrequestMap;
std::map<QString, QString> AddressbyLabelMap;
public:
ChatModel() {};
@ -46,6 +48,7 @@ class ChatModel
void triggerRequest();
void showMessages();
void clear();
void addAddressbylabel(QString addr, QString label);
void addMessage(ChatItem item);
void addMessage(QString timestamp, ChatItem item);
void addCid(QString tx, QString cid);
@ -55,10 +58,11 @@ class ChatModel
QString getCidByTx(QString tx);
QString getrequestZaddrByTx(QString tx);
QString getConfirmationByTx(QString tx);
QString Addressbylabel(QString addr);
void killCidCache();
void killConfirmationCache();
void killrequestZaddrCache();
};
#endif

3
src/contactmodel.h

@ -15,8 +15,7 @@ class ContactModel
ContactModel() {}
void renderContactList(QListView* view);
};
#endif

38
src/controller.cpp

@ -935,7 +935,8 @@ void Controller::refreshTransactions() {
txid,
confirmations,
true,
isNotarized
isNotarized,
false
);
DataStore::getChatDataStore()->setData(ChatIDGenerator::getInstance()->generateID(item), item);
@ -991,6 +992,28 @@ void Controller::refreshTransactions() {
QString cid;
int position;
QString requestZaddr;
bool isContact;
for (auto &p : AddressBook::getInstance()->getAllAddressLabels())
{
if (p.getPartnerAddress() == requestZaddr)
{
chatModel->addAddressbylabel(address, requestZaddr);
} else{}
if (chatModel->Addressbylabel(address) != QString("0xdeadbeef")){
isContact = true;
}else{
isContact = false;
}
if (!it["memo"].is_null()) {
@ -1005,7 +1028,8 @@ void Controller::refreshTransactions() {
chatModel->addCid(txid, cid);
chatModel->addrequestZaddr(txid, requestZaddr);
}
}
if (chatModel->getCidByTx(txid) != QString("0xdeadbeef")){
@ -1045,16 +1069,16 @@ void Controller::refreshTransactions() {
txid,
confirmations,
false,
isNotarized
isNotarized,
isContact
);
qDebug()<< "Notarized : " << isNotarized;
DataStore::getChatDataStore()->setData(ChatIDGenerator::getInstance()->generateID(item), item);
}
}
}
}
qDebug()<< getLag();
qDebug()<<"get Lag" << getLag();
// Calculate the total unspent amount that's pending. This will need to be
// shown in the UI so the user can keep track of pending funds

3
src/controller.h

@ -1,3 +1,6 @@
// Copyright 2019-2020 The Hush developers
// GPLv3
#ifndef RPCCLIENT_H
#define RPCCLIENT_H

7
src/mainwindow.cpp

@ -1358,7 +1358,6 @@ void MainWindow::setupchatTab() {
}
});
QMenu* contextMenu;
QAction* requestAction;
QAction* editAction;
@ -1397,7 +1396,6 @@ void MainWindow::setupchatTab() {
for(auto &p : AddressBook::getInstance()->getAllAddressLabels())
if (label_contact == p.getName()) {
QString label1 = p.getName();
QString addr = p.getPartnerAddress();
@ -1407,7 +1405,6 @@ void MainWindow::setupchatTab() {
AddressBook::getInstance()->removeAddressLabel(label1, addr, myzaddr, cid,avatar);
// QList<ContactItem> labels = AddressBook::getInstance()->getAllAddressLabels();
rpc->refreshContacts(
ui->listContactWidget);
rpc->refresh(true);
@ -1424,13 +1421,11 @@ void MainWindow::updateChat()
{
rpc->refreshChat(ui->listChat,ui->memoSizeChat);
rpc->refresh(true);
}
void MainWindow::updateContacts()
{
//rpc->refreshContacts(ui->listContactWidget);
}
void MainWindow::addNewZaddr(bool sapling) {

50
src/requestContactDialog.ui

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>812</width>
<width>850</width>
<height>495</height>
</rect>
</property>
@ -27,7 +27,7 @@
</property>
</widget>
</item>
<item row="0" column="3" colspan="2">
<item row="0" column="2" colspan="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;Memo of the request&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -97,12 +97,12 @@
</property>
</widget>
</item>
<item row="3" column="0" rowspan="6" colspan="2">
<item row="3" column="0" rowspan="8">
<widget class="QListView" name="requestContactOld">
<property name="minimumSize">
<size>
<width>256</width>
<height>192</height>
<height>190</height>
</size>
</property>
<property name="mouseTracking">
@ -119,14 +119,21 @@
</property>
</widget>
</item>
<item row="3" column="2" colspan="2">
<item row="3" column="1" colspan="3">
<widget class="QLabel" name="label_4">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;Details of the request&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="3">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Request from :</string>
</property>
</widget>
</item>
<item row="3" column="4" colspan="3">
<item row="4" column="4" colspan="3">
<widget class="QLineEdit" name="requestZaddr">
<property name="minimumSize">
<size>
@ -142,14 +149,14 @@
</property>
</widget>
</item>
<item row="4" column="2">
<item row="5" column="1" colspan="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>My Zaddr :</string>
</property>
</widget>
</item>
<item row="4" column="4" colspan="3">
<item row="5" column="4" colspan="3">
<widget class="QLineEdit" name="requestMyAddr">
<property name="minimumSize">
<size>
@ -165,24 +172,24 @@
</property>
</widget>
</item>
<item row="5" column="2" colspan="2">
<item row="6" column="1" colspan="3">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Give a Nickname:</string>
</property>
</widget>
</item>
<item row="5" column="4" colspan="2">
<item row="6" column="4" colspan="2">
<widget class="QLineEdit" name="requestLabel"/>
</item>
<item row="6" column="2" colspan="3">
<item row="7" column="1" colspan="4">
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;Choose a avatar for your contact :&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="7" column="2" colspan="2">
<item row="8" column="1" rowspan="2" colspan="3">
<widget class="QComboBox" name="comboBoxAvatar">
<property name="minimumSize">
<size>
@ -328,7 +335,7 @@
</item>
</widget>
</item>
<item row="7" column="5" rowspan="2">
<item row="8" column="5" rowspan="2">
<widget class="QPushButton" name="cancel">
<property name="maximumSize">
<size>
@ -353,7 +360,7 @@
</property>
</widget>
</item>
<item row="7" column="6" rowspan="2">
<item row="8" column="6" rowspan="2">
<widget class="QPushButton" name="pushButton">
<property name="maximumSize">
<size>
@ -369,17 +376,24 @@
</property>
</widget>
</item>
<item row="8" column="3" colspan="2">
<item row="9" column="2">
<widget class="QLabel" name="requestCID">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="2" colspan="5">
<widget class="QLabel" name="label_4">
<item row="10" column="1">
<widget class="QLabel" name="zaddrold">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;Details of the request&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string notr="true"/>
</property>
</widget>
</item>
<item row="10" column="3">
<widget class="QLabel" name="zaddrnew">
<property name="text">
<string/>
</property>
</widget>
</item>

2
src/sendtab.cpp

@ -937,7 +937,7 @@ QString MainWindow::doSendTxValidations(Tx tx) {
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")
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());
}

Loading…
Cancel
Save