diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index df894c3..c01b84c 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -14,7 +14,7 @@ using namespace std; using namespace boost; -ChatModel::ChatModel(std::map chatItems) +ChatModel::ChatModel(std::map chatItems) { this->chatItems = chatItems; } @@ -24,12 +24,26 @@ ChatModel::ChatModel(std::vector chatItems) this->setItems(chatItems); } -std::map ChatModel::getItems() +QString ChatModel::generateChatItemID(ChatItem item) +{ + QString key = QString::number(item.getTimestamp()) + QString("-"); + key += QString(QCryptographicHash::hash( + QString( + QString::number(item.getTimestamp()) + + item.getAddress() + + item.getContact() + + item.getMemo() + ).toUtf8() + ,QCryptographicHash::Md5).toHex()); + return key; +} + +std::map ChatModel::getItems() { return this->chatItems; } -void ChatModel::setItems(std::map items) +void ChatModel::setItems(std::map items) { this->chatItems = chatItems; } @@ -38,7 +52,7 @@ void ChatModel::setItems(std::vector items) { for(ChatItem c : items) { - this->chatItems[c.getTimestamp()] = c; + this->chatItems[this->generateChatItemID(c)] = c; } } @@ -50,12 +64,16 @@ void ChatModel::clear() void ChatModel::addMessage(ChatItem item) { - this->chatItems[item.getTimestamp()] = item; + QString key = this->generateChatItemID(item); + qDebug() << "inserting chatitem with id: " << key; + this->chatItems[key] = item; } -void ChatModel::addMessage(long timestamp, ChatItem item) +void ChatModel::addMessage(QString timestamp, ChatItem item) { - this->chatItems[timestamp] = item; + QString key = this->generateChatItemID(item); + timestamp = "0"; + this->chatItems[key] = item; } void ChatModel::showMessages() @@ -120,6 +138,26 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListWidget *view) } +void ChatModel::addCid(QString tx, QString cid) +{ + this->cidMap[tx] = cid; +} + +QString ChatModel::getCidByTx(QString tx) +{ + if(this->cidMap.count(tx) > 0) + { + return this->cidMap[tx]; + } + + return QString("0xdeadbeef"); +} + +void ChatModel::killCidCache() +{ + this->cidMap.clear(); +} + QString MainWindow::createHeaderMemo(QString type, QString cid, QString zaddr, int version=0, int headerNumber=1) { diff --git a/src/chatmodel.h b/src/chatmodel.h index 9f06d3a..fcc68bf 100644 --- a/src/chatmodel.h +++ b/src/chatmodel.h @@ -73,7 +73,7 @@ class ChatItem return _cid; } - QString getTxid() + QString getTxid() { return _txid; } @@ -130,17 +130,19 @@ class ChatItem class ChatModel { private: - std::map chatItems; + std::map chatItems; QTableView* parent; Ui::MainWindow* ui; MainWindow* main; + std::map cidMap; public: ChatModel() {}; - ChatModel(std::map chatItems); + ChatModel(std::map chatItems); ChatModel(std::vector chatItems); - std::map getItems(); - void setItems(std::map items); + QString generateChatItemID(ChatItem item); + std::map getItems(); + void setItems(std::map items); QString zaddr(); void setItems(std::vector items); void renderChatBox(Ui::MainWindow* ui, QListWidget &view); @@ -148,7 +150,10 @@ class ChatModel void showMessages(); void clear(); void addMessage(ChatItem item); - void addMessage(long timestamp, ChatItem item); + void addMessage(QString timestamp, ChatItem item); + void addCid(QString tx, QString cid); + QString getCidByTx(QString tx); + void killCidCache(); }; #endif \ No newline at end of file diff --git a/src/controller.cpp b/src/controller.cpp index 38bfada..5952201 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -940,11 +940,10 @@ void Controller::refreshTransactions() { txdata.push_back(tx); QString cid = ""; - // if (memo.startsWith("{")) { - - // cid = memo.mid(14,36); - - // }else{ cid = "";} + if (memo.startsWith("{")) { + cid = memo.mid(14,36); + chatModel->addCid(txid, cid); + }else{ cid = "";} ChatItem item = ChatItem( datetime,