From 2182e5952a062de6efe19d9281020b5e35a68d11 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Mon, 8 Jun 2026 20:59:03 -0500 Subject: [PATCH] Make some expiration timer fields nonnull --- .../SentMessageTranscript.swift | 6 +++--- .../SentMessageTranscriptReceiverImpl.swift | 20 +++++++++---------- .../VersionedDisappearingMessageToken.swift | 13 ++++++------ .../PinnedMessages/PinnedMessageManager.swift | 17 ++++++---------- .../Polls/PollMessageManager.swift | 13 ++++-------- .../Payments/OWSOutgoingPaymentMessage.swift | 4 ++-- .../Messages/Reactions/ReactionManager.swift | 4 ++-- 7 files changed, 32 insertions(+), 45 deletions(-) diff --git a/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscript.swift b/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscript.swift index 4b3a1aa219..a1d4ee9c1a 100644 --- a/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscript.swift +++ b/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscript.swift @@ -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? diff --git a/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscriptReceiverImpl.swift b/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscriptReceiverImpl.swift index 6543776b03..31e764f75e 100644 --- a/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscriptReceiverImpl.swift +++ b/SignalServiceKit/Devices/SentMessageTranscriptReceiver/SentMessageTranscriptReceiverImpl.swift @@ -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) diff --git a/SignalServiceKit/DisappearingMessages/VersionedDisappearingMessageToken.swift b/SignalServiceKit/DisappearingMessages/VersionedDisappearingMessageToken.swift index 111d9fb402..4d070952c3 100644 --- a/SignalServiceKit/DisappearingMessages/VersionedDisappearingMessageToken.swift +++ b/SignalServiceKit/DisappearingMessages/VersionedDisappearingMessageToken.swift @@ -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) } diff --git a/SignalServiceKit/Messages/Interactions/PinnedMessages/PinnedMessageManager.swift b/SignalServiceKit/Messages/Interactions/PinnedMessages/PinnedMessageManager.swift index 1155cba74a..edd282e205 100644 --- a/SignalServiceKit/Messages/Interactions/PinnedMessages/PinnedMessageManager.swift +++ b/SignalServiceKit/Messages/Interactions/PinnedMessages/PinnedMessageManager.swift @@ -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, ) diff --git a/SignalServiceKit/Messages/Interactions/Polls/PollMessageManager.swift b/SignalServiceKit/Messages/Interactions/Polls/PollMessageManager.swift index d5120e152f..0f42eb4747 100644 --- a/SignalServiceKit/Messages/Interactions/Polls/PollMessageManager.swift +++ b/SignalServiceKit/Messages/Interactions/Polls/PollMessageManager.swift @@ -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, ) diff --git a/SignalServiceKit/Messages/Payments/OWSOutgoingPaymentMessage.swift b/SignalServiceKit/Messages/Payments/OWSOutgoingPaymentMessage.swift index 28811200af..2ced78f9a5 100644 --- a/SignalServiceKit/Messages/Payments/OWSOutgoingPaymentMessage.swift +++ b/SignalServiceKit/Messages/Payments/OWSOutgoingPaymentMessage.swift @@ -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, diff --git a/SignalServiceKit/Messages/Reactions/ReactionManager.swift b/SignalServiceKit/Messages/Reactions/ReactionManager.swift index 70b229bef2..f136785c16 100644 --- a/SignalServiceKit/Messages/Reactions/ReactionManager.swift +++ b/SignalServiceKit/Messages/Reactions/ReactionManager.swift @@ -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) } }