From 4a625979b8ccb9ffc0c543cdf5fba37008226504 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Thu, 23 Sep 2010 16:56:54 +0200 Subject: Make chat translator ignore non-interesting translations (empty or same as original,) that may result from Google Translate's language autodetec failure. --- linden/indra/newview/llviewermessage.cpp | 45 +++++++++++++++++--------------- linden/indra/newview/llviewermessage.h | 2 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index bfd1045..1bab3ff 100755 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -2716,43 +2716,46 @@ void process_decline_callingcard(LLMessageSystem* msg, void**) class ChatTranslationReceiver : public LLTranslate::TranslationReceiver { public : - ChatTranslationReceiver(const std::string &fromLang, const std::string &toLang, LLChat *chat, - const BOOL history) + ChatTranslationReceiver(const std::string &fromLang, const std::string &toLang, const LLChat &chat, + const std::string &orig_mesg, const BOOL history) : LLTranslate::TranslationReceiver(fromLang, toLang), m_chat(chat), + m_origMesg(orig_mesg), m_history(history) { } - static boost::intrusive_ptr build(const std::string &fromLang, const std::string &toLang, LLChat *chat, const BOOL history) + static boost::intrusive_ptr build(const std::string &fromLang, const std::string &toLang, const LLChat &chat, const std::string &orig_mesg, const BOOL history) { - return boost::intrusive_ptr(new ChatTranslationReceiver(fromLang, toLang, chat, history)); + return boost::intrusive_ptr(new ChatTranslationReceiver(fromLang, toLang, chat, orig_mesg, history)); } protected: - void handleResponse(const std::string &translation, const std::string &detectedLanguage) + void handleResponse(const std::string &translation, const std::string &detected_language) { - if (m_toLang != detectedLanguage) - m_chat->mText += " (" + translation + ")"; - - add_floater_chat(*m_chat, m_history); + // filter out non-interesting responeses + if ( !translation.empty() + && (m_toLang != detected_language) + && (LLStringUtil::compareInsensitive(translation, m_origMesg) != 0) ) + { + m_chat.mText += " (" + translation + ")"; + } - delete m_chat; + add_floater_chat(m_chat, m_history); } void handleFailure() { LLTranslate::TranslationReceiver::handleFailure(); - m_chat->mText += " (?)"; + m_chat.mText += " (?)"; - add_floater_chat(*m_chat, m_history); - - delete m_chat; + add_floater_chat(m_chat, m_history); } private: - LLChat *m_chat; + LLChat m_chat; + std::string m_origMesg; const BOOL m_history; }; @@ -2770,9 +2773,9 @@ void add_floater_chat(const LLChat &chat, const BOOL history) } } -void check_translate_chat(const std::string &mesg, LLChat &chat, const BOOL history) +void check_translate_chat(const std::string &mesg, const LLChat &chat, const BOOL history) { - const bool translate = LLUI::sConfigGroup->getBOOL("TranslateChat"); + const bool translate = gSavedSettings.getBOOL("TranslateChat"); if (translate && chat.mSourceType != CHAT_SOURCE_SYSTEM) { @@ -2780,9 +2783,8 @@ void check_translate_chat(const std::string &mesg, LLChat &chat, const BOOL hist // SVC-4879 const std::string &fromLang = ""; const std::string &toLang = LLTranslate::getTranslateLanguage(); - LLChat *newChat = new LLChat(chat); - LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(fromLang, toLang, newChat, history); + LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(fromLang, toLang, chat, mesg, history); LLTranslate::translateMessage(result, fromLang, toLang, mesg); } else @@ -2961,8 +2963,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) std::string prefix = mesg.substr(0, 4); if (prefix == "/me " || prefix == "/me'") { - chat.mText = from_name; - chat.mText += mesg.substr(3); + const std::string spacer = mesg.substr(3,1); + mesg = mesg.substr(4); + chat.mText = from_name + spacer + mesg; ircstyle = TRUE; } else diff --git a/linden/indra/newview/llviewermessage.h b/linden/indra/newview/llviewermessage.h index 1a6c03b..11a3554 100644 --- a/linden/indra/newview/llviewermessage.h +++ b/linden/indra/newview/llviewermessage.h @@ -76,7 +76,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data); void process_chat_from_simulator(LLMessageSystem *mesgsys, void **user_data); void add_floater_chat(const LLChat &chat, const BOOL history); -void check_translate_chat(const std::string &mesg, LLChat &chat, const BOOL history); +void check_translate_chat(const std::string &mesg, const LLChat &chat, const BOOL history); //void process_agent_to_new_region(LLMessageSystem *mesgsys, void **user_data); void send_agent_update(BOOL force_send, BOOL send_reliable = FALSE); -- cgit v1.1