summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2022-05-28 21:39:38 +0200
committerTheJackiMonster <thejackimonster@gmail.com>2022-05-29 00:25:51 +0200
commitf72d804229f9346b745dbbbaae46997e0344dec3 (patch)
tree670b67cec4c929ac4fdc5d43dbeb7621633c8cba
parente5a4b1f9e99f73123622b462c29b22b37bb08751 (diff)
Filter messages and added visualisation depending on kind
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/ui/messages.c86
1 files changed, 75 insertions, 11 deletions
diff --git a/src/ui/messages.c b/src/ui/messages.c
index 4d134e9..ea771bc 100644
--- a/src/ui/messages.c
+++ b/src/ui/messages.c
@@ -27,6 +27,21 @@
#include "../application.h"
#include "../util.h"
+bool
+_messages_filter_drop(const struct GNUNET_CHAT_Message *message)
+{
+ enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
+
+ switch (kind) {
+ case GNUNET_CHAT_KIND_CONTACT:
+ case GNUNET_CHAT_KIND_WHISPER:
+ case GNUNET_CHAT_KIND_DELETION:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
void
_messages_iterate(UI_MESSAGES_Handle *messages,
const struct GNUNET_CHAT_Message *message)
@@ -52,9 +67,13 @@ messages_event(UI_MESSAGES_Handle *messages,
UI_MESSAGES_List *element = messages->head;
while (element)
{
+ if (_messages_filter_drop(element->message))
+ goto skip_message;
+
_messages_iterate(messages, element->message);
count++;
+ skip_message:
element = element->next;
}
@@ -171,6 +190,8 @@ void
_messages_iterate_print(UI_MESSAGES_Handle *messages,
const struct GNUNET_CHAT_Message *message)
{
+ enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
+
const bool selected = (messages->line_selected == messages->line_index);
const int y = messages->line_index - messages->line_offset;
@@ -184,7 +205,6 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages,
if (y >= height)
return;
- enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
struct GNUNET_CHAT_Contact *sender = GNUNET_CHAT_message_get_sender(message);
const char *name = sender? GNUNET_CHAT_contact_get_name(sender) : NULL;
@@ -199,14 +219,54 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages,
if (selected) wattron(messages->window, attrs_select);
wmove(messages->window, y, 0);
- wprintw(
- messages->window,
- "%s | [%d] %s: %s",
- GNUNET_TIME_absolute2s(timestamp),
- (int) kind,
- name,
- text
- );
+
+ switch (kind) {
+ case GNUNET_CHAT_KIND_JOIN:
+ wprintw(
+ messages->window,
+ "%s | %s joins the room.",
+ GNUNET_TIME_absolute2s(timestamp),
+ name
+ );
+ break;
+ case GNUNET_CHAT_KIND_LEAVE:
+ wprintw(
+ messages->window,
+ "%s | %s leaves the room.",
+ GNUNET_TIME_absolute2s(timestamp),
+ name
+ );
+ break;
+ case GNUNET_CHAT_KIND_INVITATION:
+ wprintw(
+ messages->window,
+ "%s | %s invites you to a room.",
+ GNUNET_TIME_absolute2s(timestamp),
+ name
+ );
+ break;
+ case GNUNET_CHAT_KIND_TEXT:
+ case GNUNET_CHAT_KIND_FILE:
+ wprintw(
+ messages->window,
+ "%s | %s: %s",
+ GNUNET_TIME_absolute2s(timestamp),
+ name,
+ text
+ );
+ break;
+ default:
+ wprintw(
+ messages->window,
+ "%s | [%d] %s: %s",
+ GNUNET_TIME_absolute2s(timestamp),
+ (int) kind,
+ name,
+ text
+ );
+ break;
+ }
+
if (selected) wattroff(messages->window, attrs_select);
}
@@ -225,10 +285,14 @@ messages_print(UI_MESSAGES_Handle *messages)
UI_MESSAGES_List *element = messages->head;
while (element)
{
- _messages_iterate_print(messages, element->message);
- element = element->next;
+ if (_messages_filter_drop(element->message))
+ goto skip_message;
+ _messages_iterate_print(messages, element->message);
count++;
+
+ skip_message:
+ element = element->next;
}
const bool selected = (count == messages->line_selected);