From df8f9761b27f6d9651a3704c2dea6b32bfab9d34 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 24 Jan 2023 13:49:25 -0500 Subject: [PATCH] Fix incorrect total sms export count. --- .../exporter/SignalSmsExportReader.kt | 59 ++++++------------- .../exporter/SignalSmsExportService.kt | 2 - 2 files changed, 19 insertions(+), 42 deletions(-) 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 3322cdfded..db7ce8a8ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt @@ -21,8 +21,7 @@ import kotlin.time.Duration.Companion.milliseconds * we "page" through the unexported messages to reduce chances of exceeding that limit. */ class SignalSmsExportReader( - private val smsDatabase: MessageTable = SignalDatabase.messages, - private val mmsDatabase: MessageTable = SignalDatabase.messages + private val messageTable: MessageTable = SignalDatabase.messages ) : Iterable, Closeable { companion object { @@ -30,53 +29,52 @@ class SignalSmsExportReader( private const val CURSOR_LIMIT = 1000 } - private var mmsReader: MessageTable.MmsReader? = null - private var mmsDone: Boolean = false + private var messageReader: MessageTable.MmsReader? = null + private var done: Boolean = false override fun iterator(): Iterator { return ExportableMessageIterator() } fun getCount(): Int { - return smsDatabase.unexportedInsecureMessagesCount + mmsDatabase.unexportedInsecureMessagesCount + return messageTable.unexportedInsecureMessagesCount } override fun close() { - mmsReader?.close() + messageReader?.close() } private fun refreshReaders() { - if (!mmsDone) { - mmsReader?.close() - mmsReader = null + if (!done) { + messageReader?.close() + messageReader = null - val refreshedMmsReader = MessageTable.mmsReaderFor(mmsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) + val refreshedMmsReader = MessageTable.mmsReaderFor(messageTable.getUnexportedInsecureMessages(CURSOR_LIMIT)) if (refreshedMmsReader.count > 0) { - mmsReader = refreshedMmsReader + messageReader = refreshedMmsReader return } else { refreshedMmsReader.close() - mmsDone = true + done = true } } } private inner class ExportableMessageIterator : Iterator { - private var smsIterator: Iterator? = null - private var mmsIterator: Iterator? = null + private var messageIterator: Iterator? = null private fun refreshIterators() { refreshReaders() - mmsIterator = mmsReader?.iterator() + messageIterator = messageReader?.iterator() } override fun hasNext(): Boolean { - if (mmsIterator?.hasNext() == true) { + if (messageIterator?.hasNext() == true) { return true - } else if (!mmsDone) { + } else if (!done) { refreshIterators() - if (mmsIterator?.hasNext() == true) { + if (messageIterator?.hasNext() == true) { return true } } @@ -87,9 +85,9 @@ class SignalSmsExportReader( override fun next(): ExportableMessage { var record: MessageRecord? = null try { - return if (mmsIterator?.hasNext() == true) { - record = mmsIterator!!.next() - readExportableMmsMessageFromRecord(record, mmsReader!!.messageExportStateForCurrentRecord) + return if (messageIterator?.hasNext() == true) { + record = messageIterator!!.next() + readExportableMmsMessageFromRecord(record, messageReader!!.messageExportStateForCurrentRecord) } else { throw NoSuchElementException() } @@ -149,25 +147,6 @@ class SignalSmsExportReader( ) } - private fun readExportableSmsMessageFromRecord(record: MessageRecord, exportState: MessageExportState): ExportableMessage { - val threadRecipient = SignalDatabase.threads.getRecipientForThreadId(record.threadId) - - return if (threadRecipient?.isMmsGroup == true) { - readExportableMmsMessageFromRecord(record, exportState) - } else { - ExportableMessage.Sms( - id = MessageId(record.id), - exportState = mapExportState(exportState), - address = record.recipient.smsExportAddress(), - dateReceived = record.dateReceived.milliseconds, - dateSent = record.dateSent.milliseconds, - isRead = true, - isOutgoing = record.isOutgoing, - body = record.body - ) - } - } - private fun mapExportState(messageExportState: MessageExportState): SmsExportState { return SmsExportState( messageId = messageExportState.messageId, 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 44f4f6bf16..e4cc91bb6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportService.kt @@ -84,12 +84,10 @@ class SignalSmsExportService : SmsExportService() { override fun clearPreviousExportState() { SignalDatabase.messages.clearExportState() - SignalDatabase.messages.clearExportState() } override fun prepareForExport() { SignalDatabase.messages.clearInsecureMessageExportedErrorStatus() - SignalDatabase.messages.clearInsecureMessageExportedErrorStatus() } override fun getUnexportedMessageCount(): Int {