diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index 2d48cf5..bd13450 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -962,6 +962,32 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { val replyMessageIdFromJson = replyMessage.optString("message_id", "") val replyTimestamp = replyMessage.optLong("timestamp", 0L) + // πŸ“Έ ΠŸΠ°Ρ€ΡΠΈΠΌ attachments ΠΈΠ· JSON reply (ΠΊΠ°ΠΊ Π² Desktop) + val replyAttachmentsFromJson = mutableListOf() + try { + val attachmentsArray = replyMessage.optJSONArray("attachments") + if (attachmentsArray != null && attachmentsArray.length() > 0) { + for (j in 0 until attachmentsArray.length()) { + val attJson = attachmentsArray.getJSONObject(j) + val attId = attJson.optString("id", "") + val attType = AttachmentType.fromInt(attJson.optInt("type", 0)) + val attPreview = attJson.optString("preview", "") + val attBlob = attJson.optString("blob", "") + + if (attId.isNotEmpty()) { + replyAttachmentsFromJson.add(MessageAttachment( + id = attId, + type = attType, + preview = attPreview, + blob = attBlob + )) + } + } + } + } catch (e: Exception) { + Log.e(TAG, "πŸ“Έ Failed to parse reply attachments from JSON: ${e.message}") + } + // πŸ”₯ Π’ΠΠ–ΠΠž: message_id ΠΈΠ· JSON ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с messageId Π² Android Π‘Π”! // ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ messageId Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… сообщСниях ΠΏΠΎ тСксту ΠΈ timestamp @@ -984,22 +1010,28 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΠΊΡ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ сообщСния val isReplyFromMe = replyPublicKey == myPublicKey - // πŸ–ΌοΈ Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ attachments ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ сообщСния для ΠΏΡ€Π΅Π²ΡŒΡŽ Π² reply - val originalAttachments = try { - val originalMessage = messageDao.findMessageByContent( - account = account, - dialogKey = dialogKey, - fromPublicKey = replyPublicKey, - timestampFrom = replyTimestamp - 5000, - timestampTo = replyTimestamp + 5000 - ) - if (originalMessage != null && originalMessage.attachments.isNotEmpty()) { - parseAllAttachments(originalMessage.attachments) - } else { + // οΏ½ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ attachments ΠΈΠ· JSON Ссли Π΅ΡΡ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ· Π‘Π” + val originalAttachments = if (replyAttachmentsFromJson.isNotEmpty()) { + // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ attachments ΠΈΠ· JSON reply + replyAttachmentsFromJson + } else { + // Fallback: Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ· Π‘Π” + try { + val originalMessage = messageDao.findMessageByContent( + account = account, + dialogKey = dialogKey, + fromPublicKey = replyPublicKey, + timestampFrom = replyTimestamp - 5000, + timestampTo = replyTimestamp + 5000 + ) + if (originalMessage != null && originalMessage.attachments.isNotEmpty()) { + parseAllAttachments(originalMessage.attachments) + } else { + emptyList() + } + } catch (e: Exception) { emptyList() } - } catch (e: Exception) { - emptyList() } val result = ReplyData( @@ -1264,15 +1296,28 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { if (replyMsgsToSend.isNotEmpty()) { - // Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ JSON массив с Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ сообщСниями (ΠΊΠ°ΠΊ Π² RN) + // Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ JSON массив с Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ сообщСниями (ΠΊΠ°ΠΊ Π² Desktop) val replyJsonArray = JSONArray() replyMsgsToSend.forEach { msg -> + // Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ attachments JSON (ΠΊΠ°ΠΊ Π² Desktop) + val attachmentsArray = JSONArray() + msg.attachments.forEach { att -> + attachmentsArray.put(JSONObject().apply { + put("id", att.id) + put("type", att.type.value) + put("preview", att.preview) + // Для IMAGE/FILE - blob Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ (слишком большой) + // Для MESSAGES - Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ blob + put("blob", if (att.type == AttachmentType.MESSAGES) att.blob else "") + }) + } + val replyJson = JSONObject().apply { put("message_id", msg.messageId) put("publicKey", msg.publicKey) put("message", msg.text) put("timestamp", msg.timestamp) - put("attachments", JSONArray()) // ΠŸΡƒΡΡ‚ΠΎΠΉ массив Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ + put("attachments", attachmentsArray) } replyJsonArray.put(replyJson) }