From 025b642c562e7b2c9ed63df495a452a6fe1b7e06 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Wed, 2 May 2018 00:13:19 +0200
Subject: [PATCH] Add extended feature for backlog filtering

Signed-off-by: Janne Koschinski <janne@kuschku.de>
---
 .../service/QuasselNotificationBackend.kt     | 73 ++++++++++---------
 .../libquassel/quassel/ExtendedFeature.kt     |  2 +
 2 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
index 588358ffc..0c14dc7e4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
@@ -24,6 +24,7 @@ import android.support.annotation.ColorInt
 import android.text.SpannableStringBuilder
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.quassel.BufferInfo
+import de.kuschku.libquassel.quassel.ExtendedFeature
 import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
 import de.kuschku.libquassel.session.NotificationManager
 import de.kuschku.libquassel.session.Session
@@ -80,43 +81,49 @@ class QuasselNotificationBackend @Inject constructor(
   }
 
   override fun init(session: Session) {
-    val buffers = session.bufferSyncer.bufferInfos()
-    for (buffer in buffers) {
-      val lastSeenId = session.bufferSyncer.lastSeenMsg(buffer.bufferId)
-      database.notifications().markRead(buffer.bufferId, lastSeenId)
+    if (session.features.negotiated.hasFeature(ExtendedFeature.BacklogFilterType)) {
+      val buffers = session.bufferSyncer.bufferInfos()
+      for (buffer in buffers) {
+        val lastSeenId = session.bufferSyncer.lastSeenMsg(buffer.bufferId)
+        database.notifications().markRead(buffer.bufferId, lastSeenId)
 
-      val level = buffer.type.let {
-        when {
-          it hasFlag Buffer_Type.QueryBuffer   -> notificationSettings.query
-          it hasFlag Buffer_Type.ChannelBuffer -> notificationSettings.channel
-          else                                 -> notificationSettings.other
+        val level = buffer.type.let {
+          when {
+            it hasFlag Buffer_Type.QueryBuffer   -> notificationSettings.query
+            it hasFlag Buffer_Type.ChannelBuffer -> notificationSettings.channel
+            else                                 -> notificationSettings.other
+          }
         }
-      }
 
-      when (level) {
-        NotificationSettings.Level.ALL       -> {
-          val activity = session.bufferSyncer.activity(buffer.bufferId)
-          if (activity.hasFlag(Message_Type.Plain) ||
-              activity.hasFlag(Message_Type.Action) ||
-              activity.hasFlag(Message_Type.Notice))
-            session.backlogManager.requestBacklogFiltered(
-              buffer.bufferId, lastSeenId, -1, 20, 0,
-              Message_Type.of(Message_Type.Plain, Message_Type.Action, Message_Type.Notice).toInt(),
-              0
-            )
-        }
-        NotificationSettings.Level.HIGHLIGHT -> {
-          val highlightCount = session.bufferSyncer.highlightCount(buffer.bufferId)
-          if (highlightCount != 0) {
-            session.backlogManager.requestBacklogFiltered(
-              buffer.bufferId, lastSeenId, -1, 20, 0,
-              Message_Type.of(Message_Type.Plain, Message_Type.Action, Message_Type.Notice).toInt(),
-              Message_Flag.of(Message_Flag.Highlight).toInt()
-            )
+        when (level) {
+          NotificationSettings.Level.ALL       -> {
+            val activity = session.bufferSyncer.activity(buffer.bufferId)
+            if (activity.hasFlag(Message_Type.Plain) ||
+                activity.hasFlag(Message_Type.Action) ||
+                activity.hasFlag(Message_Type.Notice))
+              session.backlogManager.requestBacklogFiltered(
+                buffer.bufferId, lastSeenId, -1, 20, 0,
+                Message_Type.of(Message_Type.Plain,
+                                Message_Type.Action,
+                                Message_Type.Notice).toInt(),
+                0
+              )
+          }
+          NotificationSettings.Level.HIGHLIGHT -> {
+            val highlightCount = session.bufferSyncer.highlightCount(buffer.bufferId)
+            if (highlightCount != 0) {
+              session.backlogManager.requestBacklogFiltered(
+                buffer.bufferId, lastSeenId, -1, 20, 0,
+                Message_Type.of(Message_Type.Plain,
+                                Message_Type.Action,
+                                Message_Type.Notice).toInt(),
+                Message_Flag.of(Message_Flag.Highlight).toInt()
+              )
+            }
+          }
+          NotificationSettings.Level.NONE      -> {
+            // We don’t want notifications for this type of channel, so we won’t get any.
           }
-        }
-        NotificationSettings.Level.NONE      -> {
-          // We don’t want notifications for this type of channel, so we won’t get any.
         }
       }
     }
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
index 92af6d3ce..b66b46da4 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
@@ -50,6 +50,8 @@ enum class ExtendedFeature {
   LongMessageTime,
   /** Real Name and Avatar URL in backlog */
   RichMessages,
+  /** Backlogmanager supports filtering backlog by messagetype */
+  BacklogFilterType,
   /** 64-bit IDs for messages */
   LongMessageId;
 
-- 
GitLab