diff --git a/CMakeLists.txt b/CMakeLists.txt index 76017f7..4f9a752 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ ****************************************************************************]] 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) include(GNUInstallDirs) diff --git a/README.md b/README.md index 79e1ebc..3dc7d27 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,14 @@ Open Source Discord Translation Bot #### Build Dependencies - CMake 3.16 or newer - Compiler with C++17 Support -- curl - [D++: A C++ Discord API Library for Bots](https://dpp.dev/) +- [libcurl](https://curl.se/libcurl) #### Supported Translation Engines - [LibreTranslate](https://libretranslate.com/) (Default) +- [DeepL](https://deepl.com/) (Recommended) - [Lingva Translate](https://lingva.ml/) - [Mozhi](https://codeberg.org/aryak/mozhi) -- [DeepL](https://deepl.com/) #### Build dtranslatebot @@ -29,4 +29,5 @@ sudo cmake --install dtranslatebot-build ##### Optional CMake flags `-DWITH_BOOST=TRUE` `-DWITH_DPP_STATIC_BUNDLE=TRUE` +`-DWITH_GUI=TRUE` `-DWITH_SYSTEMD=TRUE` diff --git a/src/gui/user_interface.cpp b/src/gui/user_interface.cpp index ade5ef6..ff30701 100644 --- a/src/gui/user_interface.cpp +++ b/src/gui/user_interface.cpp @@ -31,8 +31,6 @@ #include "user_interface.h" using namespace bot::gui; -const char* translators[] = {"stub", "libretranslate", "lingvatranslate", "mozhi", "deepl"}; - user_interface::user_interface() { set_title("dtranslatebot"); @@ -60,7 +58,8 @@ user_interface::user_interface() auto translator_label = Gtk::make_managed("Translator:"); 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(translator_list); m_translator_dropdown->property_selected().signal_changed().connect(sigc::mem_fun(*this, &user_interface::on_translator_dropdown_changed)); translator_box->append(*m_translator_dropdown); @@ -107,8 +106,8 @@ user_interface::user_interface() m_token_entry->set_text(token); const std::string translator = m_user_config.get_translator(); - for (guint i = 0; i < sizeof(translators); i++) { - if (translators[i] != translator) + for (guint i = 0; i < translator_vector.size(); i++) { + if (get_translator_name(i) != translator) continue; m_translator_dropdown->set_selected(i); break; @@ -122,6 +121,17 @@ user_interface::user_interface() set_child(*vertical_box); } +std::vector 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) { const std::lock_guard guard(m_log_buffer_mutex); m_log_buffer.append("\n[" + type + "] " + message); @@ -135,7 +145,7 @@ void user_interface::log_scroll_down() { void user_interface::run() { 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_translator(translator); m_user_config.save(); @@ -199,7 +209,7 @@ void user_interface::on_token_entry_changed() { } 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() { diff --git a/src/gui/user_interface.h b/src/gui/user_interface.h index d534569..7b368aa 100644 --- a/src/gui/user_interface.h +++ b/src/gui/user_interface.h @@ -31,6 +31,8 @@ namespace bot { class user_interface : public Gtk::Window { public: explicit user_interface(); + std::vector 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_scroll_down(); void run();