aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Channel.cpp5
-rw-r--r--src/MessageBoard.cpp7
-rw-r--r--src/main.cpp10
3 files changed, 18 insertions, 4 deletions
diff --git a/src/Channel.cpp b/src/Channel.cpp
index adcb9be..75d805c 100644
--- a/src/Channel.cpp
+++ b/src/Channel.cpp
@@ -118,6 +118,11 @@ namespace dchat
return databaseNodeInfo;
}
+ Message* Channel::getLatestMessage()
+ {
+ return messageBoard.getLatestMessage();
+ }
+
void Channel::addLocalMessage(const string &msg, User *owner, u64 timestampSeconds)
{
addLocalMessage(msg, owner, timestampSeconds, odhtdb::Hash());
diff --git a/src/MessageBoard.cpp b/src/MessageBoard.cpp
index 3e6532c..74afab8 100644
--- a/src/MessageBoard.cpp
+++ b/src/MessageBoard.cpp
@@ -442,4 +442,11 @@ namespace dchat
//textureSprite.setPosition(backgroundPos);
//window.draw(textureSprite);
}
+
+ Message* MessageBoard::getLatestMessage()
+ {
+ if(!messages.empty())
+ return messages.back();
+ return nullptr;
+ }
}
diff --git a/src/main.cpp b/src/main.cpp
index bc46240..ef4c20f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -107,7 +107,7 @@ static void channelChangeChannelName(Channel *channel, const StringView data, co
// We dont care if there is more data to read (malicious packet), we already got all the data we need
}
-static void channelAddStoredMessage(Channel *channel, const odhtdb::Hash &requestHash, const odhtdb::Signature::PublicKey &creatorPublicKey, const StringView decryptedObject, u64 timestamp)
+static void channelAddStoredMessage(Channel *channel, const odhtdb::Hash &requestHash, const odhtdb::Signature::PublicKey &creatorPublicKey, const StringView decryptedObject, u64 timestamp, bool loadedFromCache)
{
User *user = channel->getUserByPublicKey(creatorPublicKey);
if(!user)
@@ -125,8 +125,10 @@ static void channelAddStoredMessage(Channel *channel, const odhtdb::Hash &reques
case ChannelDataType::ADD_MESSAGE:
{
string msg(decryptedData.data, decryptedData.size);
- channel->addLocalMessage(msg, user, ntp::NtpTimestamp::fromCombined(timestamp).seconds, requestHash);
- if(!windowFocused && channel->getLocalUser()->isOnlineUser())
+ Message *latestMessage = channel->getLatestMessage();
+ auto timestampSeconds = ntp::NtpTimestamp::fromCombined(timestamp).seconds;
+ channel->addLocalMessage(msg, user, timestampSeconds, requestHash);
+ if(!loadedFromCache && !windowFocused && channel->getLocalUser()->isOnlineUser() && (!latestMessage || (latestMessage && timestampSeconds >= latestMessage->timestampSeconds)))
{
auto onlineLocalUser = static_cast<OnlineLocalUser*>(channel->getLocalUser());
if(creatorPublicKey != onlineLocalUser->getPublicKey())
@@ -284,7 +286,7 @@ int main(int argc, char **argv)
{
if(*request.nodeHash == *channel->getNodeInfo().getRequestHash())
{
- channelAddStoredMessage(channel, *request.requestHash, *request.creatorPublicKey, StringView((const char*)request.decryptedData.data, request.decryptedData.size), request.timestamp);
+ channelAddStoredMessage(channel, *request.requestHash, *request.creatorPublicKey, StringView((const char*)request.decryptedData.data, request.decryptedData.size), request.timestamp, request.loadedFromCache);
if(channel == Channel::getCurrent())
lastFocusedTimer.restart();
return;