1
0
Fork 0
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:
Evgenii Kozlov 2025-05-23 14:59:46 +02:00 committed by GitHub
parent 501c395c4e
commit 55e430c70b
Signed by: github
GPG key ID: B5690EEEBB952194
10 changed files with 88 additions and 1 deletions

View file

@ -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()
)
}

View file

@ -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)
}

View file

@ -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

View file

@ -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

View file

@ -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)
}

View file

@ -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)

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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)