diff options
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/messages.c | 86 |
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 | ||
30 | bool | ||
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 | |||
30 | void | 45 | void |
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); |