mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-3622 Chats | Tech | Integrate API for chat previews (#2444)
This commit is contained in:
parent
501c395c4e
commit
55e430c70b
10 changed files with 88 additions and 1 deletions
|
@ -2,6 +2,8 @@ package com.anytypeio.anytype.core_models.chats
|
|||
|
||||
import com.anytypeio.anytype.core_models.Block
|
||||
import com.anytypeio.anytype.core_models.Id
|
||||
import com.anytypeio.anytype.core_models.ObjectWrapper
|
||||
import com.anytypeio.anytype.core_models.primitives.SpaceId
|
||||
|
||||
sealed class Chat {
|
||||
|
||||
|
@ -110,4 +112,12 @@ sealed class Chat {
|
|||
val oldestMessageOrderId: Id? = unreadMessages?.olderOrderId
|
||||
val oldestMentionMessageOrderId: Id? = unreadMentions?.olderOrderId
|
||||
}
|
||||
|
||||
data class Preview(
|
||||
val space: SpaceId,
|
||||
val chat: Id,
|
||||
val message: Message? = null,
|
||||
val state: State? = null,
|
||||
val dependencies: List<ObjectWrapper.Basic> = emptyList()
|
||||
)
|
||||
}
|
|
@ -1101,6 +1101,14 @@ class BlockDataRepository(
|
|||
return remote.unsubscribeChat(chat)
|
||||
}
|
||||
|
||||
override suspend fun subscribeToMessagePreviews(subscription: Id): List<Chat.Preview> {
|
||||
return remote.subscribeToMessagePreviews(subscription)
|
||||
}
|
||||
|
||||
override suspend fun unsubscribeFromMessagePreviews(subscription: Id) {
|
||||
remote.unsubscribeFromMessagePreviews(subscription)
|
||||
}
|
||||
|
||||
override suspend fun objectRelationListWithValue(command: Command.RelationListWithValue): List<RelationListWithValueItem> {
|
||||
return remote.objectRelationListWithValue(command)
|
||||
}
|
||||
|
|
|
@ -467,6 +467,8 @@ interface BlockRemote {
|
|||
suspend fun subscribeLastChatMessages(command: Command.ChatCommand.SubscribeLastMessages): Command.ChatCommand.SubscribeLastMessages.Response
|
||||
suspend fun toggleChatMessageReaction(command: Command.ChatCommand.ToggleMessageReaction)
|
||||
suspend fun unsubscribeChat(chat: Id)
|
||||
suspend fun subscribeToMessagePreviews(subscription: Id): List<Chat.Preview>
|
||||
suspend fun unsubscribeFromMessagePreviews(subscription: Id)
|
||||
|
||||
//endregion
|
||||
|
||||
|
|
|
@ -509,6 +509,8 @@ interface BlockRepository {
|
|||
suspend fun subscribeLastChatMessages(command: Command.ChatCommand.SubscribeLastMessages): Command.ChatCommand.SubscribeLastMessages.Response
|
||||
suspend fun toggleChatMessageReaction(command: Command.ChatCommand.ToggleMessageReaction)
|
||||
suspend fun unsubscribeChat(chat: Id)
|
||||
suspend fun subscribeToMessagePreviews(subscription: Id): List<Chat.Preview>
|
||||
suspend fun unsubscribeFromMessagePreviews(subscription: Id)
|
||||
|
||||
//endregion
|
||||
|
||||
|
|
|
@ -1067,6 +1067,14 @@ class BlockMiddleware(
|
|||
return middleware.chatUnsubscribe(chat = chat)
|
||||
}
|
||||
|
||||
override suspend fun subscribeToMessagePreviews(subscription: Id): List<Chat.Preview> {
|
||||
return middleware.chatSubscribeToMessagePreviews(subscription)
|
||||
}
|
||||
|
||||
override suspend fun unsubscribeFromMessagePreviews(subscription: Id) {
|
||||
middleware.chatUnsubscribeFromMessagePreviews(subscription)
|
||||
}
|
||||
|
||||
override suspend fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload {
|
||||
return middleware.dataViewSetActiveView(command)
|
||||
}
|
||||
|
|
|
@ -2895,7 +2895,7 @@ class Middleware @Inject constructor(
|
|||
return response.event.toPayload()
|
||||
}
|
||||
|
||||
@Throws
|
||||
@Throws(Exception::class)
|
||||
fun chatUnsubscribe(chat: Id) {
|
||||
val request = Rpc.Chat.Unsubscribe.Request(chatObjectId = chat)
|
||||
logRequestIfDebug(request)
|
||||
|
@ -2903,6 +2903,23 @@ class Middleware @Inject constructor(
|
|||
logResponseIfDebug(response, time)
|
||||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun chatSubscribeToMessagePreviews(subscription: Id): List<Chat.Preview> {
|
||||
val request = Rpc.Chat.SubscribeToMessagePreviews.Request(subId = subscription)
|
||||
logRequestIfDebug(request)
|
||||
val (response, time) = measureTimedValue { service.chatSubscribeToMessagePreviews(request) }
|
||||
logResponseIfDebug(response, time)
|
||||
return response.previews.map { it.core() }
|
||||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun chatUnsubscribeFromMessagePreviews(subscription: Id) {
|
||||
val request = Rpc.Chat.UnsubscribeFromMessagePreviews.Request(subId = subscription)
|
||||
logRequestIfDebug(request)
|
||||
val (response, time) = measureTimedValue { service.chatUnsubscribeToMessagePreviews(request) }
|
||||
logResponseIfDebug(response, time)
|
||||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun debugAccountSelectTrace(dir: String): String {
|
||||
val request = Rpc.Debug.AccountSelectTrace.Request(dir = dir)
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.anytypeio.anytype.middleware.mappers
|
|||
|
||||
import anytype.Event.P2PStatus
|
||||
import anytype.Event.Space
|
||||
import com.anytypeio.anytype.core_models.chats.Chat
|
||||
|
||||
|
||||
typealias MEvent = anytype.Event
|
||||
|
|
|
@ -38,6 +38,7 @@ import com.anytypeio.anytype.core_models.NotificationStatus
|
|||
import com.anytypeio.anytype.core_models.ObjectOrder
|
||||
import com.anytypeio.anytype.core_models.ObjectType
|
||||
import com.anytypeio.anytype.core_models.ObjectView
|
||||
import com.anytypeio.anytype.core_models.ObjectWrapper
|
||||
import com.anytypeio.anytype.core_models.Payload
|
||||
import com.anytypeio.anytype.core_models.Process
|
||||
import com.anytypeio.anytype.core_models.Relation
|
||||
|
@ -1174,6 +1175,16 @@ fun MChatState.core(): Chat.State = Chat.State(
|
|||
lastStateId = lastStateId
|
||||
)
|
||||
|
||||
fun Rpc.Chat.SubscribeToMessagePreviews.Response.ChatPreview.core(): Chat.Preview {
|
||||
return Chat.Preview(
|
||||
space = SpaceId(spaceId),
|
||||
chat = chatObjectId,
|
||||
message = message?.core(),
|
||||
state = state?.core(),
|
||||
dependencies = dependencies.map { ObjectWrapper.Basic(it.orEmpty()) }.filter { it.isValid }
|
||||
)
|
||||
}
|
||||
|
||||
fun Rpc.History.Version.toCoreModel(): Version {
|
||||
return Version(
|
||||
id = id,
|
||||
|
|
|
@ -611,6 +611,8 @@ interface MiddlewareService {
|
|||
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
|
||||
fun chatSubscribeToMessagePreviews(request: Rpc.Chat.SubscribeToMessagePreviews.Request): Rpc.Chat.SubscribeToMessagePreviews.Response
|
||||
fun chatUnsubscribeToMessagePreviews(request: Rpc.Chat.UnsubscribeFromMessagePreviews.Request): Rpc.Chat.UnsubscribeFromMessagePreviews.Response
|
||||
|
||||
//endregion
|
||||
|
||||
|
|
|
@ -2470,6 +2470,32 @@ class MiddlewareServiceImplementation @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun chatSubscribeToMessagePreviews(request: Rpc.Chat.SubscribeToMessagePreviews.Request): Rpc.Chat.SubscribeToMessagePreviews.Response {
|
||||
val encoded = Service.chatSubscribeToMessagePreviews(
|
||||
Rpc.Chat.SubscribeToMessagePreviews.Request.ADAPTER.encode(request)
|
||||
)
|
||||
val response = Rpc.Chat.SubscribeToMessagePreviews.Response.ADAPTER.decode(encoded)
|
||||
val error = response.error
|
||||
if (error != null && error.code != Rpc.Chat.SubscribeToMessagePreviews.Response.Error.Code.NULL) {
|
||||
throw Exception(error.description)
|
||||
} else {
|
||||
return response
|
||||
}
|
||||
}
|
||||
|
||||
override fun chatUnsubscribeToMessagePreviews(request: Rpc.Chat.UnsubscribeFromMessagePreviews.Request): Rpc.Chat.UnsubscribeFromMessagePreviews.Response {
|
||||
val encoded = Service.chatUnsubscribeFromMessagePreviews(
|
||||
Rpc.Chat.UnsubscribeFromMessagePreviews.Request.ADAPTER.encode(request)
|
||||
)
|
||||
val response = Rpc.Chat.UnsubscribeFromMessagePreviews.Response.ADAPTER.decode(encoded)
|
||||
val error = response.error
|
||||
if (error != null && error.code != Rpc.Chat.UnsubscribeFromMessagePreviews.Response.Error.Code.NULL) {
|
||||
throw Exception(error.description)
|
||||
} else {
|
||||
return response
|
||||
}
|
||||
}
|
||||
|
||||
override fun debugAccountSelectTrace(request: Rpc.Debug.AccountSelectTrace.Request): Rpc.Debug.AccountSelectTrace.Response {
|
||||
val encoded = Service.debugAccountSelectTrace(
|
||||
Rpc.Debug.AccountSelectTrace.Request.ADAPTER.encode(request)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue