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 13221cd6a04d9b40300858cd08f04489c202292c..ee640fe445f95d835b35ae120651c2da56faf3ec 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 39fba34698439512996a203aba626e47a0e02326..9fbe72f275b9e1de975f64ba92b06ddfd68fa416 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 655f90f558409566ccb3bdae07b139ea4359909b..f01ac037c422c3f0b3462d4aa1b36b33659fb62f 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 09cfb79cfc6455e9789fd8b9abe56ba542953780..29ce292e2bf5a482463a0c2c1f909b3ef006ea78 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>()