Procházet zdrojové kódy

Make /me send \x01ACTION message

kiwec před 4 měsíci
rodič
revize
6178936a50
2 změnil soubory, kde provedl 14 přidání a 7 odebrání
  1. 1 1
      src/App/Osu/Changelog.cpp
  2. 13 6
      src/App/Osu/Chat.cpp

+ 1 - 1
src/App/Osu/Changelog.cpp

@@ -29,7 +29,7 @@ Changelog::Changelog() : ScreenBackable() {
     CHANGELOG latest;
     latest.title =
         UString::format("%.2f (%s, %s)", convar->getConVarByName("osu_version")->getFloat(), __DATE__, __TIME__);
-    latest.changes.push_back("- Chat: added support for \"action\" text (eg. /me)");
+    latest.changes.push_back("- Chat: added support for /me command");
     latest.changes.push_back("- Chat: added support for links");
     changelogs.push_back(latest);
 

+ 13 - 6
src/App/Osu/Chat.cpp

@@ -67,7 +67,6 @@ void ChatChannel::add_message(ChatMessage msg) {
         if(msg.text.endsWith("\001")) {
             msg.text.erase(msg.text.length() - 1, 1);
         }
-        msg.text.append("*");
     }
 
     struct tm *tm = localtime(&msg.tms);
@@ -124,8 +123,13 @@ void ChatChannel::add_message(ChatMessage msg) {
         text_idx = url_start + url_length;
         search_start = msg_text.cbegin() + text_idx;
     }
+    if(is_action) {
+        // Only appending now to prevent this character from being included in a link
+        msg.text.append(L"*");
+        msg_text.append(L"*");
+    }
     if(search_start != msg_text.cend()) {
-        auto text = msg.text.substr(search_start - msg_text.cbegin());
+        auto text = msg.text.substr(text_idx);
         text_fragments.push_back(new CBaseUILabel(0, 0, 0, 0, "", text));
     }
 
@@ -141,7 +145,6 @@ void ChatChannel::add_message(ChatMessage msg) {
             if(line_width + char_width + 20 >= m_chat->getSize().x) {
                 ChatLink *link_fragment = dynamic_cast<ChatLink *>(fragment);
                 if(link_fragment == NULL) {
-                    debugLog("New text fragment: %s\n", text_str.toUtf8());
                     CBaseUILabel *text = new CBaseUILabel(x, y_total, line_width, line_height, "", text_str);
                     text->setDrawFrame(false);
                     text->setDrawBackground(false);
@@ -150,7 +153,6 @@ void ChatChannel::add_message(ChatMessage msg) {
                     }
                     ui->getContainer()->addBaseUIElement(text);
                 } else {
-                    debugLog("New link fragment: %s\n", text_str.toUtf8());
                     ChatLink *link = new ChatLink(x, y_total, line_width, line_height, fragment->getName(), text_str);
                     ui->getContainer()->addBaseUIElement(link);
                 }
@@ -167,7 +169,6 @@ void ChatChannel::add_message(ChatMessage msg) {
 
         ChatLink *link_fragment = dynamic_cast<ChatLink *>(fragment);
         if(link_fragment == NULL) {
-            debugLog("New text fragment: %s\n", text_str.toUtf8());
             CBaseUILabel *text = new CBaseUILabel(x, y_total, line_width, line_height, "", text_str);
             text->setDrawFrame(false);
             text->setDrawBackground(false);
@@ -176,7 +177,6 @@ void ChatChannel::add_message(ChatMessage msg) {
             }
             ui->getContainer()->addBaseUIElement(text);
         } else {
-            debugLog("New link fragment: %s\n", text_str.toUtf8());
             ChatLink *link = new ChatLink(x, y_total, line_width, line_height, fragment->getName(), text_str);
             ui->getContainer()->addBaseUIElement(link);
         }
@@ -309,6 +309,13 @@ void Chat::onKeyDown(KeyboardEvent &key) {
                 return;
             }
 
+            if(m_input_box->getText().startsWith("/me ")) {
+                auto new_text = m_input_box->getText().substr(3);
+                new_text.insert(0, "\001ACTION");
+                new_text.append("\001");
+                m_input_box->setText(new_text);
+            }
+
             Packet packet;
             packet.id = m_selected_channel->name[0] == '#' ? SEND_PUBLIC_MESSAGE : SEND_PRIVATE_MESSAGE;
             write_string(&packet, (char *)bancho.username.toUtf8());