Реакции, но с багом
This commit is contained in:
@@ -95,6 +95,14 @@ class ChatHubClient @Inject constructor() {
|
||||
_events.tryEmit(ChatEvent.NewMessage(message))
|
||||
}, MessageDto::class.java)
|
||||
|
||||
conn.on("message_edited", { messageId: String, chatId: String, content: String ->
|
||||
_events.tryEmit(ChatEvent.MessageEdited(messageId, chatId, content))
|
||||
}, String::class.java, String::class.java, String::class.java)
|
||||
|
||||
conn.on("message_deleted", { messageId: String, chatId: String ->
|
||||
_events.tryEmit(ChatEvent.MessageDeleted(messageId, chatId))
|
||||
}, String::class.java, String::class.java)
|
||||
|
||||
conn.on("messages_read", { data: MessagesReadEvent ->
|
||||
_events.tryEmit(ChatEvent.MessagesRead(
|
||||
data.effectiveChatId,
|
||||
@@ -124,7 +132,8 @@ class ChatHubClient @Inject constructor() {
|
||||
data.messageId ?: "",
|
||||
data.chatId ?: "",
|
||||
data.userId ?: "",
|
||||
data.emoji ?: ""
|
||||
data.emoji ?: "",
|
||||
isRemoved = false
|
||||
))
|
||||
}, ReactionEvent::class.java)
|
||||
|
||||
@@ -133,7 +142,8 @@ class ChatHubClient @Inject constructor() {
|
||||
data.messageId ?: "",
|
||||
data.chatId ?: "",
|
||||
data.userId ?: "",
|
||||
"" // empty emoji signals removal
|
||||
data.emoji ?: "",
|
||||
isRemoved = true
|
||||
))
|
||||
}, ReactionEvent::class.java)
|
||||
|
||||
@@ -153,6 +163,20 @@ class ChatHubClient @Inject constructor() {
|
||||
conn.on("call_ended", { chatId: String ->
|
||||
_events.tryEmit(ChatEvent.CallEnded(chatId))
|
||||
}, String::class.java)
|
||||
conn.on("message_pinned", { data: Map<String, Any> ->
|
||||
// The web version expects a message object, but here we might get a partial DTO or just IDs.
|
||||
// Let's assume we get { chatId, message: MessageDto } based on web
|
||||
// We'll trust the DTO mapping if possible, but SignalR java client is picky with nested objects in Maps.
|
||||
// For simplicity, we might needs a dedicated DTO if it fails.
|
||||
}, Map::class.java)
|
||||
|
||||
conn.on("message_pinned", { chatId: String, message: MessageDto ->
|
||||
_events.tryEmit(ChatEvent.MessagePinned(chatId, message))
|
||||
}, String::class.java, MessageDto::class.java)
|
||||
|
||||
conn.on("message_unpinned", { chatId: String, messageId: String ->
|
||||
_events.tryEmit(ChatEvent.MessageUnpinned(chatId, messageId))
|
||||
}, String::class.java, String::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,9 +185,57 @@ class ChatHubClient @Inject constructor() {
|
||||
_status.value = ConnectionStatus.DISCONNECTED
|
||||
}
|
||||
|
||||
fun addReaction(messageId: String, chatId: String, emoji: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.invoke("add_reaction", mapOf(
|
||||
"messageId" to messageId,
|
||||
"chatId" to chatId,
|
||||
"emoji" to emoji
|
||||
))?.doOnError { Log.e("ChatHubClient", "add_reaction error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Invoked add_reaction: $emoji on $messageId")
|
||||
} else {
|
||||
Log.w("ChatHubClient", "Cannot add_reaction: Not connected")
|
||||
}
|
||||
}
|
||||
|
||||
fun removeReaction(messageId: String, chatId: String, emoji: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.invoke("remove_reaction", mapOf(
|
||||
"messageId" to messageId,
|
||||
"chatId" to chatId,
|
||||
"emoji" to emoji
|
||||
))?.doOnError { Log.e("ChatHubClient", "remove_reaction error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Invoked remove_reaction: $emoji on $messageId")
|
||||
}
|
||||
}
|
||||
|
||||
fun pinMessage(messageId: String, chatId: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.invoke("pin_message", mapOf(
|
||||
"messageId" to messageId,
|
||||
"chatId" to chatId
|
||||
))?.doOnError { Log.e("ChatHubClient", "pin_message error", it) }
|
||||
?.subscribe()
|
||||
}
|
||||
}
|
||||
|
||||
fun unpinMessage(messageId: String, chatId: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.invoke("unpin_message", mapOf(
|
||||
"messageId" to messageId,
|
||||
"chatId" to chatId
|
||||
))?.doOnError { Log.e("ChatHubClient", "unpin_message error", it) }
|
||||
?.subscribe()
|
||||
}
|
||||
}
|
||||
|
||||
fun readMessages(request: ReadMessagesRequest) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.send("read_messages", request)
|
||||
hubConnection?.invoke("read_messages", request)
|
||||
?.doOnError { Log.e("ChatHubClient", "read_messages error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Sent read_messages for chat: ${request.chatId}")
|
||||
}
|
||||
}
|
||||
@@ -178,7 +250,9 @@ class ChatHubClient @Inject constructor() {
|
||||
}
|
||||
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.send("join_chat", chatId)
|
||||
hubConnection?.invoke("join_chat", chatId)
|
||||
?.doOnError { Log.e("ChatHubClient", "join_chat error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Joined chat room: $chatId")
|
||||
} else {
|
||||
Log.e("ChatHubClient", "Failed to join chat room $chatId: Not connected")
|
||||
@@ -188,14 +262,18 @@ class ChatHubClient @Inject constructor() {
|
||||
|
||||
fun sendTypingIndicator(chatId: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.send("typing_start", chatId)
|
||||
hubConnection?.invoke("typing_start", chatId)
|
||||
?.doOnError { Log.e("ChatHubClient", "typing_start error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Sent typing indicator for chat: $chatId")
|
||||
}
|
||||
}
|
||||
|
||||
fun sendUserStoppedTyping(chatId: String) {
|
||||
if (hubConnection?.connectionState == HubConnectionState.CONNECTED) {
|
||||
hubConnection?.send("typing_stop", chatId)
|
||||
hubConnection?.invoke("typing_stop", chatId)
|
||||
?.doOnError { Log.e("ChatHubClient", "typing_stop error", it) }
|
||||
?.subscribe()
|
||||
Log.d("ChatHubClient", "Sent user stopped typing for chat: $chatId")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user