kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix incorrect total sms export count.
rodzic
657c5d2bce
commit
df8f9761b2
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Ładowanie…
Reference in New Issue