diff --git a/src/chat.c b/src/chat.c index 06dc38e..1a9e4b1 100644 --- a/src/chat.c +++ b/src/chat.c @@ -567,15 +567,6 @@ static void chat_onGroupInvite(ToxWindow *self, Tox *m, int32_t friendnumber, ui if (self->num != friendnumber) return; - char name[TOX_MAX_NAME_LENGTH]; - get_nick_truncate(m, name, friendnumber); - - /* Temporary until audio groups are implemented */ - if (type == TOX_GROUPCHAT_TYPE_AV) { - line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Audio group invite by %s failed: Feature is not available"); - return; - } - if (Friends.list[friendnumber].group_invite.key != NULL) free(Friends.list[friendnumber].group_invite.key); @@ -588,9 +579,13 @@ static void chat_onGroupInvite(ToxWindow *self, Tox *m, int32_t friendnumber, ui Friends.list[friendnumber].group_invite.key = k; Friends.list[friendnumber].group_invite.pending = true; Friends.list[friendnumber].group_invite.length = length; + Friends.list[friendnumber].group_invite.type = type; sound_notify(self, generic_message, NT_WNDALERT_2, NULL); + char name[TOX_MAX_NAME_LENGTH]; + get_nick_truncate(m, name, friendnumber); + if (self->active_box != -1) box_silent_notify2(self, NT_WNDALERT_2 | NT_NOFOCUS, self->active_box, "invites you to join group chat"); else diff --git a/src/chat_commands.c b/src/chat_commands.c index e5597e0..8b2e98d 100644 --- a/src/chat_commands.c +++ b/src/chat_commands.c @@ -125,24 +125,33 @@ void cmd_join_group(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*ar const char *groupkey = Friends.list[self->num].group_invite.key; uint16_t length = Friends.list[self->num].group_invite.length; + uint8_t type = Friends.list[self->num].group_invite.type; if (!Friends.list[self->num].group_invite.pending) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "No pending group chat invite."); return; } - int groupnum = tox_join_groupchat(m, self->num, (uint8_t *) groupkey, length); + int groupnum = -1; + + if (type == TOX_GROUPCHAT_TYPE_TEXT) + groupnum = tox_join_groupchat(m, self->num, (uint8_t *) groupkey, length); +#ifdef AUDIO + else + groupnum = toxav_join_av_groupchat(m, self->num, (uint8_t *) groupkey, length, NULL, NULL); +#endif if (groupnum == -1) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat instance failed to initialize."); return; } - if (init_groupchat_win(prompt, m, groupnum) == -1) { + if (init_groupchat_win(prompt, m, groupnum, type) == -1) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize."); tox_del_groupchat(m, groupnum); return; } + } void cmd_savefile(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]) diff --git a/src/execute.c b/src/execute.c index 640af5f..aee25f0 100644 --- a/src/execute.c +++ b/src/execute.c @@ -46,7 +46,7 @@ static struct cmd_func global_commands[] = { { "/connect", cmd_connect }, { "/decline", cmd_decline }, { "/exit", cmd_quit }, - { "/groupchat", cmd_groupchat }, + { "/group", cmd_groupchat }, { "/help", cmd_prompt_help }, { "/log", cmd_log }, { "/myid", cmd_myid }, diff --git a/src/friendlist.h b/src/friendlist.h index c8b3ba3..3beb633 100644 --- a/src/friendlist.h +++ b/src/friendlist.h @@ -51,6 +51,7 @@ struct LastOnline { struct GroupChatInvite { char *key; uint16_t length; + uint8_t type; bool pending; }; diff --git a/src/global_commands.c b/src/global_commands.c index aa5c884..d063e3d 100644 --- a/src/global_commands.c +++ b/src/global_commands.c @@ -325,14 +325,28 @@ void cmd_groupchat(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*arg return; } - int groupnum = tox_add_groupchat(m); + if (argc < 1) { + line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Please specify group type: text | audio"); + return; + } + + uint8_t type = TOX_GROUPCHAT_TYPE_AV ? !strcasecmp(argv[1], "audio") : TOX_GROUPCHAT_TYPE_TEXT; + + int groupnum = -1; + + if (type == TOX_GROUPCHAT_TYPE_TEXT) + groupnum = tox_add_groupchat(m); +#ifdef AUDIO + else + groupnum = toxav_add_av_groupchat(m, NULL, NULL); +#endif if (groupnum == -1) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat instance failed to initialize."); return; } - if (init_groupchat_win(prompt, m, groupnum) == -1) { + if (init_groupchat_win(prompt, m, groupnum, type) == -1) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize."); tox_del_groupchat(m, groupnum); return; diff --git a/src/groupchat.c b/src/groupchat.c index a0b2e26..8fd212e 100644 --- a/src/groupchat.c +++ b/src/groupchat.c @@ -57,7 +57,7 @@ extern struct Winthread Winthread; /* temporary until group chats have unique commands */ extern const char glob_cmd_list[AC_NUM_GLOB_COMMANDS][MAX_CMDNAME_SIZE]; -int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum) +int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum, uint8_t type) { if (groupnum > MAX_GROUPCHAT_NUM) return -1; @@ -69,6 +69,7 @@ int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum) groupchats[i].chatwin = add_window(m, new_group_chat(m, groupnum)); groupchats[i].active = true; groupchats[i].num_peers = 0; + groupchats[i].type = type; groupchats[i].start_time = get_unix_time(); groupchats[i].peer_names = malloc(sizeof(uint8_t) * TOX_MAX_NAME_LENGTH); diff --git a/src/groupchat.h b/src/groupchat.h index 7d3333d..afa78c0 100644 --- a/src/groupchat.h +++ b/src/groupchat.h @@ -33,6 +33,7 @@ typedef struct { int chatwin; bool active; + uint8_t type; int num_peers; int side_pos; /* current position of the sidebar - used for scrolling up and down */ uint64_t start_time; @@ -43,7 +44,7 @@ typedef struct { } GroupChat; void kill_groupchat_window(ToxWindow *self); -int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum); +int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum, uint8_t type); /* destroys and re-creates groupchat window with or without the peerlist */ void redraw_groupchat_win(ToxWindow *self); diff --git a/src/help.c b/src/help.c index bc92cc7..bba09d2 100644 --- a/src/help.c +++ b/src/help.c @@ -146,7 +146,7 @@ static void help_draw_global(ToxWindow *self) wprintw(win, " /note : Set a personal note\n"); wprintw(win, " /nick : Set your nickname\n"); wprintw(win, " /log or : Enable/disable logging\n"); - wprintw(win, " /groupchat : Create a group chat\n"); + wprintw(win, " /group : Create a group chat where type: text | audio\n"); wprintw(win, " /myid : Print your Tox ID\n"); wprintw(win, " /clear : Clear window history\n"); wprintw(win, " /close : Close the current chat window\n"); diff --git a/src/prompt.c b/src/prompt.c index 993a064..2314770 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -58,7 +58,7 @@ const char glob_cmd_list[AC_NUM_GLOB_COMMANDS][MAX_CMDNAME_SIZE] = { { "/connect" }, { "/decline" }, { "/exit" }, - { "/groupchat" }, + { "/group" }, { "/help" }, { "/log" }, { "/myid" },