aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp21
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)
{