user_interface: add get_translator() and get_translator_name() functions

- CMakeLists.txt: upgrade cmake_policy to version 4.3
- README.md: add missing WITH_GUI flag and recommend DeepL
This commit is contained in:
Syping 2026-04-20 15:11:48 +02:00
parent 2d3f3cc365
commit 823a60d64d
4 changed files with 23 additions and 10 deletions

View file

@ -17,7 +17,7 @@
****************************************************************************]] ****************************************************************************]]
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
cmake_policy(VERSION 3.16...3.27) cmake_policy(VERSION 3.16...4.3)
project(dtranslatebot VERSION 0.4.0 LANGUAGES CXX) project(dtranslatebot VERSION 0.4.0 LANGUAGES CXX)
include(GNUInstallDirs) include(GNUInstallDirs)

View file

@ -8,14 +8,14 @@ Open Source Discord Translation Bot
#### Build Dependencies #### Build Dependencies
- CMake 3.16 or newer - CMake 3.16 or newer
- Compiler with C++17 Support - Compiler with C++17 Support
- curl
- [D++: A C++ Discord API Library for Bots](https://dpp.dev/) - [D++: A C++ Discord API Library for Bots](https://dpp.dev/)
- [libcurl](https://curl.se/libcurl)
#### Supported Translation Engines #### Supported Translation Engines
- [LibreTranslate](https://libretranslate.com/) (Default) - [LibreTranslate](https://libretranslate.com/) (Default)
- [DeepL](https://deepl.com/) (Recommended)
- [Lingva Translate](https://lingva.ml/) - [Lingva Translate](https://lingva.ml/)
- [Mozhi](https://codeberg.org/aryak/mozhi) - [Mozhi](https://codeberg.org/aryak/mozhi)
- [DeepL](https://deepl.com/)
#### Build dtranslatebot #### Build dtranslatebot
@ -29,4 +29,5 @@ sudo cmake --install dtranslatebot-build
##### Optional CMake flags ##### Optional CMake flags
`-DWITH_BOOST=TRUE` `-DWITH_BOOST=TRUE`
`-DWITH_DPP_STATIC_BUNDLE=TRUE` `-DWITH_DPP_STATIC_BUNDLE=TRUE`
`-DWITH_GUI=TRUE`
`-DWITH_SYSTEMD=TRUE` `-DWITH_SYSTEMD=TRUE`

View file

@ -31,8 +31,6 @@
#include "user_interface.h" #include "user_interface.h"
using namespace bot::gui; using namespace bot::gui;
const char* translators[] = {"stub", "libretranslate", "lingvatranslate", "mozhi", "deepl"};
user_interface::user_interface() user_interface::user_interface()
{ {
set_title("dtranslatebot"); set_title("dtranslatebot");
@ -60,7 +58,8 @@ user_interface::user_interface()
auto translator_label = Gtk::make_managed<Gtk::Label>("Translator:"); auto translator_label = Gtk::make_managed<Gtk::Label>("Translator:");
translator_box->append(*translator_label); translator_box->append(*translator_label);
auto translator_list = Gtk::StringList::create({"Stub", "LibreTranslate", "Lingva Translate", "Mozhi", "DeepL"}); auto translator_vector = get_translator();
auto translator_list = Gtk::StringList::create(translator_vector);
m_translator_dropdown = Gtk::make_managed<Gtk::DropDown>(translator_list); m_translator_dropdown = Gtk::make_managed<Gtk::DropDown>(translator_list);
m_translator_dropdown->property_selected().signal_changed().connect(sigc::mem_fun(*this, &user_interface::on_translator_dropdown_changed)); m_translator_dropdown->property_selected().signal_changed().connect(sigc::mem_fun(*this, &user_interface::on_translator_dropdown_changed));
translator_box->append(*m_translator_dropdown); translator_box->append(*m_translator_dropdown);
@ -107,8 +106,8 @@ user_interface::user_interface()
m_token_entry->set_text(token); m_token_entry->set_text(token);
const std::string translator = m_user_config.get_translator(); const std::string translator = m_user_config.get_translator();
for (guint i = 0; i < sizeof(translators); i++) { for (guint i = 0; i < translator_vector.size(); i++) {
if (translators[i] != translator) if (get_translator_name(i) != translator)
continue; continue;
m_translator_dropdown->set_selected(i); m_translator_dropdown->set_selected(i);
break; break;
@ -122,6 +121,17 @@ user_interface::user_interface()
set_child(*vertical_box); set_child(*vertical_box);
} }
std::vector<Glib::ustring> user_interface::get_translator() {
return {"Stub", "DeepL", "Mozhi", "LibreTranslate", "Lingva Translate"};
}
const char* user_interface::get_translator_name(guint translator_id) {
const char* translators[] = {"stub", "deepl", "mozhi", "libretranslate", "lingvatranslate"};
if (translator_id < 0 || translator_id >= sizeof(translators))
return "";
return translators[translator_id];
}
void user_interface::log_append(const std::string &message, const std::string &type, bool is_error) { void user_interface::log_append(const std::string &message, const std::string &type, bool is_error) {
const std::lock_guard<std::mutex> guard(m_log_buffer_mutex); const std::lock_guard<std::mutex> guard(m_log_buffer_mutex);
m_log_buffer.append("\n[" + type + "] " + message); m_log_buffer.append("\n[" + type + "] " + message);
@ -135,7 +145,7 @@ void user_interface::log_scroll_down() {
void user_interface::run() { void user_interface::run() {
const std::string token = m_token_entry->get_text(); const std::string token = m_token_entry->get_text();
const std::string translator = translators[m_translator_dropdown->get_selected()]; const std::string translator = get_translator_name(m_translator_dropdown->get_selected());
m_user_config.set_token(token); m_user_config.set_token(token);
m_user_config.set_translator(translator); m_user_config.set_translator(translator);
m_user_config.save(); m_user_config.save();
@ -199,7 +209,7 @@ void user_interface::on_token_entry_changed() {
} }
void user_interface::on_translator_configure_pressed() { void user_interface::on_translator_configure_pressed() {
translator_dialog::configure(*this, translators[m_translator_dropdown->get_selected()], m_user_config); translator_dialog::configure(*this, get_translator_name(m_translator_dropdown->get_selected()), m_user_config);
} }
void user_interface::on_translator_dropdown_changed() { void user_interface::on_translator_dropdown_changed() {

View file

@ -31,6 +31,8 @@ namespace bot {
class user_interface : public Gtk::Window { class user_interface : public Gtk::Window {
public: public:
explicit user_interface(); explicit user_interface();
std::vector<Glib::ustring> get_translator();
const char* get_translator_name(guint translator_id);
void log_append(const std::string &message, const std::string &type = "Log", bool is_error = false); void log_append(const std::string &message, const std::string &type = "Log", bool is_error = false);
void log_scroll_down(); void log_scroll_down();
void run(); void run();