feat: Update database version to 10 and implement migration to clear large blob attachments; adjust blob handling for IMAGE/FILE types in MessageRepository and ChatViewModel

This commit is contained in:
2026-01-26 17:19:30 +05:00
parent 7f3edd2ad8
commit 44c0151294
3 changed files with 42 additions and 16 deletions

View File

@@ -1268,7 +1268,9 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
updateMessageStatus(messageId, MessageStatus.SENT)
}
// 4. 💾 Сохранение в БД с attachments (зашифрованный blob для MESSAGES)
// 4. 💾 Сохранение в БД с attachments
// ⚠️ НЕ сохраняем blob для IMAGE/FILE - слишком большие (SQLite CursorWindow 2MB limit)
// Только MESSAGES (reply) сохраняем - они небольшие
val attachmentsJson = if (messageAttachments.isNotEmpty()) {
JSONArray().apply {
messageAttachments.forEach { att ->
@@ -1276,8 +1278,13 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
put("id", att.id)
put("type", att.type.value)
put("preview", att.preview)
// 🔥 Для MESSAGES сохраняем зашифрованный приватным ключом, для остальных - как есть
put("blob", if (att.type == AttachmentType.MESSAGES) replyBlobForDatabase else att.blob)
// Только для MESSAGES сохраняем blob (reply data небольшие)
// Для IMAGE/FILE - пустой blob
val blobToSave = when (att.type) {
AttachmentType.MESSAGES -> replyBlobForDatabase ?: ""
else -> "" // IMAGE, FILE - не сохраняем blob
}
put("blob", blobToSave)
})
}
}.toString()
@@ -1397,13 +1404,14 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
updateMessageStatus(messageId, MessageStatus.SENT)
}
// Сохраняем в БД с зашифрованным blob'ом
// ⚠️ НЕ сохраняем blob в БД - он слишком большой (SQLite CursorWindow 2MB limit)
// Изображение должно храниться в файловой системе или загружаться с сервера при необходимости
val attachmentsJson = JSONArray().apply {
put(JSONObject().apply {
put("id", imageAttachment.id)
put("type", AttachmentType.IMAGE.value)
put("preview", blurhash)
put("blob", imageBlobForDatabase)
put("blob", "") // Пустой blob - не сохраняем в БД!
})
}.toString()
@@ -1521,12 +1529,14 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
updateMessageStatus(messageId, MessageStatus.SENT)
}
// ⚠️ НЕ сохраняем blob в БД - он слишком большой (SQLite CursorWindow 2MB limit)
// Файл должен храниться в файловой системе или загружаться с сервера при необходимости
val attachmentsJson = JSONArray().apply {
put(JSONObject().apply {
put("id", fileAttachment.id)
put("type", AttachmentType.FILE.value)
put("preview", preview)
put("blob", fileBlobForDatabase)
put("blob", "") // Пустой blob - не сохраняем в БД!
})
}.toString()