Allow pinned messages to be resendable.

This commit is contained in:
Michelle Tang
2025-12-09 10:08:19 -05:00
parent 6fba1b0153
commit dda020b2bf
9 changed files with 43 additions and 21 deletions

View File

@@ -238,7 +238,7 @@ class ConversationRepository(
.distinctBy { it.id }
val eligibleTargets: List<Recipient> = RecipientUtil.getEligibleForSending(possibleTargets)
val results = sendEndPoll(threadRecipient, message, eligibleTargets)
val results = sendEndPoll(threadRecipient, message, eligibleTargets, poll.messageId)
val sendResults = GroupSendJobHelper.getCompletedSends(eligibleTargets, results)
if (sendResults.completed.isNotEmpty() || possibleTargets.isEmpty()) {
@@ -271,7 +271,7 @@ class ConversationRepository(
}
@Throws(IOException::class, GroupNotAMemberException::class, UndeliverableMessageException::class)
fun sendEndPoll(group: Recipient, message: OutgoingMessage, destinations: List<Recipient>): List<SendMessageResult?> {
fun sendEndPoll(group: Recipient, message: OutgoingMessage, destinations: List<Recipient>, messageId: Long): List<SendMessageResult?> {
val groupId = group.requireGroupId().requireV2()
val groupRecord: GroupRecord? = SignalDatabase.groups.getGroup(group.requireGroupId()).getOrNull()
@@ -291,14 +291,18 @@ class ConversationRepository(
.withPollTerminate(SignalServiceDataMessage.PollTerminate(message.messageExtras!!.pollTerminate!!.targetTimestamp))
.build()
return GroupSendUtil.sendUnresendableDataMessage(
return GroupSendUtil.sendResendableDataMessage(
applicationContext,
groupId,
null,
destinations,
false,
ContentHint.DEFAULT,
ContentHint.RESENDABLE,
MessageId(messageId),
groupMessage,
false
true,
false,
null
) { System.currentTimeMillis() - sentTime > POLL_TERMINATE_TIMEOUT.inWholeMilliseconds }
}
@@ -336,7 +340,7 @@ class ConversationRepository(
}
val eligibleTargets = RecipientUtil.getEligibleForSending(possibleTargets)
val results = PinSendUtil.sendPinMessage(applicationContext, threadRecipient, message, eligibleTargets)
val results = PinSendUtil.sendPinMessage(applicationContext, threadRecipient, message, eligibleTargets, messageRecord.id)
val sendResults = GroupSendJobHelper.getCompletedSends(eligibleTargets, results)
@@ -393,7 +397,7 @@ class ConversationRepository(
}
val eligibleTargets: List<Recipient> = RecipientUtil.getEligibleForSending(possibleTargets)
val results = PinSendUtil.sendUnpinMessage(applicationContext, threadRecipient, message.fromRecipient.requireServiceId(), message.dateSent, eligibleTargets)
val results = PinSendUtil.sendUnpinMessage(applicationContext, threadRecipient, message.fromRecipient.requireServiceId(), message.dateSent, eligibleTargets, messageId)
val sendResults = GroupSendJobHelper.getCompletedSends(eligibleTargets, results)
if (sendResults.completed.isNotEmpty() || possibleTargets.isEmpty()) {

View File

@@ -6,6 +6,7 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
import org.thoughtcrime.securesms.database.MessageTable
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.GroupRecord
import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.groups.GroupAccessControl
import org.thoughtcrime.securesms.groups.GroupNotAMemberException
@@ -30,7 +31,7 @@ object PinSendUtil {
private val PIN_TERMINATE_TIMEOUT = 7000.milliseconds
@Throws(IOException::class, GroupNotAMemberException::class, UndeliverableMessageException::class)
fun sendPinMessage(applicationContext: Context, threadRecipient: Recipient, message: OutgoingMessage, destinations: List<Recipient>): List<SendMessageResult?> {
fun sendPinMessage(applicationContext: Context, threadRecipient: Recipient, message: OutgoingMessage, destinations: List<Recipient>, relatedMessageId: Long): List<SendMessageResult?> {
val builder = newBuilder()
val groupId = if (threadRecipient.isPushV2Group) threadRecipient.requireGroupId().requireV2() else null
@@ -57,19 +58,23 @@ object PinSendUtil {
)
.build()
return GroupSendUtil.sendUnresendableDataMessage(
return GroupSendUtil.sendResendableDataMessage(
applicationContext,
groupId,
null,
destinations,
false,
ContentHint.DEFAULT,
ContentHint.RESENDABLE,
MessageId(relatedMessageId),
message,
false
false,
false,
null
) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds }
}
@Throws(IOException::class, GroupNotAMemberException::class, UndeliverableMessageException::class)
fun sendUnpinMessage(applicationContext: Context, threadRecipient: Recipient, targetAuthor: ServiceId, targetSentTimestamp: Long, destinations: List<Recipient>): List<SendMessageResult?> {
fun sendUnpinMessage(applicationContext: Context, threadRecipient: Recipient, targetAuthor: ServiceId, targetSentTimestamp: Long, destinations: List<Recipient>, relatedMessageId: Long): List<SendMessageResult?> {
val builder = newBuilder()
val groupId = if (threadRecipient.isPushV2Group) threadRecipient.requireGroupId().requireV2() else null
if (groupId != null) {
@@ -93,14 +98,18 @@ object PinSendUtil {
)
.build()
return GroupSendUtil.sendUnresendableDataMessage(
return GroupSendUtil.sendResendableDataMessage(
applicationContext,
groupId,
null,
destinations,
false,
ContentHint.DEFAULT,
ContentHint.RESENDABLE,
MessageId(relatedMessageId),
message,
false
false,
false,
null
) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds }
}
}