Move cancel and retry to bg thread.

This commit is contained in:
Alex Hart
2025-04-15 13:15:16 -03:00
committed by GitHub
parent 44bfa514a5
commit 250ac481c8
4 changed files with 39 additions and 18 deletions

View File

@@ -5,6 +5,8 @@
package org.thoughtcrime.securesms.conversation.clicklisteners
import android.view.View
import kotlinx.collections.immutable.toPersistentList
import org.signal.core.util.concurrent.SignalExecutors
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
import org.thoughtcrime.securesms.dependencies.AppDependencies
@@ -14,27 +16,37 @@ import org.thoughtcrime.securesms.jobs.AttachmentUploadJob
import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.mms.SlidesClickedListener
/**
* Cancels all attachments passed through to the callback.
*
* Creates a persistent copy of the handed list of slides to prevent off-thread
* manipulation.
*/
internal class AttachmentCancelClickListener : SlidesClickedListener {
override fun onClick(v: View, slides: List<Slide>) {
Log.i(TAG, "Canceling compression/upload/download jobs for ${slides.size} items")
val jobManager = AppDependencies.jobManager
var cancelCount = 0
for (slide in slides) {
val attachmentId = (slide.asAttachment() as DatabaseAttachment).attachmentId
val jobsToCancel = jobManager.find {
when (it.factoryKey) {
AttachmentDownloadJob.KEY -> AttachmentDownloadJob.jobSpecMatchesAttachmentId(it, attachmentId)
AttachmentCompressionJob.KEY -> AttachmentCompressionJob.jobSpecMatchesAttachmentId(it, attachmentId)
AttachmentUploadJob.KEY -> AttachmentUploadJob.jobSpecMatchesAttachmentId(it, attachmentId)
else -> false
override fun onClick(unused: View, slides: List<Slide>) {
val toCancel = slides.toPersistentList()
Log.i(TAG, "Canceling compression/upload/download jobs for ${toCancel.size} items")
SignalExecutors.BOUNDED_IO.execute {
var cancelCount = 0
for (slide in toCancel) {
val attachmentId = (slide.asAttachment() as DatabaseAttachment).attachmentId
val jobsToCancel = AppDependencies.jobManager.find {
when (it.factoryKey) {
AttachmentDownloadJob.KEY -> AttachmentDownloadJob.jobSpecMatchesAttachmentId(it, attachmentId)
AttachmentCompressionJob.KEY -> AttachmentCompressionJob.jobSpecMatchesAttachmentId(it, attachmentId)
AttachmentUploadJob.KEY -> AttachmentUploadJob.jobSpecMatchesAttachmentId(it, attachmentId)
else -> false
}
}
jobsToCancel.forEach {
AppDependencies.jobManager.cancel(it.id)
cancelCount++
}
}
jobsToCancel.forEach {
jobManager.cancel(it.id)
cancelCount++
}
Log.i(TAG, "Canceled $cancelCount jobs.")
}
Log.i(TAG, "Canceled $cancelCount jobs.")
}
companion object {

View File

@@ -6,6 +6,7 @@
package org.thoughtcrime.securesms.conversation.clicklisteners
import android.view.View
import org.signal.core.util.concurrent.SignalExecutors
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.mms.Slide
@@ -19,7 +20,9 @@ class ResendClickListener(private val messageRecord: MessageRecord) : SlidesClic
return
}
MessageSender.resend(v.context, messageRecord)
SignalExecutors.BOUNDED.execute {
MessageSender.resend(v.context, messageRecord)
}
}
companion object {