/** * @brief Quit a groupchat */ void Core::quitGroupChat(int groupId) const { TOX_ERR_CONFERENCE_DELETE error; tox_conference_delete(tox, groupId, &error); switch (error) { case TOX_ERR_CONFERENCE_DELETE_OK: return; case TOX_ERR_CONFERENCE_DELETE_CONFERENCE_NOT_FOUND: qCritical() << "Conference not found"; return; default: return; } }
static void cmd_leave(Tox *m, uint32_t friendnum, int argc, char (*argv)[MAX_COMMAND_LENGTH]) { const char *outmsg = NULL; if (!friend_is_master(m, friendnum)) { authent_failed(m, friendnum); return; } if (argc < 1) { outmsg = "Error: Group number required"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } int groupnum = atoi(argv[1]); if (groupnum == 0 && strcmp(argv[1], "0")) { outmsg = "Error: Invalid group number"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } if (!tox_conference_delete(m, groupnum, NULL)) { outmsg = "Error: Invalid group number"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } char msg[MAX_COMMAND_LENGTH]; char name[TOX_MAX_NAME_LENGTH]; tox_friend_get_name(m, friendnum, (uint8_t *) name, NULL); size_t len = tox_friend_get_name_size(m, friendnum, NULL); name[len] = '\0'; group_leave(groupnum); printf("Left group %d (%s)\n", groupnum, name); snprintf(msg, sizeof(msg), "Left group %d", groupnum); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) msg, strlen(msg), NULL); }
void Core::removeGroup(int groupId, bool fake) { if (!isReady() || fake) { return; } TOX_ERR_CONFERENCE_DELETE error; bool success = tox_conference_delete(tox, groupId, &error); if (success && error == TOX_ERR_CONFERENCE_DELETE_OK) { av->leaveGroupCall(groupId); return; } qCritical() << "Fail of tox_conference_delete"; switch (error) { case TOX_ERR_CONFERENCE_DELETE_CONFERENCE_NOT_FOUND: qCritical() << "Conference not found"; break; default: break; } }
void cmd_join_group(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]) { if (get_num_active_windows() >= MAX_WINDOWS_NUM) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, RED, " * Warning: Too many windows are open."); return; } 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; } if (type != TOX_CONFERENCE_TYPE_TEXT) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Toxic does not support audio groups."); return; } TOX_ERR_CONFERENCE_JOIN err; uint32_t groupnum = tox_conference_join(m, self->num, (uint8_t *) groupkey, length, &err); if (err != TOX_ERR_CONFERENCE_JOIN_OK) { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat instance failed to initialize (error %d)", err); return; } 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_conference_delete(m, groupnum, NULL); return; } }
static void cmd_group(Tox *m, uint32_t friendnum, int argc, char (*argv)[MAX_COMMAND_LENGTH]) { const char *outmsg = NULL; if (argc < 1) { outmsg = "Please specify the group type: audio or text"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } uint8_t type = TOX_CONFERENCE_TYPE_AV ? !strcasecmp(argv[1], "audio") : TOX_CONFERENCE_TYPE_TEXT; char name[TOX_MAX_NAME_LENGTH]; tox_friend_get_name(m, friendnum, (uint8_t *) name, NULL); size_t len = tox_friend_get_name_size(m, friendnum, NULL); name[len] = '\0'; int groupnum = -1; if (type == TOX_CONFERENCE_TYPE_TEXT) { TOX_ERR_CONFERENCE_NEW err; groupnum = tox_conference_new(m, &err); if (err != TOX_ERR_CONFERENCE_NEW_OK) { printf("Group chat creation by %s failed to initialize\n", name); outmsg = "Group chat instance failed to initialize."; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } } else if (type == TOX_CONFERENCE_TYPE_AV) { groupnum = toxav_add_av_groupchat(m, NULL, NULL); if (groupnum == -1) { printf("Group chat creation by %s failed to initialize\n", name); outmsg = "Group chat instance failed to initialize."; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } } const char *password = argc >= 2 ? argv[2] : NULL; if (password && strlen(argv[2]) >= MAX_PASSWORD_SIZE) { printf("Group chat creation by %s failed: Password too long\n", name); outmsg = "Group chat instance failed to initialize: Password too long"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); return; } if (group_add(groupnum, type, password) == -1) { printf("Group chat creation by %s failed\n", name); outmsg = "Group chat creation failed"; tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); tox_conference_delete(m, groupnum, NULL); return; } const char *pw = password ? " (Password protected)" : ""; printf("Group chat %d created by %s%s\n", groupnum, name, pw); char msg[MAX_COMMAND_LENGTH]; snprintf(msg, sizeof(msg), "Group chat %d created%s", groupnum, pw); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) msg, strlen(msg), NULL); }