refactor: Simplify message loading logic and remove workaround for large messages in ChatViewModel
This commit is contained in:
@@ -486,16 +486,10 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
|
||||
|
||||
// 🔥 Получаем первую страницу - используем специальный метод для saved messages
|
||||
Log.d(TAG, "🔍 Querying DB for messages...")
|
||||
val entities = try {
|
||||
if (isSavedMessages) {
|
||||
messageDao.getMessagesForSavedDialog(account, limit = PAGE_SIZE, offset = 0)
|
||||
} else {
|
||||
messageDao.getMessages(account, dialogKey, limit = PAGE_SIZE, offset = 0)
|
||||
}
|
||||
} catch (e: android.database.sqlite.SQLiteBlobTooBigException) {
|
||||
// 🔥 WORKAROUND: Если сообщение слишком большое - загружаем по одному
|
||||
Log.w(TAG, "⚠️ SQLiteBlobTooBigException - loading messages one by one")
|
||||
loadMessagesOneByOne(account, dialogKey, isSavedMessages, PAGE_SIZE)
|
||||
val entities = if (isSavedMessages) {
|
||||
messageDao.getMessagesForSavedDialog(account, limit = PAGE_SIZE, offset = 0)
|
||||
} else {
|
||||
messageDao.getMessages(account, dialogKey, limit = PAGE_SIZE, offset = 0)
|
||||
}
|
||||
|
||||
Log.d(TAG, "📋 Loaded entities from DB: count=${entities.size}")
|
||||
@@ -569,43 +563,6 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 🔥 WORKAROUND: Загрузка сообщений по одному (для случаев когда сообщение слишком большое)
|
||||
* Пропускает сообщения которые не могут быть загружены из-за размера
|
||||
*/
|
||||
private suspend fun loadMessagesOneByOne(
|
||||
account: String,
|
||||
dialogKey: String,
|
||||
isSavedMessages: Boolean,
|
||||
limit: Int
|
||||
): List<MessageEntity> {
|
||||
val result = mutableListOf<MessageEntity>()
|
||||
var offset = 0
|
||||
var loadedCount = 0
|
||||
|
||||
while (loadedCount < limit && offset < limit * 2) { // limit * 2 чтобы не зациклиться
|
||||
try {
|
||||
val batch = if (isSavedMessages) {
|
||||
messageDao.getMessagesForSavedDialog(account, limit = 1, offset = offset)
|
||||
} else {
|
||||
messageDao.getMessages(account, dialogKey, limit = 1, offset = offset)
|
||||
}
|
||||
|
||||
if (batch.isEmpty()) break
|
||||
|
||||
result.addAll(batch)
|
||||
loadedCount++
|
||||
} catch (e: android.database.sqlite.SQLiteBlobTooBigException) {
|
||||
Log.w(TAG, "⚠️ Skipping message at offset $offset - too big")
|
||||
// Пропускаем это сообщение
|
||||
}
|
||||
offset++
|
||||
}
|
||||
|
||||
Log.d(TAG, "📦 Loaded $loadedCount messages one by one (skipped ${offset - loadedCount})")
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 🔥 Фоновое обновление сообщений из БД (проверка новых)
|
||||
* Вызывается когда кэш уже отображён, но нужно проверить есть ли новые сообщения
|
||||
|
||||
Reference in New Issue
Block a user