Change 25 04 2026 add chats
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user