1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-3355 Chats | Tech | Add switcher allowing creating space-level chat in debug mode + Counters API (#2333)

This commit is contained in:
Evgenii Kozlov 2025-04-17 09:01:18 +02:00 committed by GitHub
parent 149e9d2b0a
commit f65f8c11d8
Signed by: github
GPG key ID: B5690EEEBB952194
19 changed files with 187 additions and 31 deletions

View file

@ -1029,7 +1029,7 @@ class BlockMiddleware(
override suspend fun getChatMessages(
command: Command.ChatCommand.GetMessages
): List<Chat.Message> {
): Command.ChatCommand.GetMessages.Response {
return middleware.chatGetMessages(command)
}

View file

@ -2775,14 +2775,17 @@ class Middleware @Inject constructor(
}
@Throws
fun chatGetMessages(command: Command.ChatCommand.GetMessages) : List<Chat.Message> {
fun chatGetMessages(command: Command.ChatCommand.GetMessages) : Command.ChatCommand.GetMessages.Response {
val request = Rpc.Chat.GetMessages.Request(
chatObjectId = command.chat
)
logRequestIfDebug(request)
val (response, time) = measureTimedValue { service.chatGetMessages(request) }
logResponseIfDebug(response, time)
return response.messages.map { it.core() }
return Command.ChatCommand.GetMessages.Response(
messages = response.messages.map { it.core() },
state = response.chatState?.core()
)
}
@Throws
@ -2821,7 +2824,8 @@ class Middleware @Inject constructor(
logResponseIfDebug(response, time)
return Command.ChatCommand.SubscribeLastMessages.Response(
messages = response.messages.map { it.core() },
messageCountBefore = response.numMessagesBefore
messageCountBefore = response.numMessagesBefore,
chatState = response.chatState?.core()
)
}

View file

@ -57,6 +57,9 @@ class MiddlewareEventChannel(
blockDataviewIsCollectionSet != null -> true
blockSetWidget != null -> true
spaceAutoWidgetAdded != null -> true
chatStateUpdate != null -> true
chatUpdateMentionReadStatus != null -> true
chatUpdateMessageReadStatus != null -> true
else -> false.also {
if (featureToggles.isLogMiddlewareInteraction)
Timber.w("Ignored event: $this")

View file

@ -322,6 +322,32 @@ fun anytype.Event.Message.toCoreModels(
}
)
}
chatStateUpdate != null -> {
val event = chatStateUpdate
checkNotNull(event)
Event.Command.Chats.UpdateState(
context = context,
state = event.state?.core()
)
}
chatUpdateMessageReadStatus != null -> {
val event = chatUpdateMessageReadStatus
checkNotNull(event)
Event.Command.Chats.UpdateMessageReadStatus(
context = context,
messages = event.ids,
isRead = event.isRead
)
}
chatUpdateMentionReadStatus != null -> {
val event = chatUpdateMentionReadStatus
checkNotNull(event)
Event.Command.Chats.UpdateMentionReadStatus(
context = context,
messages = event.ids,
isRead = event.isRead
)
}
spaceAutoWidgetAdded != null -> {
val event = spaceAutoWidgetAdded
checkNotNull(event)

View file

@ -39,6 +39,7 @@ typealias MBSplitMode = anytype.Rpc.Block.Split.Request.Mode
typealias MBTableOfContents = anytype.model.Block.Content.TableOfContents
typealias MChatMessage = anytype.model.ChatMessage
typealias MChatState = anytype.model.ChatState
typealias MChatMessageContent = anytype.model.ChatMessage.MessageContent
typealias MChatMessageAttachment = anytype.model.ChatMessage.Attachment
typealias MChatMessageAttachmentType = anytype.model.ChatMessage.Attachment.AttachmentType

View file

@ -3,6 +3,7 @@ package com.anytypeio.anytype.middleware.mappers
import anytype.ResponseEvent
import anytype.Rpc
import anytype.model.Account
import anytype.model.ChatState
import anytype.model.NameserviceNameType
import anytype.model.ParticipantPermissions
import anytype.model.Restrictions
@ -1146,7 +1147,9 @@ fun MChatMessage.core(): Chat.Message = Chat.Message(
order = orderId,
reactions = reactions?.reactions?.mapValues { (unicode, identities) ->
identities.ids
} ?: emptyMap()
} ?: emptyMap(),
read = read,
mentionRead = mentionRead
)
fun MChatMessageContent.core(): Chat.Message.Content = Chat.Message.Content(
@ -1155,6 +1158,22 @@ fun MChatMessageContent.core(): Chat.Message.Content = Chat.Message.Content(
marks = marks.map { it.toCoreModels() }
)
fun MChatState.core(): Chat.State = Chat.State(
unreadMessages = messages?.let { unread ->
Chat.State.UnreadState(
counter = unread.counter,
olderOrderId = unread.oldestOrderId
)
},
unreadMentions = mentions?.let { unread ->
Chat.State.UnreadState(
counter = unread.counter,
olderOrderId = unread.oldestOrderId
)
},
lastStateId = lastStateId
)
fun Rpc.History.Version.toCoreModel(): Version {
return Version(
id = id,

View file

@ -607,6 +607,7 @@ interface MiddlewareService {
fun chatGetMessages(request: Rpc.Chat.GetMessages.Request): Rpc.Chat.GetMessages.Response
fun chatGetMessagesByIds(request: Rpc.Chat.GetMessagesByIds.Request): Rpc.Chat.GetMessagesByIds.Response
fun chatDeleteMessage(request: Rpc.Chat.DeleteMessage.Request): Rpc.Chat.DeleteMessage.Response
fun chatReadMessages(request: Rpc.Chat.ReadMessages.Request): Rpc.Chat.ReadMessages.Response
fun chatSubscribeLastMessages(request: Rpc.Chat.SubscribeLastMessages.Request): Rpc.Chat.SubscribeLastMessages.Response
fun chatToggleMessageReaction(request: Rpc.Chat.ToggleMessageReaction.Request): Rpc.Chat.ToggleMessageReaction.Response
fun chatUnsubscribe(request: Rpc.Chat.Unsubscribe.Request): Rpc.Chat.Unsubscribe.Response

View file

@ -2390,6 +2390,19 @@ class MiddlewareServiceImplementation @Inject constructor(
}
}
override fun chatReadMessages(request: Rpc.Chat.ReadMessages.Request): Rpc.Chat.ReadMessages.Response {
val encoded = Service.chatReadMessages(
Rpc.Chat.ReadMessages.Request.ADAPTER.encode(request)
)
val response = Rpc.Chat.ReadMessages.Response.ADAPTER.decode(encoded)
val error = response.error
if (error != null && error.code != Rpc.Chat.ReadMessages.Response.Error.Code.NULL) {
throw Exception(error.description)
} else {
return response
}
}
override fun chatGetMessages(request: Rpc.Chat.GetMessages.Request): Rpc.Chat.GetMessages.Response {
val encoded = Service.chatGetMessages(
Rpc.Chat.GetMessages.Request.ADAPTER.encode(request)