From 7678abff5848d346d700665c65de0450c7e88aa1 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 19 Feb 2018 01:04:51 +0100
Subject: [PATCH] Properly handle mIRC colors in topics and realnames

---
 .../ui/chat/BufferListAdapter.kt              |  2 +-
 .../ui/chat/BufferViewConfigFragment.kt       | 18 +++++++++++++--
 .../ui/chat/NickListAdapter.kt                |  2 +-
 .../ui/chat/NickListFragment.kt               | 12 +++++++++-
 .../ui/chat/ToolbarFragment.kt                | 22 +++++++++++++++----
 5 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt
index eb30ab38c..86133ccac 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt
@@ -142,7 +142,7 @@ class BufferListAdapter(
     val info: BufferInfo,
     val network: INetwork.NetworkInfo,
     val bufferStatus: BufferStatus,
-    val description: String,
+    val description: CharSequence,
     val activity: Buffer_Activity,
     val highlights: Int = 0
   )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt
index f35587207..026c7b1da 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt
@@ -19,11 +19,13 @@ import de.kuschku.libquassel.session.SessionManager
 import de.kuschku.libquassel.util.and
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
 import de.kuschku.quasseldroid_ng.util.helper.map
 import de.kuschku.quasseldroid_ng.util.helper.or
 import de.kuschku.quasseldroid_ng.util.helper.switchMap
 import de.kuschku.quasseldroid_ng.util.helper.switchMapRx
+import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
 import io.reactivex.Observable
 import java.util.concurrent.TimeUnit
@@ -72,6 +74,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     }
   }
 
+  val ircFormatDeserializer = IrcFormatDeserializer(context!!)
+  val renderingSettings = RenderingSettings(
+    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+    colorizeMirc = true,
+    timeFormat = ""
+  )
+
   private val adapter = BufferViewConfigAdapter(this, bufferViewConfigs)
 
   private val bufferIdList = selectedBufferViewConfig.switchMapRx(BufferViewConfig::live_buffers)
@@ -124,7 +134,9 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
                                   away                 -> BufferListAdapter.BufferStatus.AWAY
                                   else                 -> BufferListAdapter.BufferStatus.ONLINE
                                 },
-                                description = realName,
+                                description = ircFormatDeserializer.formatString(
+                                  realName, renderingSettings.colorizeMirc
+                                ),
                                 activity = activity
                               )
                             }
@@ -143,7 +155,9 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
                                 IrcChannel.NULL -> BufferListAdapter.BufferStatus.OFFLINE
                                 else            -> BufferListAdapter.BufferStatus.ONLINE
                               },
-                              description = topic,
+                              description = ircFormatDeserializer.formatString(
+                                topic, renderingSettings.colorizeMirc
+                              ),
                               activity = activity
                             )
                           }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListAdapter.kt
index 9b17073fb..d0cbd6982 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListAdapter.kt
@@ -81,7 +81,7 @@ class NickListAdapter(
     val nick: String,
     val modes: String,
     val lowestMode: Int,
-    val realname: String,
+    val realname: CharSequence,
     val away: Boolean,
     val networkCasemapping: String
   )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
index acbecda60..5ada6fa5b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
@@ -17,10 +17,12 @@ import de.kuschku.libquassel.session.Backend
 import de.kuschku.libquassel.session.SessionManager
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
 import de.kuschku.quasseldroid_ng.util.helper.map
 import de.kuschku.quasseldroid_ng.util.helper.switchMap
 import de.kuschku.quasseldroid_ng.util.helper.switchMapRx
+import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
 import io.reactivex.Observable
 import io.reactivex.Observable.zip
@@ -32,6 +34,14 @@ class NickListFragment : ServiceBoundFragment() {
   @BindView(R.id.nickList)
   lateinit var nickList: RecyclerView
 
+  val ircFormatDeserializer = IrcFormatDeserializer(context!!)
+  val renderingSettings = RenderingSettings(
+    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+    colorizeMirc = true,
+    timeFormat = ""
+  )
+
   val currentBuffer: MutableLiveData<LiveData<BufferId?>?> = MutableLiveData()
   val buffer = currentBuffer.switchMap { it }
 
@@ -64,7 +74,7 @@ class NickListFragment : ServiceBoundFragment() {
                   user.nick(),
                   network.modesToPrefixes(userModes),
                   lowestMode,
-                  realName,
+                  ircFormatDeserializer.formatString(realName, renderingSettings.colorizeMirc),
                   away,
                   network.support("CASEMAPPING")
                 )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
index 61b8f123b..235822264 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
@@ -19,7 +19,9 @@ import de.kuschku.libquassel.session.SessionManager
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.ui.settings.data.DisplaySettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
 import de.kuschku.quasseldroid_ng.util.helper.*
+import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
 import io.reactivex.Observable
 
@@ -43,6 +45,14 @@ class ToolbarFragment : ServiceBoundFragment() {
     showLag = true
   )
 
+  val ircFormatDeserializer = IrcFormatDeserializer(context!!)
+  val renderingSettings = RenderingSettings(
+    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+    colorizeMirc = true,
+    timeFormat = ""
+  )
+
   private val bufferData: LiveData<BufferData?> = sessionManager.switchMap { manager ->
     buffer.switchMapRx { id ->
       manager.session.switchMap {
@@ -71,7 +81,9 @@ class ToolbarFragment : ServiceBoundFragment() {
                       BufferData(
                         info = info,
                         network = network.networkInfo(),
-                        description = realName
+                        description = ircFormatDeserializer.formatString(
+                          realName, renderingSettings.colorizeMirc
+                        )
                       )
                     }
                   }
@@ -84,7 +96,9 @@ class ToolbarFragment : ServiceBoundFragment() {
                       BufferData(
                         info = info,
                         network = network.networkInfo(),
-                        description = topic
+                        description = ircFormatDeserializer.formatString(
+                          topic, renderingSettings.colorizeMirc
+                        )
                       )
                     }
                   }
@@ -163,7 +177,7 @@ class ToolbarFragment : ServiceBoundFragment() {
           if (description.isNullOrBlank()) {
             this.subtitle = "Lag: ${lag}ms"
           } else {
-            this.subtitle = "Lag: ${lag}ms ${description}"
+            this.subtitle = "Lag: ${lag}ms | $description"
           }
         }
       }
@@ -176,7 +190,7 @@ class ToolbarFragment : ServiceBoundFragment() {
   data class BufferData(
     val info: BufferInfo? = null,
     val network: INetwork.NetworkInfo? = null,
-    val description: String? = null
+    val description: CharSequence? = null
   )
 
 }
\ No newline at end of file
-- 
GitLab