diff options
Diffstat (limited to 'src/ui/messages.c')
-rw-r--r-- | src/ui/messages.c | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/src/ui/messages.c b/src/ui/messages.c index 26df838..1194f5b 100644 --- a/src/ui/messages.c +++ b/src/ui/messages.c | |||
@@ -39,6 +39,38 @@ _messages_iterate(UI_MESSAGES_Handle *messages, | |||
39 | messages->selected = message; | 39 | messages->selected = message; |
40 | } | 40 | } |
41 | 41 | ||
42 | |||
43 | |||
44 | void | ||
45 | _messages_handle_message(UI_MESSAGES_Handle *messages) | ||
46 | { | ||
47 | switch (GNUNET_CHAT_message_get_kind(messages->selected)) | ||
48 | { | ||
49 | case GNUNET_CHAT_KIND_INVITATION: | ||
50 | { | ||
51 | struct GNUNET_CHAT_Invitation *invitation = ( | ||
52 | GNUNET_CHAT_message_get_invitation(messages->selected) | ||
53 | ); | ||
54 | |||
55 | if (invitation) | ||
56 | GNUNET_CHAT_invitation_accept(invitation); | ||
57 | break; | ||
58 | } | ||
59 | case GNUNET_CHAT_KIND_FILE: | ||
60 | { | ||
61 | struct GNUNET_CHAT_File *file = GNUNET_CHAT_message_get_file( | ||
62 | messages->selected | ||
63 | ); | ||
64 | |||
65 | if ((file) && (GNUNET_YES != GNUNET_CHAT_file_is_downloading(file))) | ||
66 | GNUNET_CHAT_file_start_download(file, NULL, NULL); | ||
67 | break; | ||
68 | default: | ||
69 | break; | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | |||
42 | void | 74 | void |
43 | messages_event(UI_MESSAGES_Handle *messages, | 75 | messages_event(UI_MESSAGES_Handle *messages, |
44 | MESSENGER_Application *app, | 76 | MESSENGER_Application *app, |
@@ -94,7 +126,9 @@ messages_event(UI_MESSAGES_Handle *messages, | |||
94 | case '\n': | 126 | case '\n': |
95 | case KEY_ENTER: | 127 | case KEY_ENTER: |
96 | { | 128 | { |
97 | if ((!(messages->selected)) && (messages->text_len > 0)) | 129 | if (messages->selected) |
130 | _messages_handle_message(messages); | ||
131 | else if (messages->text_len > 0) | ||
98 | { | 132 | { |
99 | GNUNET_CHAT_context_send_text(app->chat.context, messages->text); | 133 | GNUNET_CHAT_context_send_text(app->chat.context, messages->text); |
100 | messages->text_len = 0; | 134 | messages->text_len = 0; |
@@ -199,6 +233,8 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages, | |||
199 | const char *name = sender? GNUNET_CHAT_contact_get_name(sender) : NULL; | 233 | const char *name = sender? GNUNET_CHAT_contact_get_name(sender) : NULL; |
200 | const char *text = GNUNET_CHAT_message_get_text(message); | 234 | const char *text = GNUNET_CHAT_message_get_text(message); |
201 | 235 | ||
236 | const struct GNUNET_CHAT_File *file = GNUNET_CHAT_message_get_file(message); | ||
237 | |||
202 | struct GNUNET_TIME_Absolute abs_time = GNUNET_CHAT_message_get_timestamp( | 238 | struct GNUNET_TIME_Absolute abs_time = GNUNET_CHAT_message_get_timestamp( |
203 | message | 239 | message |
204 | ); | 240 | ); |
@@ -246,14 +282,29 @@ _messages_iterate_print(UI_MESSAGES_Handle *messages, | |||
246 | ); | 282 | ); |
247 | break; | 283 | break; |
248 | case GNUNET_CHAT_KIND_TEXT: | 284 | case GNUNET_CHAT_KIND_TEXT: |
249 | case GNUNET_CHAT_KIND_FILE: | ||
250 | wprintw( | 285 | wprintw( |
251 | messages->window, | 286 | messages->window, |
252 | "%s: %s", | 287 | "%s: %s", |
288 | name, | ||
289 | text | ||
290 | ); | ||
291 | break; | ||
292 | case GNUNET_CHAT_KIND_FILE: { | ||
293 | const char *filename = GNUNET_CHAT_file_get_name(file); | ||
294 | |||
295 | const uint64_t localsize = GNUNET_CHAT_file_get_local_size(file); | ||
296 | const uint64_t filesize = GNUNET_CHAT_file_get_size(file); | ||
297 | |||
298 | wprintw( | ||
299 | messages->window, | ||
300 | "%s shares the file '%s' (%lu / %lu) with you.", | ||
253 | name, | 301 | name, |
254 | text | 302 | filename, |
303 | localsize, | ||
304 | filesize | ||
255 | ); | 305 | ); |
256 | break; | 306 | break; |
307 | } | ||
257 | default: | 308 | default: |
258 | wprintw( | 309 | wprintw( |
259 | messages->window, | 310 | messages->window, |