Swiftify OWSStaticOutgoingMessage

This commit is contained in:
Max Radermacher 2026-01-22 01:10:54 -06:00 committed by GitHub
parent b6c93307c7
commit e56504be28
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 74 additions and 142 deletions

View File

@ -822,6 +822,7 @@
50DCCBFC2F181A790024D124 /* ProfileKeyMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DCCBFB2F181A790024D124 /* ProfileKeyMessage.swift */; };
50DCCBFE2F1820600024D124 /* OutgoingSenderKeyDistributionMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DCCBFD2F1820600024D124 /* OutgoingSenderKeyDistributionMessage.swift */; };
50DE50602F21F4A700F30994 /* OutgoingSyncMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DE505F2F21F4A700F30994 /* OutgoingSyncMessage.swift */; };
50DE50642F21FE1700F30994 /* OutgoingStaticMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DE50632F21FE1700F30994 /* OutgoingStaticMessage.swift */; };
50E42FEA2C1BA3B900554BD6 /* CallHTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E42FE92C1BA3B900554BD6 /* CallHTTPClient.swift */; };
50E51A3B2AE989C4004F9069 /* AccountAttributesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E51A3A2AE989C4004F9069 /* AccountAttributesTest.swift */; };
50E5E4B129932D9B00E15A1C /* DeviceMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E5E4B029932D9B00E15A1C /* DeviceMessage.swift */; };
@ -3569,7 +3570,6 @@
F9C5CBE5289453B300548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C5C8F1289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
F9C5CBE7289453B300548EEE /* TSInfoMessage+GroupUpdates+GroupUpdateItemBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C8F3289453B100548EEE /* TSInfoMessage+GroupUpdates+GroupUpdateItemBuilder.swift */; };
F9C5CBE8289453B300548EEE /* OWSEndSessionMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C8F4289453B100548EEE /* OWSEndSessionMessage.m */; };
F9C5CBE9289453B300548EEE /* OWSStaticOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C5C8F5289453B100548EEE /* OWSStaticOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
F9C5CBEB289453B300548EEE /* TSOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C8F7289453B100548EEE /* TSOutgoingMessage.m */; };
F9C5CBEC289453B300548EEE /* TSOutgoingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C8F8289453B100548EEE /* TSOutgoingMessage.swift */; };
F9C5CBED289453B300548EEE /* TSInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C5C8F9289453B100548EEE /* TSInfoMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
@ -3585,7 +3585,6 @@
F9C5CBFA289453B300548EEE /* OWSVerificationStateChangeMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C5C906289453B100548EEE /* OWSVerificationStateChangeMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
F9C5CBFB289453B300548EEE /* TSErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C907289453B100548EEE /* TSErrorMessage.m */; };
F9C5CBFC289453B300548EEE /* OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C908289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift */; };
F9C5CBFE289453B300548EEE /* OWSStaticOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C90A289453B100548EEE /* OWSStaticOutgoingMessage.m */; };
F9C5CBFF289453B300548EEE /* OWSEndSessionMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C5C90B289453B100548EEE /* OWSEndSessionMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
F9C5CC00289453B300548EEE /* TSMention.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C90C289453B100548EEE /* TSMention.swift */; };
F9C5CC02289453B300548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C5C90E289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.m */; };
@ -4977,6 +4976,7 @@
50DCCBFB2F181A790024D124 /* ProfileKeyMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileKeyMessage.swift; sourceTree = "<group>"; };
50DCCBFD2F1820600024D124 /* OutgoingSenderKeyDistributionMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutgoingSenderKeyDistributionMessage.swift; sourceTree = "<group>"; };
50DE505F2F21F4A700F30994 /* OutgoingSyncMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutgoingSyncMessage.swift; sourceTree = "<group>"; };
50DE50632F21FE1700F30994 /* OutgoingStaticMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutgoingStaticMessage.swift; sourceTree = "<group>"; };
50E42FE52C1B9EB900554BD6 /* CallLinkState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallLinkState.swift; sourceTree = "<group>"; };
50E42FE92C1BA3B900554BD6 /* CallHTTPClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallHTTPClient.swift; sourceTree = "<group>"; };
50E51A3A2AE989C4004F9069 /* AccountAttributesTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountAttributesTest.swift; sourceTree = "<group>"; };
@ -7775,7 +7775,6 @@
F9C5C8F1289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDisappearingConfigurationUpdateInfoMessage.h; sourceTree = "<group>"; };
F9C5C8F3289453B100548EEE /* TSInfoMessage+GroupUpdates+GroupUpdateItemBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TSInfoMessage+GroupUpdates+GroupUpdateItemBuilder.swift"; sourceTree = "<group>"; };
F9C5C8F4289453B100548EEE /* OWSEndSessionMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSEndSessionMessage.m; sourceTree = "<group>"; };
F9C5C8F5289453B100548EEE /* OWSStaticOutgoingMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSStaticOutgoingMessage.h; sourceTree = "<group>"; };
F9C5C8F7289453B100548EEE /* TSOutgoingMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSOutgoingMessage.m; sourceTree = "<group>"; };
F9C5C8F8289453B100548EEE /* TSOutgoingMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSOutgoingMessage.swift; sourceTree = "<group>"; };
F9C5C8F9289453B100548EEE /* TSInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSInfoMessage.h; sourceTree = "<group>"; };
@ -7791,7 +7790,6 @@
F9C5C906289453B100548EEE /* OWSVerificationStateChangeMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSVerificationStateChangeMessage.h; sourceTree = "<group>"; };
F9C5C907289453B100548EEE /* TSErrorMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSErrorMessage.m; sourceTree = "<group>"; };
F9C5C908289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift"; sourceTree = "<group>"; };
F9C5C90A289453B100548EEE /* OWSStaticOutgoingMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSStaticOutgoingMessage.m; sourceTree = "<group>"; };
F9C5C90B289453B100548EEE /* OWSEndSessionMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSEndSessionMessage.h; sourceTree = "<group>"; };
F9C5C90C289453B100548EEE /* TSMention.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSMention.swift; sourceTree = "<group>"; };
F9C5C90E289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSDisappearingConfigurationUpdateInfoMessage.m; sourceTree = "<group>"; };
@ -14453,6 +14451,7 @@
50468F2829EE130A00948E02 /* InteractionStore.swift */,
F9C5C8EB289453B100548EEE /* MentionFinder.swift */,
50B74C742F1716F500F59813 /* OutgoingDeleteMessage.swift */,
50DE50632F21FE1700F30994 /* OutgoingStaticMessage.swift */,
F9C5C908289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift */,
F9C5C8F1289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.h */,
F9C5C90E289453B100548EEE /* OWSDisappearingConfigurationUpdateInfoMessage.m */,
@ -14460,8 +14459,6 @@
F9C5C90B289453B100548EEE /* OWSEndSessionMessage.h */,
F9C5C8F4289453B100548EEE /* OWSEndSessionMessage.m */,
F9C5C905289453B100548EEE /* OWSGiftBadge.swift */,
F9C5C8F5289453B100548EEE /* OWSStaticOutgoingMessage.h */,
F9C5C90A289453B100548EEE /* OWSStaticOutgoingMessage.m */,
F9C5C8D9289453B100548EEE /* OWSVerificationStateChangeMessage+SDS.swift */,
F9C5C906289453B100548EEE /* OWSVerificationStateChangeMessage.h */,
F9C5C8EA289453B100548EEE /* OWSVerificationStateChangeMessage.m */,
@ -15321,7 +15318,6 @@
6605D4FD2A85AD17004DC345 /* OWSPaymentMessage.h in Headers */,
7273280B2CA797370080E2C7 /* OWSReadTracking.h in Headers */,
F9C5CC47289453B300548EEE /* OWSRecoverableDecryptionPlaceholder.h in Headers */,
F9C5CBE9289453B300548EEE /* OWSStaticOutgoingMessage.h in Headers */,
F9C5CC81289453B300548EEE /* OWSUnknownContactBlockOfferMessage.h in Headers */,
F9C5CC42289453B300548EEE /* OWSUnknownProtocolVersionMessage.h in Headers */,
F9C5CE68289453B400548EEE /* OWSVerificationState.h in Headers */,
@ -19081,6 +19077,7 @@
F9C5CC1F289453B300548EEE /* OutgoingResendRequest.swift in Sources */,
50DCCBFE2F1820600024D124 /* OutgoingSenderKeyDistributionMessage.swift in Sources */,
C16B8B752B8940D40030BA24 /* OutgoingSentMessageTranscript.swift in Sources */,
50DE50642F21FE1700F30994 /* OutgoingStaticMessage.swift in Sources */,
F9C5CC5A289453B300548EEE /* OutgoingStoryMessage.swift in Sources */,
884E4C4828AF2F2A007A338C /* OutgoingStorySentMessageTranscript.swift in Sources */,
50DE50602F21F4A700F30994 /* OutgoingSyncMessage.swift in Sources */,
@ -19182,7 +19179,6 @@
669E8FEF28B417D500043D28 /* OWSSignalService.swift in Sources */,
6600F368298DA57200B1EDB7 /* OWSSignalServiceMock.swift in Sources */,
F9C5CD8C289453B300548EEE /* OWSSignalServiceProtocol.swift in Sources */,
F9C5CBFE289453B300548EEE /* OWSStaticOutgoingMessage.m in Sources */,
668A01002C2B5FC8007B8808 /* OWSSwiftUtils.swift in Sources */,
F9C5CBB8289453B300548EEE /* OWSSyncContactsMessage.swift in Sources */,
7254655B2BA028C400EABFD2 /* OWSSyncManager.swift in Sources */,

View File

@ -482,7 +482,7 @@ public class GroupsV2Impl: GroupsV2 {
return serviceIds.map { serviceId in
let address = SignalServiceAddress(serviceId)
let contactThread = TSContactThread.getOrCreateThread(withContactAddress: address, transaction: tx)
let message = OWSStaticOutgoingMessage(thread: contactThread, timestamp: timestamp, plaintextData: plaintextData, transaction: tx)
let message = OutgoingStaticMessage(thread: contactThread, timestamp: timestamp, plaintextData: plaintextData, tx: tx)
let preparedMessage = PreparedOutgoingMessage.preprepared(
transientMessageWithoutAttachments: message,
)

View File

@ -1,31 +0,0 @@
//
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import <SignalServiceKit/TSOutgoingMessage.h>
NS_ASSUME_NONNULL_BEGIN
// A generic, serializable message that can be used to
// send fixed plaintextData payloads.
@interface OWSStaticOutgoingMessage : TSOutgoingMessage
- (instancetype)initOutgoingMessageWithBuilder:(TSOutgoingMessageBuilder *)outgoingMessageBuilder
recipientAddressStates:
(NSDictionary<SignalServiceAddress *, TSOutgoingMessageRecipientState *> *)
recipientAddressStates NS_UNAVAILABLE;
- (instancetype)initOutgoingMessageWithBuilder:(TSOutgoingMessageBuilder *)outgoingMessageBuilder
additionalRecipients:(NSArray<ServiceIdObjC *> *)additionalRecipients
explicitRecipients:(NSArray<AciObjC *> *)explicitRecipients
skippedRecipients:(NSArray<ServiceIdObjC *> *)skippedRecipients
transaction:(DBReadTransaction *)transaction NS_UNAVAILABLE;
- (instancetype)initWithThread:(TSThread *)thread
timestamp:(uint64_t)timestamp
plaintextData:(NSData *)plaintextData
transaction:(DBReadTransaction *)transaction;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,101 +0,0 @@
//
// Copyright 2017 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import "OWSStaticOutgoingMessage.h"
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NS_ASSUME_NONNULL_BEGIN
@interface OWSStaticOutgoingMessage ()
@property (nonatomic, readonly) NSData *plaintextData;
@end
#pragma mark -
@implementation OWSStaticOutgoingMessage
- (instancetype)initWithThread:(TSThread *)thread
timestamp:(uint64_t)timestamp
plaintextData:(NSData *)plaintextData
transaction:(DBReadTransaction *)transaction
{
TSOutgoingMessageBuilder *messageBuilder = [TSOutgoingMessageBuilder outgoingMessageBuilderWithThread:thread];
messageBuilder.timestamp = timestamp;
self = [super initOutgoingMessageWithBuilder:messageBuilder
additionalRecipients:@[]
explicitRecipients:@[]
skippedRecipients:@[]
transaction:transaction];
if (self) {
_plaintextData = plaintextData;
}
return self;
}
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
NSData *plaintextData = self.plaintextData;
if (plaintextData != nil) {
[coder encodeObject:plaintextData forKey:@"plaintextData"];
}
}
- (nullable instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (!self) {
return self;
}
self->_plaintextData = [coder decodeObjectOfClass:[NSData class] forKey:@"plaintextData"];
return self;
}
- (NSUInteger)hash
{
NSUInteger result = [super hash];
result ^= self.plaintextData.hash;
return result;
}
- (BOOL)isEqual:(id)other
{
if (![super isEqual:other]) {
return NO;
}
OWSStaticOutgoingMessage *typedOther = (OWSStaticOutgoingMessage *)other;
if (![NSObject isObject:self.plaintextData equalToObject:typedOther.plaintextData]) {
return NO;
}
return YES;
}
- (BOOL)shouldBeSaved
{
return NO;
}
- (BOOL)shouldSyncTranscript
{
return NO;
}
- (nullable NSData *)buildPlainTextData:(TSThread *)thread transaction:(DBWriteTransaction *)transaction
{
return self.plaintextData;
}
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,69 @@
//
// Copyright 2026 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
// A generic, serializable message that can be used to
// send fixed plaintextData payloads.
@objc(OWSStaticOutgoingMessage)
final class OutgoingStaticMessage: TSOutgoingMessage {
let plaintextData: Data
init(
thread: TSThread,
timestamp: UInt64,
plaintextData: Data,
tx: DBReadTransaction,
) {
self.plaintextData = plaintextData
let messageBuilder = TSOutgoingMessageBuilder.outgoingMessageBuilder(thread: thread)
messageBuilder.timestamp = timestamp
super.init(
outgoingMessageWith: messageBuilder,
additionalRecipients: [],
explicitRecipients: [],
skippedRecipients: [],
transaction: tx,
)
}
override class var supportsSecureCoding: Bool { true }
override func encode(with coder: NSCoder) {
super.encode(with: coder)
coder.encode(self.plaintextData, forKey: "plaintextData")
}
required init?(coder: NSCoder) {
guard let plaintextData = coder.decodeObject(of: NSData.self, forKey: "plaintextData") as Data? else {
return nil
}
self.plaintextData = plaintextData
super.init(coder: coder)
}
override var hash: Int {
var hasher = Hasher()
hasher.combine(super.hash)
hasher.combine(self.plaintextData)
return hasher.finalize()
}
override func isEqual(_ object: Any?) -> Bool {
guard let object = object as? Self else { return false }
guard super.isEqual(object) else { return false }
guard self.plaintextData == object.plaintextData else { return false }
return true
}
override var shouldBeSaved: Bool { false }
override func shouldSyncTranscript() -> Bool { false }
override func buildPlainTextData(_ thread: TSThread, transaction: DBWriteTransaction) -> Data? {
return self.plaintextData
}
}

View File

@ -33,7 +33,6 @@ FOUNDATION_EXPORT const unsigned char SignalServiceKitVersionString[];
#import <SignalServiceKit/OWSPaymentMessage.h>
#import <SignalServiceKit/OWSReadTracking.h>
#import <SignalServiceKit/OWSRecoverableDecryptionPlaceholder.h>
#import <SignalServiceKit/OWSStaticOutgoingMessage.h>
#import <SignalServiceKit/OWSUnknownContactBlockOfferMessage.h>
#import <SignalServiceKit/OWSUnknownProtocolVersionMessage.h>
#import <SignalServiceKit/OWSVerificationState.h>