diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/main.cpp b/src/main.cpp index b1f63e9..83ef11a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,7 @@ #include "../include/Command.hpp" #include "../include/Settings.hpp" #include "../include/ColorScheme.hpp" +#include "../include/GlobalContextMenu.hpp" #include <string> #include <SFML/Graphics.hpp> #include <cstring> @@ -75,7 +76,7 @@ void channelChangeUserNickname(Channel *channel, const StringView data, const od // We dont care if there is more data to read (malicious packet), we already got all the data we need } -void channelAddStoredMessage(Channel *channel, const odhtdb::Signature::PublicKey &creatorPublicKey, const StringView decryptedObject, u64 timestamp) +void channelAddStoredMessage(Channel *channel, const odhtdb::Hash &requestHash, const odhtdb::Signature::PublicKey &creatorPublicKey, const StringView decryptedObject, u64 timestamp) { User *user = channel->getUserByPublicKey(creatorPublicKey); if(!user) @@ -90,10 +91,18 @@ void channelAddStoredMessage(Channel *channel, const odhtdb::Signature::PublicKe StringView decryptedData((const char*)decryptedObject.data + 1, decryptedObject.size - 1); switch(channelDataType) { - case ChannelDataType::MESSAGE: + case ChannelDataType::ADD_MESSAGE: { string msg(decryptedData.data, decryptedData.size); - channel->addLocalMessage(msg, user, ntp::NtpTimestamp::fromCombined(timestamp).seconds); + channel->addLocalMessage(msg, user, ntp::NtpTimestamp::fromCombined(timestamp).seconds, requestHash); + break; + } + case ChannelDataType::DELETE_MESSAGE: + { + sibs::SafeDeserializer deserializer((const u8*)decryptedData.data, decryptedData.size); + odhtdb::Hash messageId; + deserializer.extract((u8*)messageId.getData(), odhtdb::HASH_BYTE_SIZE); + channel->deleteLocalMessage(messageId); break; } case ChannelDataType::NICKNAME_CHANGE: @@ -127,7 +136,7 @@ void channelAddStoredMessages(Channel *channel, const odhtdb::DatabaseStorageObj if(nodeStorageAddedObject->decryptedObject.operation == odhtdb::DatabaseOperation::ADD_DATA) { StringView decryptedObject((const char*)nodeStorageAddedObject->decryptedObject.data.data, nodeStorageAddedObject->decryptedObject.data.size); - channelAddStoredMessage(channel, nodeStorageAddedObject->creatorPublicKey, decryptedObject, nodeStorageAddedObject->createdTimestamp); + channelAddStoredMessage(channel, nodeStorageAddedObject->requestHash, nodeStorageAddedObject->creatorPublicKey, decryptedObject, nodeStorageAddedObject->createdTimestamp); } } } @@ -200,7 +209,7 @@ int main(int argc, char **argv) { if(*request.nodeHash == *channel->getNodeInfo().getRequestHash()) { - channelAddStoredMessage(channel, request.creatorUser->getPublicKey(), StringView((const char*)request.decryptedData.data, request.decryptedData.size), request.timestamp); + channelAddStoredMessage(channel, *request.requestHash, request.creatorUser->getPublicKey(), StringView((const char*)request.decryptedData.data, request.decryptedData.size), request.timestamp); return; } } @@ -642,6 +651,7 @@ int main(int argc, char **argv) window.setFramerateLimit(FRAMERATE_FOCUSED); //else if(event.type == sf::Event::LostFocus) // window.setFramerateLimit(FRAMERATE_NOT_FOCUSED); + GlobalContextMenu::processEvent(event); currentChannel->processEvent(event); } @@ -650,6 +660,7 @@ int main(int argc, char **argv) currentChannel->draw(window, cache); UsersSidePanel::draw(window); ChannelTopPanel::draw(window); + GlobalContextMenu::draw(window); if(waitingToJoin) { |