Files
QuApp/app/src/main/java/com/example/myserver/ChatMessage.kt
T
2026-04-25 01:14:39 +03:00

100 lines
2.7 KiB
Kotlin

package com.example.myserver
// MediaType теперь в отдельном файле, не нужно объявлять здесь
data class MediaAttachment(
val id: Long,
val localPath: String,
val remoteUrl: String? = null,
val mediaType: MediaType,
val mimeType: String,
val fileSize: Long,
val width: Int = 0,
val height: Int = 0,
val duration: Long = 0,
val thumbnailPath: String? = null,
val isUploaded: Boolean = false,
val uploadProgress: Int = 0
)
enum class MessageStatus {
PENDING,
SENT,
DELIVERED,
READ,
QUEUED,
ERROR,
EDITED
}
data class EncryptedDataUI(
val cipherText: String,
val iv: String,
val authTag: String
)
data class ChatMessage(
val id: Long,
val senderId: Long,
val senderName: String,
val recipientId: Long,
val content: String,
val timestamp: List<Int>,
val status: MessageStatus = MessageStatus.PENDING,
val read: Boolean = false,
val deliveredAt: Long? = null,
val readAt: Long? = null,
val isEdited: Boolean = false,
val isDeleted: Boolean = false,
val originalContent: String? = null,
val replyToMessageId: Long? = null,
val forwardedFromId: Long? = null,
val isSecret: Boolean = false,
val encryptedData: EncryptedDataUI? = null,
val attachments: List<MediaAttachment> = emptyList(),
val secretChatId: String? = null
) {
fun hasMedia(): Boolean = attachments.isNotEmpty()
fun isReply(): Boolean = replyToMessageId != null
fun isForwarded(): Boolean = forwardedFromId != null
fun getFormattedTime(): String {
return if (timestamp.size >= 6) {
"${timestamp[3].toString().padStart(2, '0')}:${timestamp[4].toString().padStart(2, '0')}"
} else {
""
}
}
fun getStatusIcon(): String {
return when (status) {
MessageStatus.PENDING, MessageStatus.QUEUED -> ""
MessageStatus.SENT -> ""
MessageStatus.DELIVERED -> "✓✓"
MessageStatus.READ -> "✓✓"
MessageStatus.ERROR -> ""
MessageStatus.EDITED -> "✏️"
}
}
fun getStatusIconColor(): Int {
return when (status) {
MessageStatus.READ -> 0xFF4CAF50.toInt()
MessageStatus.DELIVERED -> 0xFF2196F3.toInt()
MessageStatus.SENT -> 0xFF888888.toInt()
MessageStatus.PENDING, MessageStatus.QUEUED -> 0xFFFF9800.toInt()
MessageStatus.ERROR -> 0xFFF44336.toInt()
MessageStatus.EDITED -> 0xFF9C27B0.toInt()
}
}
fun getDisplayContent(): String {
return if (isDeleted) {
"Сообщение удалено"
} else {
content
}
}
}