/** * @brief Get the names of the peers of a group */ QList<QString> Core::getGroupPeerNames(int groupId) const { if (!tox) { qWarning() << "Can't get group peer names, tox is null"; return {}; } uint32_t nPeers = getGroupNumberPeers(groupId); if (nPeers == std::numeric_limits<uint32_t>::max()) { qWarning() << "getGroupPeerNames: Unable to get number of peers"; return {}; } // TODO: Change to std::vector std::unique_ptr<uint8_t[][TOX_MAX_NAME_LENGTH]> namesArray{ new uint8_t[nPeers][TOX_MAX_NAME_LENGTH]}; std::unique_ptr<uint16_t[]> lengths{new uint16_t[nPeers]}; TOX_ERR_CONFERENCE_PEER_QUERY error; uint32_t count = tox_conference_peer_count(tox, groupId, &error); if (!parsePeerQueryError(error)) { return {}; } if (count != nPeers) { qWarning() << "getGroupPeerNames: Unexpected peer count"; return {}; } QList<QString> names; for (uint32_t i = 0; i < nPeers; ++i) { lengths[i] = tox_conference_peer_get_name_size(tox, groupId, i, &error); bool ok = tox_conference_peer_get_name(tox, groupId, i, namesArray[i], &error); if (parsePeerQueryError(error) && ok) { names.push_back(CString::toString(namesArray[i], lengths[i])); } } return names; }
/** * @brief Get the name of a peer of a group */ QString Core::getGroupPeerName(int groupId, int peerId) const { uint8_t nameArray[TOX_MAX_NAME_LENGTH]; TOX_ERR_CONFERENCE_PEER_QUERY error; size_t length = tox_conference_peer_get_name_size(tox, groupId, peerId, &error); if (!parsePeerQueryError(error)) { return QString{}; } bool success = tox_conference_peer_get_name(tox, groupId, peerId, nameArray, &error); if (!parsePeerQueryError(error) || !success) { qWarning() << "getGroupPeerName: Unknown error"; return QString{}; } return ToxString(nameArray, length).getQString(); }
/** * @brief Get number of peers in the conference. * @return The number of peers in the conference. UINT32_MAX on failure. */ uint32_t Core::getGroupNumberPeers(int groupId) const { TOX_ERR_CONFERENCE_PEER_QUERY error; uint32_t count = tox_conference_peer_count(tox, groupId, &error); if (!parsePeerQueryError(error)) { return std::numeric_limits<uint32_t>::max(); } return count; }
/** * @brief Get the public key of a peer of a group */ ToxPk Core::getGroupPeerPk(int groupId, int peerId) const { uint8_t friendPk[TOX_PUBLIC_KEY_SIZE] = {0x00}; TOX_ERR_CONFERENCE_PEER_QUERY error; bool success = tox_conference_peer_get_public_key(tox, groupId, peerId, friendPk, &error); if (!parsePeerQueryError(error) || !success) { qWarning() << "getGroupPeerToxId: Unknown error"; return ToxPk{}; } return ToxPk(friendPk); }
/** * @brief Get the names of the peers of a group */ QStringList Core::getGroupPeerNames(int groupId) const { if (!tox) { qWarning() << "Can't get group peer names, tox is null"; return {}; } uint32_t nPeers = getGroupNumberPeers(groupId); if (nPeers == std::numeric_limits<uint32_t>::max()) { qWarning() << "getGroupPeerNames: Unable to get number of peers"; return {}; } TOX_ERR_CONFERENCE_PEER_QUERY error; uint32_t count = tox_conference_peer_count(tox, groupId, &error); if (!parsePeerQueryError(error)) { return {}; } if (count != nPeers) { qWarning() << "getGroupPeerNames: Unexpected peer count"; return {}; } QStringList names; for (uint32_t i = 0; i < nPeers; ++i) { uint8_t name[TOX_MAX_NAME_LENGTH] = {0}; size_t length = tox_conference_peer_get_name_size(tox, groupId, i, &error); bool ok = tox_conference_peer_get_name(tox, groupId, i, name, &error); if (ok && parsePeerQueryError(error)) { names.append(ToxString(name, length).getQString()); } } return names; }