aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 @@
27#include "../application.h" 27#include "../application.h"
28#include "../util.h" 28#include "../util.h"
29 29
30bool
31_messages_filter_drop(const struct GNUNET_CHAT_Message *message)
32{
33 enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
34
35 switch (kind) {
36 case GNUNET_CHAT_KIND_CONTACT:
37 case GNUNET_CHAT_KIND_WHISPER:
38 case GNUNET_CHAT_KIND_DELETION:
39 return TRUE;
40 default:
41 return FALSE;
42 }
43}
44
30void 45void
31_messages_iterate(UI_MESSAGES_Handle *messages, 46_messages_iterate(UI_MESSAGES_Handle *messages,
32 const struct GNUNET_CHAT_Message *message) 47 const struct GNUNET_CHAT_Message *message)
@@ -52,9 +67,13 @@ messages_event(UI_MESSAGES_Handle *messages,
52 UI_MESSAGES_List *element = messages->head; 67 UI_MESSAGES_List *element = messages->head;
53 while (element) 68 while (element)
54 { 69 {
70 if (_messages_filter_drop(element->message))
71 goto skip_message;
72
55 _messages_iterate(messages, element->message); 73 _messages_iterate(messages, element->message);
56 count++; 74 count++;
57 75
76 skip_message:
58 element = element->next; 77 element = element->next;
59 } 78 }
60 79
@@ -171,6 +190,8 @@ void
171_messages_iterate_print(UI_MESSAGES_Handle *messages, 190_messages_iterate_print(UI_MESSAGES_Handle *messages,
172 const struct GNUNET_CHAT_Message *message) 191 const struct GNUNET_CHAT_Message *message)
173{ 192{
193 enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
194
174 const bool selected = (messages->line_selected == messages->line_index); 195 const bool selected = (messages->line_selected == messages->line_index);
175 const int y = messages->line_index - messages->line_offset; 196 const int y = messages->line_index - messages->line_offset;
176 197
@@ -184,7 +205,6 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages,
184 if (y >= height) 205 if (y >= height)
185 return; 206 return;
186 207
187 enum GNUNET_CHAT_MessageKind kind = GNUNET_CHAT_message_get_kind(message);
188 struct GNUNET_CHAT_Contact *sender = GNUNET_CHAT_message_get_sender(message); 208 struct GNUNET_CHAT_Contact *sender = GNUNET_CHAT_message_get_sender(message);
189 209
190 const char *name = sender? GNUNET_CHAT_contact_get_name(sender) : NULL; 210 const char *name = sender? GNUNET_CHAT_contact_get_name(sender) : NULL;
@@ -199,14 +219,54 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages,
199 if (selected) wattron(messages->window, attrs_select); 219 if (selected) wattron(messages->window, attrs_select);
200 220
201 wmove(messages->window, y, 0); 221 wmove(messages->window, y, 0);
202 wprintw( 222
203 messages->window, 223 switch (kind) {
204 "%s | [%d] %s: %s", 224 case GNUNET_CHAT_KIND_JOIN:
205 GNUNET_TIME_absolute2s(timestamp), 225 wprintw(
206 (int) kind, 226 messages->window,
207 name, 227 "%s | %s joins the room.",
208 text 228 GNUNET_TIME_absolute2s(timestamp),
209 ); 229 name
230 );
231 break;
232 case GNUNET_CHAT_KIND_LEAVE:
233 wprintw(
234 messages->window,
235 "%s | %s leaves the room.",
236 GNUNET_TIME_absolute2s(timestamp),
237 name
238 );
239 break;
240 case GNUNET_CHAT_KIND_INVITATION:
241 wprintw(
242 messages->window,
243 "%s | %s invites you to a room.",
244 GNUNET_TIME_absolute2s(timestamp),
245 name
246 );
247 break;
248 case GNUNET_CHAT_KIND_TEXT:
249 case GNUNET_CHAT_KIND_FILE:
250 wprintw(
251 messages->window,
252 "%s | %s: %s",
253 GNUNET_TIME_absolute2s(timestamp),
254 name,
255 text
256 );
257 break;
258 default:
259 wprintw(
260 messages->window,
261 "%s | [%d] %s: %s",
262 GNUNET_TIME_absolute2s(timestamp),
263 (int) kind,
264 name,
265 text
266 );
267 break;
268 }
269
210 270
211 if (selected) wattroff(messages->window, attrs_select); 271 if (selected) wattroff(messages->window, attrs_select);
212} 272}
@@ -225,10 +285,14 @@ messages_print(UI_MESSAGES_Handle *messages)
225 UI_MESSAGES_List *element = messages->head; 285 UI_MESSAGES_List *element = messages->head;
226 while (element) 286 while (element)
227 { 287 {
228 _messages_iterate_print(messages, element->message); 288 if (_messages_filter_drop(element->message))
229 element = element->next; 289 goto skip_message;
230 290
291 _messages_iterate_print(messages, element->message);
231 count++; 292 count++;
293
294 skip_message:
295 element = element->next;
232 } 296 }
233 297
234 const bool selected = (count == messages->line_selected); 298 const bool selected = (count == messages->line_selected);