aboutsummaryrefslogtreecommitdiff
path: root/src/ChatWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ChatWindow.cpp')
-rw-r--r--src/ChatWindow.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/ChatWindow.cpp b/src/ChatWindow.cpp
index 9cc4ff1..9fc810b 100644
--- a/src/ChatWindow.cpp
+++ b/src/ChatWindow.cpp
@@ -184,8 +184,7 @@ namespace dchat
window->windowNotification->show("Room name has to be between 1 and 32 characters");
else
{
- auto room = window->rooms->createRoom(roomName);
- setCurrentRoom(room);
+ window->rooms->createRoom(roomName);
}
break;
}
@@ -384,7 +383,9 @@ namespace dchat
leftPanelChannels.attach(*roomButton, 0, roomCount, 1, 1);
++roomCount;
- RoomData *roomData = new RoomData { leftPanelUsersLayout, messageAreaLayout, roomButton };
+ uint numMessages = 0;
+ uint numUsers = 0;
+ RoomData *roomData = new RoomData { leftPanelUsersLayout, messageAreaLayout, numMessages, numUsers, roomButton };
roomDataById[*room->id] = roomData;
if(!currentRoom)
{
@@ -407,6 +408,7 @@ namespace dchat
messageAreaStack.set_visible_child(roomIdStr);
topbar->setTitle(room->name);
currentRoom = room;
+ assert(roomDataById.find(*room->id) != roomDataById.end());
currentRoomData = roomDataById[*room->id];
if(room->localUser)
{
@@ -433,20 +435,15 @@ namespace dchat
void ChatWindow::addMessage(const RoomAddMessageRequest &request)
{
- auto roomMessages = request.room->messages;
- RoomMessage *lastMessage = nullptr;
- if(!roomMessages.empty())
- lastMessage = &roomMessages.back();
-
- if(lastMessage && lastMessage->creator->publicKey == request.message.creator->publicKey)
+ if(request.prevMessage && request.prevMessage->creator->publicKey == request.message->creator->publicKey)
{
- int64_t msgTimeDiff = (int64_t)request.message.timestampSeconds - (int64_t)lastMessage->timestampSeconds;
+ int64_t msgTimeDiff = (int64_t)request.message->timestampSeconds - (int64_t)request.prevMessage->timestampSeconds;
if(msgTimeDiff <= MERGE_MESSAGE_TIMESTAMP_DIFF_SEC)
{
- auto message = messageById[lastMessage->id];
- message->text.set_text(message->text.get_text() + "\n" + request.message.text);
+ auto message = messageById[request.prevMessage->id];
+ message->text.set_text(message->text.get_text() + "\n" + request.message->text);
// Since messages that are sent withing a timeframe are combined, several message ids can refer to the same message
- messageById[request.message.id] = message;
+ messageById[request.message->id] = message;
if(!request.loadedFromCache && *request.room->id == *currentRoom->id)
{
currentRoomData->messageAreaLayout->queue_draw();
@@ -456,20 +453,20 @@ namespace dchat
}
}
- std::string userNickname = request.message.creator->nickname;
+ std::string userNickname = request.message->creator->nickname;
if(userNickname.empty())
userNickname = "Anonymous";
- ChatMessage *message = Gtk::manage(new ChatMessage(userNickname, request.message.text, request.message.timestampSeconds));
- if(request.message.creator->avatarUrl.empty())
+ ChatMessage *message = Gtk::manage(new ChatMessage(userNickname, request.message->text, request.message->timestampSeconds));
+ if(request.message->creator->avatarUrl.empty())
message->avatar.url = "https://discordemoji.com/assets/emoji/PeepoHide.png";
else
- message->avatar.url = request.message.creator->avatarUrl;
+ message->avatar.url = request.message->creator->avatarUrl;
message->set_valign(Gtk::Align::ALIGN_START);
message->set_hexpand(true);
message->show_all();
- messageById[request.message.id] = message;
+ messageById[request.message->id] = message;
RoomData *roomData = roomDataById[*request.room->id];
- roomData->messageAreaLayout->attach(*message, 0, roomMessages.size(), 1, 1);
+ roomData->messageAreaLayout->attach(*message, 0, roomData->numMessages++, 1, 1);
// TODO: When we get a message in the current room we scroll to the bottom, but this should only be done if we are not manually scrolling to view old messages
if(!request.loadedFromCache && *request.room->id == *currentRoom->id)
@@ -487,7 +484,7 @@ namespace dchat
username->get_style_context()->add_class("username-list-username");
request.user->userdata = username;
RoomData *roomData = roomDataById[*request.room->id];
- roomData->leftPanelUsersLayout->attach(*username, 0, request.room->userByPublicKey.size() - 1, 1, 1);
+ roomData->leftPanelUsersLayout->attach(*username, 0, roomData->numUsers++, 1, 1);
fprintf(stderr, "Added user %s\n", request.user->publicKey.toString().c_str());
if(roomData == currentRoomData)
@@ -555,4 +552,4 @@ namespace dchat
auto adj = messageArea.get_vadjustment();
adj->set_value(adj->get_upper());
}
-} \ No newline at end of file
+}