messenger-gtk

Gtk+3 graphical user interfaces for GNUnet Messenger
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/event.c | 32++++++++++++++------------------
Msrc/ui/chat.c | 14++++++++++++++
Msrc/ui/chat_entry.c | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++--
Msrc/ui/message.c | 2+-
Msrc/ui/message.h | 2+-
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);