From e2d6689d6d32c751039aafd3a5f3985a674c43b2 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Tue, 1 May 2018 06:14:42 +0200 Subject: [PATCH] Fixed notification handling Signed-off-by: Janne Koschinski <janne@kuschku.de> --- .../service/QuasselNotificationBackend.kt | 23 ++++++++++++- .../quassel/syncables/BacklogManager.kt | 20 +++++++++++ .../syncables/interfaces/IBacklogManager.kt | 33 +++++++++++++++++++ .../de/kuschku/libquassel/session/Session.kt | 2 +- 4 files changed, 76 insertions(+), 2 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 13221cd6a..ee640fe44 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt @@ -60,9 +60,30 @@ class QuasselNotificationBackend @Inject constructor( private val selfColor = context.getColorCompat(android.R.color.background_dark) override fun init(session: Session) { - for (buffer in session.bufferSyncer.bufferInfos()) { + val buffers = session.bufferSyncer.bufferInfos() + for (buffer in buffers) { val lastSeenId = session.bufferSyncer.lastSeenMsg(buffer.bufferId) database.notifications().markRead(buffer.bufferId, lastSeenId) + + if (buffer.type.hasFlag(Buffer_Type.QueryBuffer)) { + 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 + ) + } else { + if (session.bufferSyncer.highlightCount(buffer.bufferId) != 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() + ) + } + } } } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt index 39fba3469..9fbe72f27 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt @@ -25,12 +25,32 @@ package de.kuschku.libquassel.quassel.syncables import de.kuschku.libquassel.protocol.* import de.kuschku.libquassel.quassel.syncables.interfaces.IBacklogManager import de.kuschku.libquassel.session.BacklogStorage +import de.kuschku.libquassel.session.NotificationManager import de.kuschku.libquassel.session.Session +import de.kuschku.libquassel.util.compatibility.LoggingHandler +import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log class BacklogManager( private val session: Session, + private val notificationManager: NotificationManager?, private val backlogStorage: BacklogStorage ) : SyncableObject(session, "BacklogManager"), IBacklogManager { + override fun receiveBacklogFiltered(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, + additional: Int, type: Int, flags: Int, + messages: QVariantList) { + log(LoggingHandler.LogLevel.ERROR, "DEBUG", "$messages") + val actualMessages = messages.mapNotNull { it.value<Message?>(null) } + log(LoggingHandler.LogLevel.ERROR, "DEBUG", "$actualMessages") + notificationManager?.processMessages( + session, *actualMessages.toTypedArray() + ) + } + + override fun receiveBacklogAllFiltered(first: MsgId, last: MsgId, limit: Int, additional: Int, + type: Int, flags: Int, messages: QVariantList) { + // TODO: Not implemented + } + init { initialized = true } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt index 655f90f55..f01ac037c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt @@ -26,6 +26,8 @@ import de.kuschku.libquassel.annotations.Slot import de.kuschku.libquassel.annotations.Syncable import de.kuschku.libquassel.protocol.* import de.kuschku.libquassel.protocol.Type +import de.kuschku.libquassel.util.compatibility.LoggingHandler +import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log @Syncable(name = "BacklogManager") interface IBacklogManager : ISyncableObject { @@ -38,6 +40,20 @@ interface IBacklogManager : ISyncableObject { ) } + @Slot + fun requestBacklogFiltered(bufferId: BufferId, first: MsgId = -1, last: MsgId = -1, + limit: Int = -1, additional: Int = 0, type: Int = -1, + flags: Int = -1) { + log(LoggingHandler.LogLevel.ERROR, + "DEBUG", + "bufferId: $bufferId, first: $first, last: $last, limit: $limit, additional: $additional, type: $type, flags: $flags") + REQUEST( + "requestBacklogFiltered", ARG(bufferId, QType.BufferId), ARG(first, QType.MsgId), + ARG(last, QType.MsgId), ARG(limit, Type.Int), ARG(additional, Type.Int), ARG(type, Type.Int), + ARG(flags, Type.Int) + ) + } + @Slot fun requestBacklogAll(first: MsgId = -1, last: MsgId = -1, limit: Int = -1, additional: Int = 0) { @@ -47,14 +63,31 @@ interface IBacklogManager : ISyncableObject { ) } + @Slot + fun requestBacklogAllFiltered(first: MsgId = -1, last: MsgId = -1, limit: Int = -1, + additional: Int = 0, type: Int = -1, flags: Int = -1) { + REQUEST( + "requestBacklogAllFiltered", ARG(first, QType.MsgId), ARG(last, QType.MsgId), + ARG(limit, Type.Int), ARG(additional, Type.Int), ARG(type, Type.Int), ARG(flags, Type.Int) + ) + } + @Slot fun receiveBacklog(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, additional: Int, messages: QVariantList) + @Slot + fun receiveBacklogFiltered(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, + additional: Int, type: Int, flags: Int, messages: QVariantList) + @Slot fun receiveBacklogAll(first: MsgId, last: MsgId, limit: Int, additional: Int, messages: QVariantList) + @Slot + fun receiveBacklogAllFiltered(first: MsgId, last: MsgId, limit: Int, additional: Int, + type: Int, flags: Int, messages: QVariantList) + @Slot override fun update(properties: QVariantMap) { super.update(properties) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt index 09cfb79cf..29ce292e2 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt @@ -65,7 +65,7 @@ class Session( override val error = _error.toFlowable(BackpressureStrategy.BUFFER) override val aliasManager = AliasManager(this) - override val backlogManager = BacklogManager(this, backlogStorage) + override val backlogManager = BacklogManager(this, notificationManager, backlogStorage) override val bufferViewManager = BufferViewManager(this) override val bufferSyncer = BufferSyncer(this, notificationManager) override val certManagers = mutableMapOf<IdentityId, CertManager>() -- GitLab