commit 963ca5e24a56e17be1ba1bbff2a498c7837edb55
parent 62090cdc581f6b7c52997f124c791912b91977f5
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Wed, 22 Dec 2021 19:54:14 +0100
Adjusted chat update to be applied by each new message
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
5 files changed, 83 insertions(+), 22 deletions(-)
diff --git a/src/event.c b/src/event.c
@@ -235,13 +235,13 @@ event_joining_contact(MESSENGER_Application *app,
if (!handle)
return;
- ui_chat_entry_update(handle, app, context);
-
UI_MESSAGE_Handle *message = ui_message_new(
UI_MESSAGE_STATUS,
UI_MESSAGE_CONTENT_TEXT
);
+ ui_message_update(message, msg);
+
struct GNUNET_CHAT_Contact *contact = GNUNET_CHAT_message_get_sender(
msg
);
@@ -270,7 +270,8 @@ event_joining_contact(MESSENGER_Application *app,
message->message_box
);
- handle->chat->messages = g_list_append(handle->chat->messages, message);
+ handle->chat->messages = g_list_prepend(handle->chat->messages, message);
+ ui_chat_entry_update(handle, app, context);
}
void
@@ -325,6 +326,8 @@ event_invitation(UNUSED MESSENGER_Application *app,
UI_MESSAGE_CONTENT_TEXT
);
+ ui_message_update(message, msg);
+
const struct GNUNET_CHAT_Contact *contact = GNUNET_CHAT_message_get_sender(
msg
);
@@ -360,7 +363,8 @@ event_invitation(UNUSED MESSENGER_Application *app,
message->message_box
);
- handle->chat->messages = g_list_append(handle->chat->messages, message);
+ handle->chat->messages = g_list_prepend(handle->chat->messages, message);
+ ui_chat_entry_update(handle, app, context);
}
void
@@ -382,6 +386,8 @@ event_receive_message(UNUSED MESSENGER_Application *app,
file? UI_MESSAGE_CONTENT_FILE : UI_MESSAGE_CONTENT_TEXT
);
+ ui_message_update(message, msg);
+
const struct GNUNET_CHAT_Contact *contact = GNUNET_CHAT_message_get_sender(
msg
);
@@ -393,8 +399,8 @@ event_receive_message(UNUSED MESSENGER_Application *app,
msg
);
- const char *text = GNUNET_CHAT_message_get_text(msg);
- const char *time = GNUNET_STRINGS_absolute_time_to_string(timestamp);
+ const gchar *text = GNUNET_CHAT_message_get_text(msg);
+ const gchar *time = GNUNET_STRINGS_absolute_time_to_string(timestamp);
if ((!ui_messenger_is_context_active(&(app->ui.messenger), context)) &&
(GNUNET_YES != sent))
@@ -409,21 +415,11 @@ event_receive_message(UNUSED MESSENGER_Application *app,
gtk_label_set_text(message->text_label, text? text : "");
gtk_label_set_text(message->timestamp_label, time? time : "");
- if (message->read_receipt_image)
- // TODO: check read receipt
-
gtk_container_add(
GTK_CONTAINER(handle->chat->messages_listbox),
message->message_box
);
- handle->chat->messages = g_list_append(handle->chat->messages, message);
-
- gtk_label_set_text(handle->text_label, text? text : "");
- gtk_label_set_text(handle->timestamp_label, time? time : "");
-
- gtk_widget_set_visible(
- GTK_WIDGET(handle->read_receipt_image),
- GNUNET_YES == sent
- );
+ handle->chat->messages = g_list_prepend(handle->chat->messages, message);
+ ui_chat_entry_update(handle, app, context);
}
diff --git a/src/ui/chat.c b/src/ui/chat.c
@@ -514,7 +514,9 @@ ui_chat_update(UI_CHAT_Handle *handle,
GString *subtitle = g_string_new("");
if (contact)
+ {
title = GNUNET_CHAT_contact_get_name(contact);
+ }
else if (group)
{
title = GNUNET_CHAT_group_get_name(group);
@@ -581,6 +583,18 @@ ui_chat_update(UI_CHAT_Handle *handle,
gtk_widget_set_sensitive(GTK_WIDGET(handle->attach_file_button), activated);
gtk_widget_set_sensitive(GTK_WIDGET(handle->emoji_button), activated);
gtk_widget_set_sensitive(GTK_WIDGET(handle->send_record_button), activated);
+
+ if (!handle->messages)
+ return;
+
+ UI_MESSAGE_Handle *message = (
+ (UI_MESSAGE_Handle*) handle->messages->data
+ );
+
+ const gchar *time = gtk_label_get_text(message->timestamp_label);
+
+ if (!group)
+ gtk_label_set_text(handle->chat_subtitle, time);
}
void
diff --git a/src/ui/chat_entry.c b/src/ui/chat_entry.c
@@ -27,6 +27,8 @@
#include "../application.h"
#include "../contact.h"
+#include "message.h"
+
UI_CHAT_ENTRY_Handle*
ui_chat_entry_new(MESSENGER_Application *app)
{
@@ -62,6 +64,16 @@ ui_chat_entry_new(MESSENGER_Application *app)
return handle;
}
+/*static int
+_iterate_message_read_receipt(UNUSED void *cls,
+ UNUSED const struct GNUNET_CHAT_Message *message,
+ const struct GNUNET_CHAT_Contact *contact,
+ int read_receipt)
+{
+ printf("read_receipt: %s %d\n", GNUNET_CHAT_contact_get_name(contact), read_receipt);
+ return GNUNET_YES;
+}*/
+
void
ui_chat_entry_update(UI_CHAT_ENTRY_Handle *handle,
MESSENGER_Application *app,
@@ -86,8 +98,47 @@ ui_chat_entry_update(UI_CHAT_ENTRY_Handle *handle,
hdy_avatar_set_text(handle->entry_avatar, title);
}
- if (handle->chat)
- ui_chat_update(handle->chat, app, context);
+ if (!handle->chat)
+ return;
+
+ ui_chat_update(handle->chat, app, context);
+
+ if (!handle->chat->messages)
+ return;
+
+ UI_MESSAGE_Handle *message = (
+ (UI_MESSAGE_Handle*) handle->chat->messages->data
+ );
+
+ const gchar *text = gtk_label_get_text(message->text_label);
+ const gchar *time = gtk_label_get_text(message->timestamp_label);
+
+ if (group)
+ {
+ GString *message_text = g_string_new(
+ gtk_label_get_text(message->sender_label)
+ );
+
+ g_string_append_printf(
+ message_text,
+ _(": %s"),
+ text
+ );
+
+ gtk_label_set_text(handle->text_label, message_text->str);
+ g_string_free(message_text, TRUE);
+ }
+ else
+ gtk_label_set_text(handle->text_label, text);
+
+ gtk_label_set_text(handle->timestamp_label, time);
+
+ gtk_widget_set_visible(
+ GTK_WIDGET(handle->read_receipt_image),
+ message->read_receipt_image? gtk_widget_is_visible(
+ GTK_WIDGET(message->read_receipt_image)
+ ) : FALSE
+ );
}
void
diff --git a/src/ui/message.c b/src/ui/message.c
@@ -167,7 +167,7 @@ ui_message_new(UI_MESSAGE_Type type,
void
ui_message_update(UI_MESSAGE_Handle *handle,
- struct GNUNET_CHAT_Message *msg)
+ const struct GNUNET_CHAT_Message *msg)
{
struct GNUNET_CHAT_File *file = GNUNET_CHAT_message_get_file(msg);
diff --git a/src/ui/message.h b/src/ui/message.h
@@ -80,7 +80,7 @@ ui_message_new(UI_MESSAGE_Type type,
void
ui_message_update(UI_MESSAGE_Handle *handle,
- struct GNUNET_CHAT_Message *message);
+ const struct GNUNET_CHAT_Message *message);
void
ui_message_delete(UI_MESSAGE_Handle *handle);