Fix incorrect total sms export count.

main
Cody Henthorne 2023-01-24 13:49:25 -05:00 zatwierdzone przez GitHub
rodzic 657c5d2bce
commit df8f9761b2
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 19 dodań i 42 usunięć

Wyświetl plik

@ -21,8 +21,7 @@ import kotlin.time.Duration.Companion.milliseconds
* we "page" through the unexported messages to reduce chances of exceeding that limit. * we "page" through the unexported messages to reduce chances of exceeding that limit.
*/ */
class SignalSmsExportReader( class SignalSmsExportReader(
private val smsDatabase: MessageTable = SignalDatabase.messages, private val messageTable: MessageTable = SignalDatabase.messages
private val mmsDatabase: MessageTable = SignalDatabase.messages
) : Iterable<ExportableMessage>, Closeable { ) : Iterable<ExportableMessage>, Closeable {
companion object { companion object {
@ -30,53 +29,52 @@ class SignalSmsExportReader(
private const val CURSOR_LIMIT = 1000 private const val CURSOR_LIMIT = 1000
} }
private var mmsReader: MessageTable.MmsReader? = null private var messageReader: MessageTable.MmsReader? = null
private var mmsDone: Boolean = false private var done: Boolean = false
override fun iterator(): Iterator<ExportableMessage> { override fun iterator(): Iterator<ExportableMessage> {
return ExportableMessageIterator() return ExportableMessageIterator()
} }
fun getCount(): Int { fun getCount(): Int {
return smsDatabase.unexportedInsecureMessagesCount + mmsDatabase.unexportedInsecureMessagesCount return messageTable.unexportedInsecureMessagesCount
} }
override fun close() { override fun close() {
mmsReader?.close() messageReader?.close()
} }
private fun refreshReaders() { private fun refreshReaders() {
if (!mmsDone) { if (!done) {
mmsReader?.close() messageReader?.close()
mmsReader = null messageReader = null
val refreshedMmsReader = MessageTable.mmsReaderFor(mmsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) val refreshedMmsReader = MessageTable.mmsReaderFor(messageTable.getUnexportedInsecureMessages(CURSOR_LIMIT))
if (refreshedMmsReader.count > 0) { if (refreshedMmsReader.count > 0) {
mmsReader = refreshedMmsReader messageReader = refreshedMmsReader
return return
} else { } else {
refreshedMmsReader.close() refreshedMmsReader.close()
mmsDone = true done = true
} }
} }
} }
private inner class ExportableMessageIterator : Iterator<ExportableMessage> { private inner class ExportableMessageIterator : Iterator<ExportableMessage> {
private var smsIterator: Iterator<MessageRecord>? = null private var messageIterator: Iterator<MessageRecord>? = null
private var mmsIterator: Iterator<MessageRecord>? = null
private fun refreshIterators() { private fun refreshIterators() {
refreshReaders() refreshReaders()
mmsIterator = mmsReader?.iterator() messageIterator = messageReader?.iterator()
} }
override fun hasNext(): Boolean { override fun hasNext(): Boolean {
if (mmsIterator?.hasNext() == true) { if (messageIterator?.hasNext() == true) {
return true return true
} else if (!mmsDone) { } else if (!done) {
refreshIterators() refreshIterators()
if (mmsIterator?.hasNext() == true) { if (messageIterator?.hasNext() == true) {
return true return true
} }
} }
@ -87,9 +85,9 @@ class SignalSmsExportReader(
override fun next(): ExportableMessage { override fun next(): ExportableMessage {
var record: MessageRecord? = null var record: MessageRecord? = null
try { try {
return if (mmsIterator?.hasNext() == true) { return if (messageIterator?.hasNext() == true) {
record = mmsIterator!!.next() record = messageIterator!!.next()
readExportableMmsMessageFromRecord(record, mmsReader!!.messageExportStateForCurrentRecord) readExportableMmsMessageFromRecord(record, messageReader!!.messageExportStateForCurrentRecord)
} else { } else {
throw NoSuchElementException() 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 { private fun mapExportState(messageExportState: MessageExportState): SmsExportState {
return SmsExportState( return SmsExportState(
messageId = messageExportState.messageId, messageId = messageExportState.messageId,

Wyświetl plik

@ -84,12 +84,10 @@ class SignalSmsExportService : SmsExportService() {
override fun clearPreviousExportState() { override fun clearPreviousExportState() {
SignalDatabase.messages.clearExportState() SignalDatabase.messages.clearExportState()
SignalDatabase.messages.clearExportState()
} }
override fun prepareForExport() { override fun prepareForExport() {
SignalDatabase.messages.clearInsecureMessageExportedErrorStatus() SignalDatabase.messages.clearInsecureMessageExportedErrorStatus()
SignalDatabase.messages.clearInsecureMessageExportedErrorStatus()
} }
override fun getUnexportedMessageCount(): Int { override fun getUnexportedMessageCount(): Int {