2023-10-20 21:40:45 +02:00
|
|
|
#include "./tox_ui_utils.hpp"
|
|
|
|
|
2024-06-07 10:58:42 +02:00
|
|
|
#include "./tox_client.hpp"
|
|
|
|
|
2023-11-13 13:24:48 +01:00
|
|
|
#include <tox/tox.h>
|
|
|
|
|
2024-01-14 18:50:23 +01:00
|
|
|
#include <solanaceae/util/utils.hpp>
|
2023-10-20 21:40:45 +02:00
|
|
|
|
|
|
|
#include <solanaceae/util/config_model.hpp>
|
|
|
|
|
|
|
|
#include <imgui/imgui.h>
|
|
|
|
#include <imgui/misc/cpp/imgui_stdlib.h>
|
|
|
|
|
|
|
|
ToxUIUtils::ToxUIUtils(
|
2024-06-07 10:58:42 +02:00
|
|
|
ToxClient& tc,
|
2023-10-20 21:40:45 +02:00
|
|
|
ConfigModelI& conf
|
2024-06-07 10:58:42 +02:00
|
|
|
) : _tc(tc), _conf(conf) {
|
2023-10-20 21:40:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void ToxUIUtils::render(void) {
|
|
|
|
{ // main window menubar injection
|
|
|
|
// assumes the window "tomato" was rendered already by cg
|
|
|
|
if (ImGui::Begin("tomato")) {
|
|
|
|
if (ImGui::BeginMenuBar()) {
|
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::BeginMenu("Tox")) {
|
2023-11-13 16:23:49 +01:00
|
|
|
ImGui::SeparatorText("Friends/Groups");
|
|
|
|
|
2023-10-20 21:40:45 +02:00
|
|
|
if (ImGui::MenuItem("add Friend by ID")) {
|
|
|
|
_show_add_friend_window = true;
|
|
|
|
}
|
2024-06-17 15:19:55 +02:00
|
|
|
if (ImGui::MenuItem("copy own ToxID")) {
|
|
|
|
ImGui::SetClipboardText(_tc.toxSelfGetAddressStr().c_str());
|
|
|
|
}
|
2023-10-20 21:40:45 +02:00
|
|
|
if (ImGui::MenuItem("join Group by ID (ngc)")) {
|
|
|
|
_show_add_group_window = true;
|
|
|
|
}
|
2024-06-07 10:58:42 +02:00
|
|
|
|
|
|
|
ImGui::SeparatorText("DHT");
|
|
|
|
|
|
|
|
if (ImGui::MenuItem("rerun bootstrap")) {
|
|
|
|
_tc.runBootstrap();
|
|
|
|
}
|
|
|
|
|
2023-10-20 21:40:45 +02:00
|
|
|
ImGui::EndMenu();
|
|
|
|
}
|
|
|
|
ImGui::EndMenuBar();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
ImGui::End();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_show_add_friend_window) {
|
|
|
|
if (ImGui::Begin("Tox add Friend", &_show_add_friend_window)) {
|
|
|
|
static char tox_id[TOX_ADDRESS_SIZE*2+1] = {};
|
|
|
|
ImGui::InputText("Tox ID", tox_id, TOX_ADDRESS_SIZE*2+1);
|
|
|
|
|
|
|
|
static std::string message = "Add me, I'm tomat";
|
|
|
|
ImGui::InputText("message", &message);
|
|
|
|
|
|
|
|
static Tox_Err_Friend_Add err = Tox_Err_Friend_Add::TOX_ERR_FRIEND_ADD_OK;
|
|
|
|
if (ImGui::Button("add")) {
|
|
|
|
// TODO: add string_view variant to utils
|
2024-06-07 10:58:42 +02:00
|
|
|
auto [_, err_r] = _tc.toxFriendAdd(hex2bin(std::string{tox_id}), message);
|
2023-10-20 21:40:45 +02:00
|
|
|
err = err_r;
|
|
|
|
}
|
|
|
|
if (err != Tox_Err_Friend_Add::TOX_ERR_FRIEND_ADD_OK) {
|
|
|
|
ImGui::SameLine();
|
|
|
|
ImGui::Text("error adding friend (code: %d)", err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::End();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_show_add_group_window) {
|
|
|
|
if (ImGui::Begin("Tox join Group", &_show_add_group_window)) {
|
|
|
|
ImGui::TextDisabled("NGC refers to the New DHT enabled Group Chats.");
|
|
|
|
ImGui::TextDisabled("Connecting via ID might take a very long time.");
|
|
|
|
|
|
|
|
static char chat_id[TOX_GROUP_CHAT_ID_SIZE*2+1] = {};
|
|
|
|
ImGui::InputText("chat ID", chat_id, TOX_GROUP_CHAT_ID_SIZE*2+1);
|
|
|
|
|
|
|
|
static std::string self_name = _conf.get_string("tox", "name").value_or("default_tomato");
|
|
|
|
ImGui::InputText("name to join with", &self_name);
|
|
|
|
|
|
|
|
static std::string password;
|
|
|
|
ImGui::InputText("password to join with", &password);
|
|
|
|
|
|
|
|
static Tox_Err_Group_Join err = Tox_Err_Group_Join::TOX_ERR_GROUP_JOIN_OK;
|
|
|
|
if (ImGui::Button("join")) {
|
2024-06-07 10:58:42 +02:00
|
|
|
auto [_, err_r] = _tc.toxGroupJoin(
|
2023-10-20 21:40:45 +02:00
|
|
|
hex2bin(std::string{chat_id}), // TODO: add string_view variant to utils
|
|
|
|
self_name,
|
|
|
|
password
|
|
|
|
);
|
|
|
|
err = err_r;
|
|
|
|
|
|
|
|
{ // reset everything
|
|
|
|
for (size_t i = 0; i < sizeof(chat_id); i++) {
|
|
|
|
chat_id[i] = '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
self_name = _conf.get_string("tox", "name").value_or("default_tomato");
|
|
|
|
|
|
|
|
for (size_t i = 0; i < password.size(); i++) {
|
|
|
|
password.at(i) = '\0';
|
|
|
|
}
|
|
|
|
password.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (err != Tox_Err_Group_Join::TOX_ERR_GROUP_JOIN_OK) {
|
|
|
|
ImGui::SameLine();
|
|
|
|
ImGui::Text("error joining group (code: %d)", err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::End();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|