From ffc28fb74b44cd1ee4cb0cbed0cad467cfb94053 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Sun, 27 Feb 2022 18:23:45 +0100 Subject: [PATCH] feat: implement LoadBacklogForwards --- .../client/syncables/ClientBacklogManager.kt | 22 ++++++++++ .../protocol/features/QuasselFeature.kt | 12 ++++- .../syncables/stubs/BacklogManagerStub.kt | 44 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt index 633c45c..9bb894a 100644 --- a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt +++ b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt @@ -27,6 +27,7 @@ class ClientBacklogManager( ) : BacklogManager(session) { private val bufferQueue = CoroutineKeyedQueue<BacklogData.Buffer, QVariantList>() private val bufferFilteredQueue = CoroutineKeyedQueue<BacklogData.BufferFiltered, QVariantList>() + private val bufferForwardQueue = CoroutineKeyedQueue<BacklogData.BufferForward, QVariantList>() private val allQueue = CoroutineKeyedQueue<BacklogData.All, QVariantList>() private val allFilteredQueue = CoroutineKeyedQueue<BacklogData.AllFiltered, QVariantList>() @@ -54,6 +55,18 @@ class ClientBacklogManager( return bufferFilteredQueue.wait(BacklogData.BufferFiltered(bufferId, first, last, limit, additional, type, flags)) } + suspend fun backlogForward( + bufferId: BufferId, + first: MsgId = MsgId(-1), + last: MsgId = MsgId(-1), + limit: Int = -1, + type: MessageTypes = MessageType.all, + flags: MessageFlags = MessageFlag.all + ): QVariantList { + requestBacklogForward(bufferId, first, last, limit, type.toBits().toInt(), flags.toBits().toInt()) + return bufferForwardQueue.wait(BacklogData.BufferForward(bufferId, first, last, limit, type, flags)) + } + suspend fun backlogAll( first: MsgId = MsgId(-1), last: MsgId = MsgId(-1), @@ -177,6 +190,15 @@ class ClientBacklogManager( val flags: MessageFlags = MessageFlag.all ) : BacklogData() + data class BufferForward( + val bufferId: BufferId, + val first: MsgId = MsgId(-1), + val last: MsgId = MsgId(-1), + val limit: Int = -1, + val type: MessageTypes = MessageType.all, + val flags: MessageFlags = MessageFlag.all + ) : BacklogData() + data class All( val first: MsgId = MsgId(-1), val last: MsgId = MsgId(-1), diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/features/QuasselFeature.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/features/QuasselFeature.kt index 7593df1..1d23f49 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/features/QuasselFeature.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/features/QuasselFeature.kt @@ -130,7 +130,17 @@ enum class QuasselFeature { /** * Support for dynamically updated core information */ - SyncedCoreInfo; + SyncedCoreInfo, + + /** + * Support for loading backlog in ascending order, old to new + */ + LoadBacklogForwards, + + /** + * Support for controlling what IRCv3 capabilities are skipped during negotiation + */ + SkipIrcCaps; /** * Get the standardized feature name diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BacklogManagerStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BacklogManagerStub.kt index c89f7b7..694ebd5 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BacklogManagerStub.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BacklogManagerStub.kt @@ -64,6 +64,27 @@ interface BacklogManagerStub : SyncableStub { ) } + @SyncedCall(target = ProtocolSide.CORE) + fun requestBacklogForward( + bufferId: BufferId, + first: MsgId = MsgId(-1), + last: MsgId = MsgId(-1), + limit: Int = -1, + type: Int = -1, + flags: Int = -1 + ) { + sync( + target = ProtocolSide.CORE, + "requestBacklogForward", + qVariant(bufferId, QuasselType.BufferId), + qVariant(first, QuasselType.MsgId), + qVariant(last, QuasselType.MsgId), + qVariant(limit, QtType.Int), + qVariant(type, QtType.Int), + qVariant(flags, QtType.Int), + ) + } + @SyncedCall(target = ProtocolSide.CORE) fun requestBacklogAll( first: MsgId = MsgId(-1), @@ -148,6 +169,29 @@ interface BacklogManagerStub : SyncableStub { ) } + @SyncedCall(target = ProtocolSide.CLIENT) + fun receiveBacklogForward( + bufferId: BufferId, + first: MsgId = MsgId(-1), + last: MsgId = MsgId(-1), + limit: Int = -1, + type: Int = -1, + flags: Int = -1, + messages: QVariantList + ) { + sync( + target = ProtocolSide.CLIENT, + "receiveBacklogForward", + qVariant(bufferId, QuasselType.BufferId), + qVariant(first, QuasselType.MsgId), + qVariant(last, QuasselType.MsgId), + qVariant(limit, QtType.Int), + qVariant(type, QtType.Int), + qVariant(flags, QtType.Int), + qVariant(messages, QtType.QVariantList), + ) + } + @SyncedCall(target = ProtocolSide.CLIENT) fun receiveBacklogAll( first: MsgId = MsgId(-1), -- GitLab