100 lines
2.7 KiB
Kotlin
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
|
|
}
|
|
}
|
|
} |