diff --git a/solanaceae/core/tox_default_impl.cpp b/solanaceae/core/tox_default_impl.cpp index 76f1f6f..e5b5362 100644 --- a/solanaceae/core/tox_default_impl.cpp +++ b/solanaceae/core/tox_default_impl.cpp @@ -107,6 +107,17 @@ bool ToxDefaultImpl::toxFriendExists(uint32_t friend_number) { return tox_friend_exists(_tox, friend_number); } +size_t ToxDefaultImpl::toxSelfGetFriendListSize(void) { + return tox_self_get_friend_list_size(_tox); +} + +std::vector ToxDefaultImpl::toxSelfGetFriendList(void) { + std::vector friend_list; + friend_list.resize(tox_self_get_friend_list_size(_tox)); + tox_self_get_friend_list(_tox, friend_list.data()); + return friend_list; +} + std::optional> ToxDefaultImpl::toxFriendGetPublicKey(uint32_t friend_number) { std::vector pub(TOX_PUBLIC_KEY_SIZE); Tox_Err_Friend_Get_Public_Key err = TOX_ERR_FRIEND_GET_PUBLIC_KEY_OK; @@ -511,6 +522,26 @@ std::optional> ToxDefaultImpl::toxGroupGetChatId(uint32_t g } } +size_t ToxDefaultImpl::toxGroupGetNumberGroups(void) { + return tox_group_get_number_groups(_tox); +} + +std::vector ToxDefaultImpl::toxGroupGetList(void) { + std::vector group_list; + + size_t group_count = tox_group_get_number_groups(_tox); + // HACK: we guess number until we have count + for (uint32_t i = 0; i < group_count + 10'000u && group_list.size() < group_count; i++) { + Tox_Err_Group_Self_Query err = TOX_ERR_GROUP_SELF_QUERY_OK; + tox_group_self_get_peer_id(_tox, i, &err); + if (err == TOX_ERR_GROUP_SELF_QUERY_OK) { + group_list.push_back(i); + } + } + + return group_list; +} + std::tuple, Tox_Err_Group_Send_Message> ToxDefaultImpl::toxGroupSendMessage(uint32_t group_number, Tox_Message_Type type, std::string_view message) { Tox_Err_Group_Send_Message err = TOX_ERR_GROUP_SEND_MESSAGE_OK; uint32_t message_id = 0; diff --git a/solanaceae/core/tox_default_impl.hpp b/solanaceae/core/tox_default_impl.hpp index 0098bc9..7964b6f 100644 --- a/solanaceae/core/tox_default_impl.hpp +++ b/solanaceae/core/tox_default_impl.hpp @@ -32,6 +32,8 @@ struct ToxDefaultImpl : public ToxI { Tox_Err_Friend_Delete toxFriendDelete(uint32_t friend_number) override; std::tuple, Tox_Err_Friend_By_Public_Key> toxFriendByPublicKey(const std::vector& public_key) override; bool toxFriendExists(uint32_t friend_number) override; + size_t toxSelfGetFriendListSize(void) override; + std::vector toxSelfGetFriendList(void) override; std::optional> toxFriendGetPublicKey(uint32_t friend_number) override; std::optional toxFriendGetLastOnline(uint32_t friend_number) override; std::optional toxFriendGetName(uint32_t friend_number) override; @@ -90,7 +92,8 @@ struct ToxDefaultImpl : public ToxI { std::optional> toxGroupGetChatId(uint32_t group_number) override; // TODO: str - //virtual uint32_t toxGroupGetNumberGroups(void) = 0; + size_t toxGroupGetNumberGroups(void) override; + std::vector toxGroupGetList(void) override; //virtual Tox_Group_Privacy_State toxGroupGetPrivacyState(uint32_t group_number, Tox_Err_Group_State_Queries *error) = 0; //virtual Tox_Group_Voice_State toxGroupGetVoiceState(uint32_t group_number, Tox_Err_Group_State_Queries *error) = 0; diff --git a/solanaceae/core/tox_interface.hpp b/solanaceae/core/tox_interface.hpp index 74d7b96..65ea88e 100644 --- a/solanaceae/core/tox_interface.hpp +++ b/solanaceae/core/tox_interface.hpp @@ -48,7 +48,8 @@ struct ToxI_raw { virtual Tox_Err_Friend_Delete toxFriendDelete(uint32_t friend_number) = 0; virtual std::tuple, Tox_Err_Friend_By_Public_Key> toxFriendByPublicKey(const std::vector& public_key) = 0; virtual bool toxFriendExists(uint32_t friend_number) = 0; - // tox_self_get_friend_list + virtual size_t toxSelfGetFriendListSize(void) = 0; + virtual std::vector toxSelfGetFriendList(void) = 0; virtual std::optional> toxFriendGetPublicKey(uint32_t friend_number) = 0; virtual std::optional toxFriendGetLastOnline(uint32_t friend_number) = 0; virtual std::optional toxFriendGetName(uint32_t friend_number) = 0; @@ -134,6 +135,8 @@ struct ToxI_raw { // TODO: str //virtual uint32_t toxGroupGetNumberGroups(void) = 0; + virtual size_t toxGroupGetNumberGroups(void) = 0; + virtual std::vector toxGroupGetList(void) = 0; //virtual Tox_Group_Privacy_State toxGroupGetPrivacyState(uint32_t group_number, Tox_Err_Group_State_Queries *error) = 0; //virtual Tox_Group_Voice_State toxGroupGetVoiceState(uint32_t group_number, Tox_Err_Group_State_Queries *error) = 0;