Add internal tool to jump to message by timestamp.
This commit is contained in:
parent
d7c2e6844b
commit
105c2bdded
2 changed files with 60 additions and 0 deletions
|
@ -6,6 +6,7 @@ import android.content.Context
|
|||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import android.widget.Toast
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
|
@ -28,6 +29,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsText
|
|||
import org.thoughtcrime.securesms.components.settings.app.privacy.advanced.AdvancedPrivacySettingsRepository
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsRepository
|
||||
import org.thoughtcrime.securesms.components.settings.configure
|
||||
import org.thoughtcrime.securesms.conversation.ConversationIntents
|
||||
import org.thoughtcrime.securesms.database.JobDatabase
|
||||
import org.thoughtcrime.securesms.database.LocalMetricsDatabase
|
||||
import org.thoughtcrime.securesms.database.LogDatabase
|
||||
|
@ -35,6 +37,7 @@ import org.thoughtcrime.securesms.database.MegaphoneDatabase
|
|||
import org.thoughtcrime.securesms.database.OneTimePreKeyTable
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.jobmanager.JobTracker
|
||||
import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob
|
||||
|
@ -52,6 +55,7 @@ import org.thoughtcrime.securesms.megaphone.MegaphoneRepository
|
|||
import org.thoughtcrime.securesms.megaphone.Megaphones
|
||||
import org.thoughtcrime.securesms.payments.DataExportUtil
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncHelper
|
||||
import org.thoughtcrime.securesms.util.ConversationUtil
|
||||
import org.thoughtcrime.securesms.util.Util
|
||||
|
@ -149,6 +153,14 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
|
|||
onUnregisterClicked()
|
||||
}
|
||||
)
|
||||
|
||||
clickPref(
|
||||
title = DSLSettingsText.from("Jump to message"),
|
||||
summary = DSLSettingsText.from("Find and jump to a message via its sentTimestamp."),
|
||||
onClick = {
|
||||
promptUserForSentTimestamp()
|
||||
}
|
||||
)
|
||||
dividerPref()
|
||||
|
||||
sectionHeaderPref(DSLSettingsText.from("Playgrounds"))
|
||||
|
@ -1033,4 +1045,43 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
|
|||
Toast.makeText(requireContext(), "Dumped to logs", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun promptUserForSentTimestamp() {
|
||||
val input = EditText(requireContext()).apply {
|
||||
inputType = android.text.InputType.TYPE_CLASS_NUMBER
|
||||
}
|
||||
|
||||
MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle("Enter sentTimestamp")
|
||||
.setView(input)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
val number = input.text.toString().toLongOrNull()
|
||||
if (number == null) {
|
||||
Toast.makeText(requireContext(), "Failed to parse timestamp!", Toast.LENGTH_SHORT).show()
|
||||
return@setPositiveButton
|
||||
}
|
||||
|
||||
val messages = SignalDatabase.messages.getMessagesBySentTimestamp(number)
|
||||
if (messages.isEmpty()) {
|
||||
Toast.makeText(requireContext(), "Could not find a message with that timestamp!", Toast.LENGTH_SHORT).show()
|
||||
return@setPositiveButton
|
||||
}
|
||||
|
||||
if (messages.size > 1) {
|
||||
Toast.makeText(requireContext(), "There's ${messages.size} messages with that timestamp! Go run SQL or something.", Toast.LENGTH_SHORT).show()
|
||||
return@setPositiveButton
|
||||
}
|
||||
|
||||
val message: MessageRecord = messages[0]
|
||||
val startingPosition = SignalDatabase.messages.getMessagePositionInConversation(message.threadId, message.dateReceived)
|
||||
val intent = ConversationIntents
|
||||
.createBuilderSync(requireContext(), RecipientId.UNKNOWN, message.threadId)
|
||||
.withStartingPosition(startingPosition)
|
||||
.build()
|
||||
|
||||
startActivity(intent)
|
||||
}
|
||||
.setNegativeButton("Cancel", null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -627,6 +627,15 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
|||
return rawQueryWithAttachments(where, null)
|
||||
}
|
||||
|
||||
fun getMessagesBySentTimestamp(sentTimestamp: Long): List<MessageRecord> {
|
||||
return readableDatabase
|
||||
.select(*MMS_PROJECTION)
|
||||
.from(TABLE_NAME)
|
||||
.where("$DATE_SENT = $sentTimestamp")
|
||||
.run()
|
||||
.readToList { MmsReader(it).getCurrent() }
|
||||
}
|
||||
|
||||
fun getMessageCursor(messageId: Long): Cursor {
|
||||
return internalGetMessage(messageId)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue