From aaf6ab7ba30ddd4bf5db861535d2e86f3061328f Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 25 Feb 2018 14:31:05 +0100
Subject: [PATCH] Fix an issue with alias expansion

---
 .../kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt   |  9 +++++++--
 .../util/irc/format/IrcFormatSerializer.kt            |  8 ++++++--
 .../libquassel/quassel/syncables/AliasManager.kt      | 11 ++++++-----
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
index eff975c0c..a981cdd53 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
@@ -24,6 +24,7 @@ import com.afollestad.materialdialogs.MaterialDialog
 import com.sothree.slidinguppanel.SlidingUpPanelLayout
 import de.kuschku.libquassel.protocol.Message
 import de.kuschku.libquassel.protocol.Message_Type
+import de.kuschku.libquassel.quassel.syncables.interfaces.IAliasManager
 import de.kuschku.libquassel.session.ConnectionState
 import de.kuschku.libquassel.util.and
 import de.kuschku.libquassel.util.or
@@ -169,9 +170,13 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       viewModel.session { session ->
         viewModel.getBuffer().let { bufferId ->
           session.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
-            session.rpcHandler?.sendInput(
-              bufferInfo, ircFormatSerializer.toEscapeCodes(text)
+            val output = mutableListOf<IAliasManager.Command>()
+            session.aliasManager?.processInput(
+              bufferInfo, ircFormatSerializer.toEscapeCodes(text), output
             )
+            for (command in output) {
+              session.rpcHandler?.sendInput(command.buffer, command.message)
+            }
           }
         }
       }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatSerializer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatSerializer.kt
index c2b7ddf99..294c09789 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatSerializer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatSerializer.kt
@@ -104,6 +104,10 @@ class IrcFormatSerializer internal constructor(private val context: Context) {
       }
     }
 
+    fun writeReset() {
+      out.append(CODE_RESET)
+    }
+
     var next: Int
     var foreground: Int? = null
     var background: Int? = null
@@ -195,8 +199,8 @@ class IrcFormatSerializer internal constructor(private val context: Context) {
       i = next
     }
 
-    if (bold || italic || underline || background != -1 || foreground != -1)
-      out.append(CODE_RESET)
+    if (bold || italic || underline || background != null || foreground != null)
+      writeReset()
   }
 
   companion object {
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
index 33ac5d95e..6774b96f1 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
@@ -89,11 +89,12 @@ class AliasManager constructor(
     } else {
       // check for aliases
       val split = msg.split(' ', ignoreCase = true, limit = 2)
-      val search: String = split.firstOrNull()
-                           ?: return
-      val found = _aliases.firstOrNull { it.name.equals(search, true) }
-                  ?: return
-      expand(found.expansion, info, split.getOrNull(1) ?: "", previousCommands)
+      val search: String? = split.firstOrNull()
+      if (search != null) {
+        val found = _aliases.firstOrNull { it.name.equals(search, true) }
+        if (found != null)
+          expand(found.expansion, info, split.getOrNull(1) ?: "", previousCommands)
+      }
     }
 
     previousCommands.add(IAliasManager.Command(info, msg))
-- 
GitLab