diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 142cd360..48f31694 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -105,6 +105,13 @@ fun Context.getMessages(threadId: Int): ArrayList { messages = messages.filter { it.participants.isNotEmpty() } .sortedWith(compareBy { it.date }.thenBy { it.id }).toMutableList() as ArrayList + // use a separate thread for saving messages in a db + Thread { + messages.chunked(30).forEach { currentMessages -> + messagesDB.insertMessages(*currentMessages.toTypedArray()) + } + }.start() + return messages } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt index 27c94855..b11cbeb3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt @@ -11,7 +11,7 @@ class Converters { private val gson = Gson() private val attachmentType = object : TypeToken>() {}.type private val simpleContactType = object : TypeToken>() {}.type - private val messageAttachmentType = object : TypeToken() {}.type + private val messageAttachmentType = object : TypeToken() {}.type @TypeConverter fun jsonToAttachmentList(value: String) = gson.fromJson>(value, attachmentType) @@ -29,5 +29,5 @@ class Converters { fun jsonToMessageAttachment(value: String) = gson.fromJson(value, messageAttachmentType) @TypeConverter - fun messageAttachmentToJson(messageAttachment: MessageAttachment) = gson.toJson(messageAttachment) + fun messageAttachmentToJson(messageAttachment: MessageAttachment?) = gson.toJson(messageAttachment) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt index cd8398ef..bb508011 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -1,11 +1,22 @@ package com.simplemobiletools.smsmessenger.interfaces import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query import com.simplemobiletools.smsmessenger.models.Message @Dao interface MessagesDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertOrUpdate(message: Message) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertMessages(vararg message: Message) + @Query("SELECT * FROM messages") fun getAll(): List + + @Query("SELECT * FROM messages WHERE thread = :threadId") + fun getThreadMessages(threadId: Long): List }