mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Allow 1:1 polls and raise character limit.
This commit is contained in:
committed by
jeffrey-signal
parent
fd635542c0
commit
f7d87f3436
@@ -124,6 +124,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||
object DataMessageProcessor {
|
||||
|
||||
private const val BODY_RANGE_PROCESSING_LIMIT = 250
|
||||
private const val POLL_QUESTION_CHARACTER_LIMIT = 200
|
||||
private const val POLL_CHARACTER_LIMIT = 100
|
||||
private const val POLL_OPTIONS_LIMIT = 10
|
||||
|
||||
@@ -1066,28 +1067,23 @@ object DataMessageProcessor {
|
||||
groupId: GroupId.V2?,
|
||||
receivedTime: Long
|
||||
): InsertResult? {
|
||||
if (!RemoteConfig.receivePolls) {
|
||||
log(envelope.timestamp!!, "Poll creation not allowed due to remote config.")
|
||||
return null
|
||||
}
|
||||
|
||||
log(envelope.timestamp!!, "Handle poll creation")
|
||||
val poll: DataMessage.PollCreate = message.pollCreate!!
|
||||
|
||||
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient, threadRecipient, groupId, message.expireTimerDuration, message.expireTimerVersion, receivedTime)
|
||||
|
||||
if (groupId == null) {
|
||||
warn(envelope.timestamp!!, "[handlePollCreate] Polls can only be sent to groups. author: $senderRecipient")
|
||||
if (groupId != null) {
|
||||
val groupRecord = SignalDatabase.groups.getGroup(groupId).orNull()
|
||||
if (groupRecord != null && !groupRecord.members.contains(senderRecipient.id)) {
|
||||
warn(envelope.timestamp!!, "[handlePollCreate] Poll author is not in the group. author $senderRecipient")
|
||||
return null
|
||||
}
|
||||
} else if (senderRecipient.id != threadRecipient.id && senderRecipient.id != Recipient.self().id) {
|
||||
warn(envelope.timestamp!!, "[handlePollCreate] Sender is not a part of the 1:1 thread!")
|
||||
return null
|
||||
}
|
||||
|
||||
val groupRecord = SignalDatabase.groups.getGroup(groupId).orNull()
|
||||
if (groupRecord == null || !groupRecord.members.contains(senderRecipient.id)) {
|
||||
warn(envelope.timestamp!!, "[handlePollCreate] Poll author is not in the group. author $senderRecipient")
|
||||
return null
|
||||
}
|
||||
|
||||
if (poll.question == null || poll.question!!.isEmpty() || poll.question!!.length > POLL_CHARACTER_LIMIT) {
|
||||
if (poll.question == null || poll.question!!.isEmpty() || poll.question!!.length > POLL_QUESTION_CHARACTER_LIMIT) {
|
||||
warn(envelope.timestamp!!, "[handlePollCreate] Poll question is invalid.")
|
||||
return null
|
||||
}
|
||||
@@ -1136,11 +1132,6 @@ object DataMessageProcessor {
|
||||
groupId: GroupId.V2?,
|
||||
receivedTime: Long
|
||||
): InsertResult? {
|
||||
if (!RemoteConfig.receivePolls) {
|
||||
log(envelope.timestamp!!, "Poll terminate not allowed due to remote config.")
|
||||
return null
|
||||
}
|
||||
|
||||
val pollTerminate: DataMessage.PollTerminate = message.pollTerminate!!
|
||||
val targetSentTimestamp = pollTerminate.targetSentTimestamp!!
|
||||
|
||||
@@ -1189,11 +1180,6 @@ object DataMessageProcessor {
|
||||
senderRecipient: Recipient,
|
||||
earlyMessageCacheEntry: EarlyMessageCacheEntry?
|
||||
): MessageId? {
|
||||
if (!RemoteConfig.receivePolls) {
|
||||
log(envelope.timestamp!!, "Poll vote not allowed due to remote config.")
|
||||
return null
|
||||
}
|
||||
|
||||
val pollVote: DataMessage.PollVote = message.pollVote!!
|
||||
val targetSentTimestamp = pollVote.targetSentTimestamp!!
|
||||
|
||||
@@ -1578,14 +1564,12 @@ object DataMessageProcessor {
|
||||
}
|
||||
|
||||
val groupRecord = SignalDatabase.groups.getGroup(targetThread.recipient.id).orNull()
|
||||
if (groupRecord == null) {
|
||||
warn(envelope.timestamp!!, "[handlePollValidation] Target thread needs to be a group. timestamp: $targetSentTimestamp author: ${targetAuthor.id}")
|
||||
return null
|
||||
}
|
||||
|
||||
if (!groupRecord.members.contains(senderRecipient.id)) {
|
||||
if (groupRecord != null && !groupRecord.members.contains(senderRecipient.id)) {
|
||||
warn(envelope.timestamp!!, "[handlePollValidation] Sender is not in the group. timestamp: $targetSentTimestamp author: ${targetAuthor.id}")
|
||||
return null
|
||||
} else if (groupRecord == null && senderRecipient.id != targetThread.recipient.id && senderRecipient.id != Recipient.self().id) {
|
||||
warn(envelope.timestamp!!, "[handlePollValidation] Sender is not a part of the 1:1 thread!")
|
||||
return null
|
||||
}
|
||||
|
||||
return MessageId(targetMessage.id)
|
||||
|
||||
@@ -1744,18 +1744,9 @@ object SyncMessageProcessor {
|
||||
sent: Sent,
|
||||
senderRecipient: Recipient
|
||||
): Long {
|
||||
if (!RemoteConfig.receivePolls) {
|
||||
log(envelope.timestamp!!, "Sync poll create not allowed due to remote config.")
|
||||
}
|
||||
|
||||
log(envelope.timestamp!!, "Synchronize sent poll creation message.")
|
||||
|
||||
val recipient = getSyncMessageDestination(sent)
|
||||
if (!recipient.isGroup) {
|
||||
warn(envelope.timestamp!!, "Poll creation messages should only be synced in groups. Dropping.")
|
||||
return -1
|
||||
}
|
||||
|
||||
val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient)
|
||||
|
||||
val expiresInMillis = message.expireTimerDuration.inWholeMilliseconds
|
||||
@@ -1777,8 +1768,12 @@ object SyncMessageProcessor {
|
||||
question = poll.question!!
|
||||
)
|
||||
|
||||
val messageId = SignalDatabase.messages.insertMessageOutbox(outgoingMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null).messageId
|
||||
updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId())
|
||||
val receiptStatus = if (recipient.isGroup) GroupReceiptTable.STATUS_UNKNOWN else GroupReceiptTable.STATUS_UNDELIVERED
|
||||
val messageId = SignalDatabase.messages.insertMessageOutbox(outgoingMessage, threadId, false, receiptStatus, null).messageId
|
||||
|
||||
if (recipient.isGroup) {
|
||||
updateGroupReceiptStatus(sent, messageId, recipient.requireGroupId())
|
||||
}
|
||||
|
||||
log(envelope.timestamp!!, "Inserted sync poll create message as messageId $messageId")
|
||||
|
||||
@@ -1799,18 +1794,9 @@ object SyncMessageProcessor {
|
||||
senderRecipient: Recipient,
|
||||
earlyMessageCacheEntry: EarlyMessageCacheEntry?
|
||||
): Long {
|
||||
if (!RemoteConfig.receivePolls) {
|
||||
log(envelope.timestamp!!, "Sync poll end not allowed due to remote config.")
|
||||
}
|
||||
|
||||
log(envelope.timestamp!!, "Synchronize sent poll terminate message")
|
||||
|
||||
val recipient = getSyncMessageDestination(sent)
|
||||
if (!recipient.isGroup) {
|
||||
warn(envelope.timestamp!!, "Poll termination messages should only be synced in groups. Dropping.")
|
||||
return -1
|
||||
}
|
||||
|
||||
val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient)
|
||||
|
||||
val expiresInMillis = message.expireTimerDuration.inWholeMilliseconds
|
||||
@@ -1847,7 +1833,8 @@ object SyncMessageProcessor {
|
||||
)
|
||||
)
|
||||
|
||||
val messageId = SignalDatabase.messages.insertMessageOutbox(outgoingMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null).messageId
|
||||
val receiptStatus = if (recipient.isGroup) GroupReceiptTable.STATUS_UNKNOWN else GroupReceiptTable.STATUS_UNDELIVERED
|
||||
val messageId = SignalDatabase.messages.insertMessageOutbox(outgoingMessage, threadId, false, receiptStatus, null).messageId
|
||||
SignalDatabase.messages.markAsSent(messageId, true)
|
||||
|
||||
log(envelope.timestamp!!, "Inserted sync poll end message as messageId $messageId")
|
||||
|
||||
Reference in New Issue
Block a user