summaryrefslogtreecommitdiff
path: root/src/ui/chats.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/chats.c')
-rw-r--r--src/ui/chats.c73
1 files changed, 58 insertions, 15 deletions
diff --git a/src/ui/chats.c b/src/ui/chats.c
index fc7056c..f727a37 100644
--- a/src/ui/chats.c
+++ b/src/ui/chats.c
@@ -28,9 +28,9 @@
#include "../util.h"
static int
-_chats_iterate(void *cls,
- UNUSED struct GNUNET_CHAT_Handle *handle,
- struct GNUNET_CHAT_Group *group)
+_chats_iterate_group(void *cls,
+ UNUSED struct GNUNET_CHAT_Handle *handle,
+ struct GNUNET_CHAT_Group *group)
{
UI_CHATS_Handle *chats = cls;
@@ -39,7 +39,24 @@ _chats_iterate(void *cls,
chats->line_index++;
if (selected)
- chats->selected = group;
+ chats->selected = GNUNET_CHAT_group_get_context(group);
+
+ return GNUNET_YES;
+}
+
+static int
+_chats_iterate_contact(void *cls,
+ UNUSED struct GNUNET_CHAT_Handle *handle,
+ struct GNUNET_CHAT_Contact *contact)
+{
+ UI_CHATS_Handle *chats = cls;
+
+ const bool selected = (chats->line_selected == chats->line_index);
+
+ chats->line_index++;
+
+ if (selected)
+ chats->selected = GNUNET_CHAT_contact_get_context(contact);
return GNUNET_YES;
}
@@ -68,11 +85,19 @@ chats_event(UI_CHATS_Handle *chats,
chats->line_index = 0;
chats->selected = NULL;
- int count = GNUNET_CHAT_iterate_groups(
+ int count = 1;
+
+ count += GNUNET_CHAT_iterate_groups(
+ app->chat.handle,
+ &_chats_iterate_group,
+ chats
+ );
+
+ count += GNUNET_CHAT_iterate_contacts(
app->chat.handle,
- &_chats_iterate,
+ &_chats_iterate_contact,
chats
- ) + 1;
+ );
switch (key)
{
@@ -97,23 +122,23 @@ chats_event(UI_CHATS_Handle *chats,
{
if (chats->selected)
{
- struct GNUNET_CHAT_Context *context = GNUNET_CHAT_group_get_context(chats->selected);
+ GNUNET_CHAT_context_request(chats->selected);
members_clear(&(app->current.members));
messages_clear(&(app->current.messages));
GNUNET_CHAT_context_set_user_pointer(
- context,
+ chats->selected,
&(app->current)
);
GNUNET_CHAT_context_iterate_messages(
- context,
+ chats->selected,
&_chats_iterate_messages,
&(app->chat)
);
- app->chat.context = context;
+ app->chat.context = chats->selected;
}
else
chats->open_dialog.window = chats->window;
@@ -181,9 +206,9 @@ _chats_print_entry(UI_CHATS_Handle *chats,
}
int
-_chats_iterate_print(void *cls,
- UNUSED struct GNUNET_CHAT_Handle *handle,
- struct GNUNET_CHAT_Group *group)
+_chats_iterate_print_group(void *cls,
+ UNUSED struct GNUNET_CHAT_Handle *handle,
+ struct GNUNET_CHAT_Group *group)
{
UI_CHATS_Handle *chats = cls;
@@ -192,6 +217,18 @@ _chats_iterate_print(void *cls,
return _chats_print_entry(chats, 'x', 'G', name);
}
+int
+_chats_iterate_print_contact(void *cls,
+ UNUSED struct GNUNET_CHAT_Handle *handle,
+ struct GNUNET_CHAT_Contact *contact)
+{
+ UI_CHATS_Handle *chats = cls;
+
+ const char *name = GNUNET_CHAT_contact_get_name(contact);
+
+ return _chats_print_entry(chats, 'x', 'C', name);
+}
+
void
chats_print(UI_CHATS_Handle *chats,
MESSENGER_Application *app)
@@ -210,7 +247,13 @@ chats_print(UI_CHATS_Handle *chats,
GNUNET_CHAT_iterate_groups(
app->chat.handle,
- &_chats_iterate_print,
+ &_chats_iterate_print_group,
+ chats
+ );
+
+ GNUNET_CHAT_iterate_contacts(
+ app->chat.handle,
+ &_chats_iterate_print_contact,
chats
);