diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java index 29d97c95d..a7b3eaf78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java @@ -5300,6 +5300,10 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie } } + public MessageId getCurrentId() { + return new MessageId(CursorUtil.requireLong(cursor, ID)); + } + @Override public @NonNull MessageExportState getMessageExportStateForCurrentRecord() { byte[] messageExportState = CursorUtil.requireBlob(cursor, MessageTable.EXPORT_STATE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt index db7ce8a8e..6abe9c3de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.exporter +import org.json.JSONException import org.signal.core.util.logging.Log import org.signal.smsexporter.ExportableMessage import org.signal.smsexporter.SmsExportState @@ -92,6 +93,11 @@ class SignalSmsExportReader( throw NoSuchElementException() } } catch (e: Throwable) { + if (e.cause is JSONException) { + Log.w(TAG, "Error processing attachment json, skipping message.", e) + return ExportableMessage.Skip(messageReader!!.currentId) + } + Log.w(TAG, "Error processing message: isMms: ${record?.isMms} type: ${record?.type}") throw e } diff --git a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt index e4cc91bb6..9758b8c16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt @@ -180,6 +180,7 @@ class SignalSmsExportService : SmsExportService() { val messageId: Any = when (this) { is ExportableMessage.Mms<*> -> id is ExportableMessage.Sms<*> -> id + is ExportableMessage.Skip<*> -> id } if (messageId is MessageId) { diff --git a/sms-exporter/lib/src/main/java/org/signal/smsexporter/ExportableMessage.kt b/sms-exporter/lib/src/main/java/org/signal/smsexporter/ExportableMessage.kt index 43609d9c6..ca432f886 100644 --- a/sms-exporter/lib/src/main/java/org/signal/smsexporter/ExportableMessage.kt +++ b/sms-exporter/lib/src/main/java/org/signal/smsexporter/ExportableMessage.kt @@ -61,4 +61,9 @@ sealed interface ExportableMessage { } } } + + data class Skip( + val id: ID, + override val exportState: SmsExportState = SmsExportState() + ) : ExportableMessage } diff --git a/sms-exporter/lib/src/main/java/org/signal/smsexporter/SmsExportService.kt b/sms-exporter/lib/src/main/java/org/signal/smsexporter/SmsExportService.kt index afa942a0f..11666dda0 100644 --- a/sms-exporter/lib/src/main/java/org/signal/smsexporter/SmsExportService.kt +++ b/sms-exporter/lib/src/main/java/org/signal/smsexporter/SmsExportService.kt @@ -80,6 +80,10 @@ abstract class SmsExportService : Service() { val successful = when (message) { is ExportableMessage.Sms<*> -> exportSms(exportState, message) is ExportableMessage.Mms<*> -> exportMms(exportState, message) + is ExportableMessage.Skip<*> -> { + onMessageExportSucceeded(message) + true + } } if (!successful) {