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