Merge pull request #16 from DenioD/chat

Chat
This commit is contained in:
Strider
2020-05-08 22:37:51 +02:00
committed by GitHub
6 changed files with 102 additions and 49 deletions

View File

@@ -37,6 +37,42 @@ std::map<QString, ChatItem> ChatDataStore::getAllRawChatItems()
return this->data; return this->data;
} }
std::map<QString, ChatItem> ChatDataStore::getAllContactRequests()
{
std::map<QString, ChatItem> filteredItems;
for(auto &c: this->data)
{
if (
(c.second.getType() == "cont") &&
(c.second.isOutgoing() == false) &&
(c.second.getMemo().startsWith("{"))
)
{
filteredItems[c.first] = c.second;
}
}
return filteredItems;
}
std::map<QString, ChatItem> ChatDataStore::getAllMemos()
{
std::map<QString, ChatItem> filteredItems;
for(auto &c: this->data)
{
if (
(c.second.getMemo().startsWith("{") == false) &&
(c.second.getMemo().isEmpty() == false)
)
{
filteredItems[c.first] = c.second;
}
}
return filteredItems;
}
ChatDataStore* ChatDataStore::instance = nullptr; ChatDataStore* ChatDataStore::instance = nullptr;
bool ChatDataStore::instanced = false; bool ChatDataStore::instanced = false;

View File

@@ -8,6 +8,8 @@ class ChatDataStore
private: private:
static bool instanced; static bool instanced;
static ChatDataStore* instance; static ChatDataStore* instance;
Ui::MainWindow* ui;
MainWindow* main;
std::map<QString, ChatItem> data; std::map<QString, ChatItem> data;
ChatDataStore() ChatDataStore()
{ {
@@ -20,6 +22,8 @@ class ChatDataStore
void setData(QString key, ChatItem value); void setData(QString key, ChatItem value);
ChatItem getData(QString key); ChatItem getData(QString key);
std::map<QString, ChatItem> getAllRawChatItems(); std::map<QString, ChatItem> getAllRawChatItems();
std::map<QString, ChatItem> getAllContactRequests();
std::map<QString, ChatItem> getAllMemos();
QString dump(); QString dump();
~ChatDataStore() ~ChatDataStore()

View File

@@ -100,23 +100,27 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView &view)
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(); QStandardItemModel* chat = new QStandardItemModel();
// ui->lcdNumber->setStyleSheet("background-color: red"); // ui->lcdNumber->setStyleSheet("background-color: red");
// ui->lcdNumber->setPalette(Qt::red); // ui->lcdNumber->setPalette(Qt::red);
// ui->lcdNumber->display("1"); // ui->lcdNumber->display("1");
for (auto &c : DataStore::getChatDataStore()->getAllRawChatItems())//this->chatItems)
for (auto &p : AddressBook::getInstance()->getAllAddressLabels()) for (auto &p : AddressBook::getInstance()->getAllAddressLabels())
{ for (auto &c : DataStore::getChatDataStore()->getAllMemos())
{
//////Render only Memos for selected contacts. Do not render empty Memos //// Render only memos where cid=cid //////Render only Memos for selected contacts. Do not render empty Memos //// Render only memos where cid=cid
if ((c.second.getContact() == ui->contactNameMemo->text().trimmed()) && (p.getPartnerAddress() == c.second.getAddress()) && (c.second.getMemo().startsWith("{") == false) && (c.second.getMemo().isEmpty() == false) && (c.second.isOutgoing() == true)) if (
(c.second.getContact() == ui->contactNameMemo->text().trimmed()) &&
(p.getPartnerAddress() == c.second.getAddress()) &&
(c.second.isOutgoing() == true)
)
{ {
QStandardItem* Items = new QStandardItem(c.second.toChatLine()); QStandardItem* Items = new QStandardItem(c.second.toChatLine());
@@ -129,8 +133,13 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view)
ui->listChat->setModel(chat); ui->listChat->setModel(chat);
} }
if ((c.second.getContact() == ui->contactNameMemo->text().trimmed()) && ((p.getMyAddress() == c.second.getAddress()) && c.second.getMemo().startsWith("{") == false) && (c.second.getMemo().isEmpty() == false) && (c.second.isOutgoing() == false)) if (
(c.second.getContact() == ui->contactNameMemo->text().trimmed()) &&
(p.getMyAddress() == c.second.getAddress()) &&
(c.second.isOutgoing() == false)
)
{ {
QStandardItem* Items1 = new QStandardItem(c.second.toChatLine()); QStandardItem* Items1 = new QStandardItem(c.second.toChatLine());
@@ -143,48 +152,33 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view)
ui->listChat->setModel(chat); ui->listChat->setModel(chat);
} }
}
}
}
}
void ChatModel::renderContactRequest(){ void MainWindow::renderContactRequest(){
Ui_requestDialog requestContact; Ui_requestDialog requestContact;
QDialog dialog(main); QDialog dialog(this);
requestContact.setupUi(&dialog); requestContact.setupUi(&dialog);
Settings::saveRestore(&dialog); Settings::saveRestore(&dialog);
{ QStandardItemModel* contactRequest = new QStandardItemModel();
QStandardItemModel* contactRequest = new QStandardItemModel();
{
for (auto &c : DataStore::getChatDataStore()->getAllRawChatItems())//this->chatItems) for (auto &c : DataStore::getChatDataStore()->getAllContactRequests())
{ {
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();
}
QStandardItem* Items = new QStandardItem(c.second.getAddress()); }
contactRequest->appendRow(Items);
requestContact.requestContact->setModel(contactRequest);
requestContact.requestContact->show();
}
}
}
QObject::connect(requestContact.requestContact, &QTableView::clicked, [&] () { QObject::connect(requestContact.requestContact, &QTableView::clicked, [&] () {
@@ -214,8 +208,6 @@ void ChatModel::renderContactRequest(){
} }
}); });
QObject::connect(requestContact.pushButton, &QPushButton::clicked, [&] () { QObject::connect(requestContact.pushButton, &QPushButton::clicked, [&] () {
QString cid = requestContact.requestCID->text(); QString cid = requestContact.requestCID->text();
@@ -225,12 +217,33 @@ void ChatModel::renderContactRequest(){
QString avatar = QString(":/icons/res/") + requestContact.comboBoxAvatar->currentText() + QString(".png"); QString avatar = QString(":/icons/res/") + requestContact.comboBoxAvatar->currentText() + QString(".png");
if (addr.isEmpty() || newLabel.isEmpty())
{
QMessageBox::critical(
this,
QObject::tr("Address or Label Error"),
QObject::tr("Address or Label cannot be empty"),
QMessageBox::Ok
);
return;
}
// Test if address is valid.
if (!Settings::isValidAddress(addr))
{
QMessageBox::critical(
this,
QObject::tr("Address Format Error"),
QObject::tr("%1 doesn't seem to be a valid hush address.").arg(addr),
QMessageBox::Ok
);
return;
}
qDebug()<<"Beginn kopiert" <<cid << addr << newLabel << myAddr; qDebug()<<"Beginn kopiert" <<cid << addr << newLabel << myAddr;
AddressBook::getInstance()->addAddressLabel(newLabel, addr, myAddr, cid, avatar); AddressBook::getInstance()->addAddressLabel(newLabel, addr, myAddr, cid, avatar);
QMessageBox::information(main, "Added Contact","successfully added your new contact. You can now Chat with this contact"); QMessageBox::information(this, "Added Contact","successfully added your new contact. You can now Chat with this contact");
}); });
@@ -238,8 +251,6 @@ void ChatModel::renderContactRequest(){
dialog.exec(); dialog.exec();
} }
void ChatModel::addCid(QString tx, QString cid) void ChatModel::addCid(QString tx, QString cid)
{ {
this->cidMap[tx] = cid; this->cidMap[tx] = cid;

View File

@@ -329,7 +329,7 @@ class ChatModel
void setItems(std::vector<ChatItem> items); void setItems(std::vector<ChatItem> items);
void renderChatBox(Ui::MainWindow* ui, QListView &view); void renderChatBox(Ui::MainWindow* ui, QListView &view);
void renderChatBox(Ui::MainWindow* ui, QListView *view); void renderChatBox(Ui::MainWindow* ui, QListView *view);
void renderContactRequest(); // void renderContactRequest();
void triggerRequest(); void triggerRequest();
void showMessages(); void showMessages();
void clear(); void clear();

View File

@@ -1057,6 +1057,7 @@ void MainWindow::setupchatTab() {
QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChatButton); QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChatButton);
QObject::connect(ui->sendContact, &QPushButton::clicked, this, &MainWindow::ContactRequest); QObject::connect(ui->sendContact, &QPushButton::clicked, this, &MainWindow::ContactRequest);
QObject::connect(ui->safeContactRequest, &QPushButton::clicked, this, &MainWindow::addContact); QObject::connect(ui->safeContactRequest, &QPushButton::clicked, this, &MainWindow::addContact);
QObject::connect(ui->pushContact, &QPushButton::clicked, this , &MainWindow::renderContactRequest);
///////// Set selected Zaddr for Chat with Klick ///////// Set selected Zaddr for Chat with Klick

View File

@@ -62,6 +62,7 @@ public:
void updateLabels(); void updateLabels();
void updateTAddrCombo(bool checked); void updateTAddrCombo(bool checked);
// void renderContactRequest();
// void setChatItem(ChatItem* item); // void setChatItem(ChatItem* item);
//void ChatItem* getChatItem(); //void ChatItem* getChatItem();