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:
parent
149e9d2b0a
commit
f65f8c11d8
19 changed files with 187 additions and 31 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue