Make some expiration timer fields nonnull

This commit is contained in:
Max Radermacher 2026-06-08 20:59:03 -05:00 committed by GitHub
parent 800a5cc0bc
commit 2182e5952a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 32 additions and 45 deletions

View File

@ -38,9 +38,9 @@ public enum SentMessageTranscriptType {
public let isViewOnceMessage: Bool
public let expirationStartedAt: UInt64?
public let expirationDurationSeconds: UInt32?
public let expireTimerVersion: UInt32?
public let expirationStartedAt: UInt64
public let expirationDurationSeconds: UInt32
public let expireTimerVersion: UInt32
public let storyTimestamp: UInt64?
public let storyAuthorAci: Aci?

View File

@ -348,17 +348,15 @@ public class SentMessageTranscriptReceiverImpl: SentMessageTranscriptReceiver {
tx: tx,
)
if let expirationStartedAt = messageParams.expirationStartedAt {
/// The insert and update methods above may start expiration for
/// this message, but transcript.expirationStartedAt may be earlier,
/// so we need to pass that to DisappearingMessagesExpirationJob in
/// case it needs to back-date the expiration.
disappearingMessagesExpirationJob.startExpiration(
forMessage: outgoingMessage,
expirationStartedAt: expirationStartedAt,
tx: tx,
)
}
/// The insert and update methods above may start expiration for
/// this message, but transcript.expirationStartedAt may be earlier,
/// so we need to pass that to DisappearingMessagesExpirationJob in
/// case it needs to back-date the expiration.
disappearingMessagesExpirationJob.startExpiration(
forMessage: outgoingMessage,
expirationStartedAt: messageParams.expirationStartedAt,
tx: tx,
)
self.earlyMessageManager.applyPendingMessages(for: outgoingMessage, registeredState: registeredState, tx: tx)

View File

@ -21,16 +21,15 @@ public struct VersionedDisappearingMessageToken: Equatable {
public let durationSeconds: UInt32
public let version: UInt32
public init(durationSeconds: UInt32, version: UInt32?) {
public init(durationSeconds: UInt32, version: UInt32) {
self.durationSeconds = durationSeconds
// 0 and nil version are equivalent.
self.version = version ?? 0
self.version = version
}
public init(
isEnabled: Bool,
durationSeconds: UInt32,
version: UInt32?,
version: UInt32,
) {
// Consider disabled if duration is zero.
// Use zero duration if not enabled.
@ -45,7 +44,7 @@ public struct VersionedDisappearingMessageToken: Equatable {
durationSeconds: UInt32,
) -> Self {
// Version is unused for group threads
return .init(isEnabled: isEnabled, durationSeconds: durationSeconds, version: nil)
return .init(isEnabled: isEnabled, durationSeconds: durationSeconds, version: 0)
}
public static func forUniversalTimer(
@ -53,12 +52,12 @@ public struct VersionedDisappearingMessageToken: Equatable {
durationSeconds: UInt32,
) -> Self {
// Version is unused for the universal timer
return .init(isEnabled: isEnabled, durationSeconds: durationSeconds, version: nil)
return .init(isEnabled: isEnabled, durationSeconds: durationSeconds, version: 0)
}
public static func token(
forProtoExpireTimerSeconds expireTimerSeconds: UInt32?,
version: UInt32?,
version: UInt32,
) -> Self {
return .init(durationSeconds: expireTimerSeconds ?? 0, version: version)
}

View File

@ -81,8 +81,8 @@ public class PinnedMessageManager {
pinAuthor: Aci,
thread: TSThread,
pinSentAtTimestamp: UInt64,
expireTimer: UInt32?,
expireTimerVersion: UInt32?,
expireTimer: UInt32,
expireTimerVersion: UInt32,
transaction: DBWriteTransaction,
) throws {
try validateInputsForPinMessage(pinMessageProto: pinMessageProto)
@ -459,8 +459,8 @@ public class PinnedMessageManager {
targetMessageTimestamp: UInt64,
targetMessageAuthor: Aci,
pinAuthor: Aci,
expireTimer: UInt32?,
expireTimerVersion: UInt32?,
expireTimer: UInt32,
expireTimerVersion: UInt32,
tx: DBWriteTransaction,
) {
var userInfoForNewMessage: [InfoMessageUserInfoKey: Any] = [:]
@ -470,18 +470,13 @@ public class PinnedMessageManager {
timestamp: Int64(targetMessageTimestamp),
)
var timerVersion: NSNumber?
if let expireTimerVersion {
timerVersion = NSNumber(value: expireTimerVersion)
}
let infoMessage = TSInfoMessage(
thread: thread,
timestamp: timestamp,
serverGuid: nil,
messageType: .typePinnedMessage,
expireTimerVersion: timerVersion,
expiresInSeconds: expireTimer ?? 0,
expireTimerVersion: NSNumber(value: expireTimerVersion),
expiresInSeconds: expireTimer,
infoMessageUserInfo: userInfoForNewMessage,
)

View File

@ -285,8 +285,8 @@ public class PollMessageManager {
targetPollTimestamp: UInt64,
pollQuestion: String,
terminateAuthor: Aci,
expireTimer: UInt32?,
expireTimerVersion: UInt32?,
expireTimer: UInt32,
expireTimerVersion: UInt32,
tx: DBWriteTransaction,
) {
var userInfoForNewMessage: [InfoMessageUserInfoKey: Any] = [:]
@ -296,18 +296,13 @@ public class PollMessageManager {
timestamp: Int64(targetPollTimestamp),
)
var timerVersion: NSNumber?
if let expireTimerVersion {
timerVersion = NSNumber(value: expireTimerVersion)
}
let infoMessage = TSInfoMessage(
thread: thread,
timestamp: timestamp,
serverGuid: nil,
messageType: .typeEndPoll,
expireTimerVersion: timerVersion,
expiresInSeconds: expireTimer ?? 0,
expireTimerVersion: NSNumber(value: expireTimerVersion),
expiresInSeconds: expireTimer,
infoMessageUserInfo: userInfoForNewMessage,
)

View File

@ -10,14 +10,14 @@ extension OWSOutgoingPaymentMessage {
messageBody: ValidatedInlineMessageBody?,
paymentNotification: TSPaymentNotification,
expiresInSeconds: UInt32,
expireTimerVersion: UInt32?,
expireTimerVersion: UInt32,
tx: DBReadTransaction,
) {
let messageBuilder = TSOutgoingMessageBuilder.outgoingMessageBuilder(thread: thread)
messageBuilder.setMessageBody(messageBody)
messageBuilder.isViewOnceMessage = false
messageBuilder.expiresInSeconds = expiresInSeconds
messageBuilder.expireTimerVersion = expireTimerVersion.map(NSNumber.init(value:))
messageBuilder.expireTimerVersion = NSNumber(value: expireTimerVersion)
self.init(
builder: messageBuilder,

View File

@ -128,7 +128,7 @@ public class ReactionManager: NSObject {
timestamp: UInt64,
serverTimestamp: UInt64,
expiresInSeconds: UInt32,
expireTimerVersion: UInt32?,
expireTimerVersion: UInt32,
sentTranscript: OWSIncomingSentMessageTranscript?,
transaction: DBWriteTransaction,
) -> ReactionProcessingResult {
@ -238,7 +238,7 @@ public class ReactionManager: NSObject {
builder.expiresInSeconds = 0
} else {
builder.expiresInSeconds = expiresInSeconds
builder.expireTimerVersion = expireTimerVersion.map(NSNumber.init(value:))
builder.expireTimerVersion = NSNumber(value: expireTimerVersion)
}
}