mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
Handle cases where sms or mms does not exist in import or export
This commit is contained in:
@@ -32,7 +32,7 @@ class MessagesExporter(private val context: Context) {
|
|||||||
val totalMessages = messageReader.getMessagesCount()
|
val totalMessages = messageReader.getMessagesCount()
|
||||||
for (threadId in conversationIds) {
|
for (threadId in conversationIds) {
|
||||||
writer.beginObject()
|
writer.beginObject()
|
||||||
if (config.exportSms) {
|
if (config.exportSms && messageReader.getSmsCount() > 0) {
|
||||||
writer.name("sms")
|
writer.name("sms")
|
||||||
writer.beginArray()
|
writer.beginArray()
|
||||||
messageReader.forEachSms(threadId) {
|
messageReader.forEachSms(threadId) {
|
||||||
@@ -43,7 +43,7 @@ class MessagesExporter(private val context: Context) {
|
|||||||
writer.endArray()
|
writer.endArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.exportMms) {
|
if (config.exportMms && messageReader.getMmsCount() > 0) {
|
||||||
writer.name("mms")
|
writer.name("mms")
|
||||||
writer.beginArray()
|
writer.beginArray()
|
||||||
messageReader.forEachMms(threadId) {
|
messageReader.forEachMms(threadId) {
|
||||||
|
@@ -16,7 +16,7 @@ import java.io.File
|
|||||||
|
|
||||||
class MessagesImporter(private val context: Context) {
|
class MessagesImporter(private val context: Context) {
|
||||||
enum class ImportResult {
|
enum class ImportResult {
|
||||||
IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL
|
IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL, IMPORT_NOTHING_NEW
|
||||||
}
|
}
|
||||||
|
|
||||||
private val gson = Gson()
|
private val gson = Gson()
|
||||||
@@ -39,18 +39,22 @@ class MessagesImporter(private val context: Context) {
|
|||||||
val json = reader.readText()
|
val json = reader.readText()
|
||||||
val type = object : TypeToken<List<ExportedMessage>>() {}.type
|
val type = object : TypeToken<List<ExportedMessage>>() {}.type
|
||||||
val messages = gson.fromJson<List<ExportedMessage>>(json, type)
|
val messages = gson.fromJson<List<ExportedMessage>>(json, type)
|
||||||
val totalMessages = messages.flatMap { it.sms }.size + messages.flatMap { it.mms }.size
|
val totalMessages = messages.flatMap { it.sms ?: emptyList() }.size + messages.flatMap { it.mms ?: emptyList() }.size
|
||||||
|
if (totalMessages <= 0) {
|
||||||
|
callback.invoke(IMPORT_NOTHING_NEW)
|
||||||
|
return@ensureBackgroundThread
|
||||||
|
}
|
||||||
onProgress.invoke(totalMessages, messagesImported)
|
onProgress.invoke(totalMessages, messagesImported)
|
||||||
for (message in messages) {
|
for (message in messages) {
|
||||||
if (config.importSms) {
|
if (config.importSms) {
|
||||||
message.sms.forEach { backup ->
|
message.sms?.forEach { backup ->
|
||||||
messageWriter.writeSmsMessage(backup)
|
messageWriter.writeSmsMessage(backup)
|
||||||
messagesImported++
|
messagesImported++
|
||||||
onProgress.invoke(totalMessages, messagesImported)
|
onProgress.invoke(totalMessages, messagesImported)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (config.importMms) {
|
if (config.importMms) {
|
||||||
message.mms.forEach { backup ->
|
message.mms?.forEach { backup ->
|
||||||
messageWriter.writeMmsMessage(backup)
|
messageWriter.writeMmsMessage(backup)
|
||||||
messagesImported++
|
messagesImported++
|
||||||
onProgress.invoke(totalMessages, messagesImported)
|
onProgress.invoke(totalMessages, messagesImported)
|
||||||
|
@@ -105,7 +105,7 @@ class MessagesReader(private val context: Context) {
|
|||||||
val transactionId = cursor.getStringValueOrNull(Mms.TRANSACTION_ID)
|
val transactionId = cursor.getStringValueOrNull(Mms.TRANSACTION_ID)
|
||||||
|
|
||||||
val parts = getParts(mmsId)
|
val parts = getParts(mmsId)
|
||||||
val addresses = getMMSAddresses(mmsId)
|
val addresses = getMmsAddresses(mmsId)
|
||||||
block(
|
block(
|
||||||
MmsBackup(
|
MmsBackup(
|
||||||
creator,
|
creator,
|
||||||
@@ -197,7 +197,7 @@ class MessagesReader(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private fun getMMSAddresses(messageId: Long): List<MmsAddress> {
|
private fun getMmsAddresses(messageId: Long): List<MmsAddress> {
|
||||||
val addresses = mutableListOf<MmsAddress>()
|
val addresses = mutableListOf<MmsAddress>()
|
||||||
val uri = if (isRPlus()) Mms.Addr.getAddrUriForMessage(messageId.toString()) else Uri.parse("content://mms/$messageId/addr")
|
val uri = if (isRPlus()) Mms.Addr.getAddrUriForMessage(messageId.toString()) else Uri.parse("content://mms/$messageId/addr")
|
||||||
val projection = arrayOf(Mms.Addr.ADDRESS, Mms.Addr.TYPE, Mms.Addr.CHARSET)
|
val projection = arrayOf(Mms.Addr.ADDRESS, Mms.Addr.TYPE, Mms.Addr.CHARSET)
|
||||||
@@ -213,7 +213,15 @@ class MessagesReader(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getMessagesCount(): Int {
|
fun getMessagesCount(): Int {
|
||||||
return countRows(Sms.CONTENT_URI) + countRows(Mms.CONTENT_URI)
|
return getSmsCount() + getMmsCount()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getMmsCount(): Int {
|
||||||
|
return countRows(Mms.CONTENT_URI)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSmsCount(): Int {
|
||||||
|
return countRows(Sms.CONTENT_URI)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun countRows(uri: Uri): Int {
|
private fun countRows(uri: Uri): Int {
|
||||||
|
@@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName
|
|||||||
|
|
||||||
data class ExportedMessage(
|
data class ExportedMessage(
|
||||||
@SerializedName("sms")
|
@SerializedName("sms")
|
||||||
val sms: List<SmsBackup>,
|
val sms: List<SmsBackup>?,
|
||||||
@SerializedName("mms")
|
@SerializedName("mms")
|
||||||
val mms: List<MmsBackup>,
|
val mms: List<MmsBackup>?,
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user