Add stress group to debug UI.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 77e0c9664c
commit bd416176ae

@ -74,6 +74,7 @@
34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89B1E8DF3270035BE1A /* BlockListViewController.m */; }; 34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89B1E8DF3270035BE1A /* BlockListViewController.m */; };
34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */; }; 34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */; };
34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */; }; 34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */; };
34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2A1F74C12700D7438D /* DebugUIStress.m */; };
34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */; }; 34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */; };
34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */; }; 34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */; };
34C42D611F4734CA0072EC04 /* OWSContactOffersCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D601F4734CA0072EC04 /* OWSContactOffersCell.m */; }; 34C42D611F4734CA0072EC04 /* OWSContactOffersCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D601F4734CA0072EC04 /* OWSContactOffersCell.m */; };
@ -514,6 +515,8 @@
34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSTableViewController.m; sourceTree = "<group>"; }; 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSTableViewController.m; sourceTree = "<group>"; };
34B3F8A01E8EA6040035BE1A /* ViewControllerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewControllerUtils.h; sourceTree = "<group>"; }; 34B3F8A01E8EA6040035BE1A /* ViewControllerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewControllerUtils.h; sourceTree = "<group>"; };
34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllerUtils.m; sourceTree = "<group>"; }; 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllerUtils.m; sourceTree = "<group>"; };
34BECE291F74C12700D7438D /* DebugUIStress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIStress.h; sourceTree = "<group>"; };
34BECE2A1F74C12700D7438D /* DebugUIStress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIStress.m; sourceTree = "<group>"; };
34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSFlatButton.swift; sourceTree = "<group>"; }; 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSFlatButton.swift; sourceTree = "<group>"; };
34C42D591F45F7A80072EC04 /* OWSNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSNavigationController.h; sourceTree = "<group>"; }; 34C42D591F45F7A80072EC04 /* OWSNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSNavigationController.h; sourceTree = "<group>"; };
34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSNavigationController.m; sourceTree = "<group>"; }; 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSNavigationController.m; sourceTree = "<group>"; };
@ -1121,6 +1124,7 @@
34D8C0221ED3673300188D7C /* DebugUI */ = { 34D8C0221ED3673300188D7C /* DebugUI */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
45638BDB1F3DD0D400128435 /* DebugUICalling.swift */,
34D8C0291ED3685800188D7C /* DebugUIContacts.h */, 34D8C0291ED3685800188D7C /* DebugUIContacts.h */,
34D8C02A1ED3685800188D7C /* DebugUIContacts.m */, 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */,
34E3EF0B1EFC235B007F6822 /* DebugUIDiskUsage.h */, 34E3EF0B1EFC235B007F6822 /* DebugUIDiskUsage.h */,
@ -1131,12 +1135,13 @@
341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */, 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */,
34E3EF0E1EFC2684007F6822 /* DebugUIPage.h */, 34E3EF0E1EFC2684007F6822 /* DebugUIPage.h */,
34E3EF0F1EFC2684007F6822 /* DebugUIPage.m */, 34E3EF0F1EFC2684007F6822 /* DebugUIPage.m */,
4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */,
452037CF1EE84975004E4CDF /* DebugUISessionState.h */, 452037CF1EE84975004E4CDF /* DebugUISessionState.h */,
452037D01EE84975004E4CDF /* DebugUISessionState.m */, 452037D01EE84975004E4CDF /* DebugUISessionState.m */,
34BECE291F74C12700D7438D /* DebugUIStress.h */,
34BECE2A1F74C12700D7438D /* DebugUIStress.m */,
34D8C0251ED3673300188D7C /* DebugUITableViewController.h */, 34D8C0251ED3673300188D7C /* DebugUITableViewController.h */,
34D8C0261ED3673300188D7C /* DebugUITableViewController.m */, 34D8C0261ED3673300188D7C /* DebugUITableViewController.m */,
45638BDB1F3DD0D400128435 /* DebugUICalling.swift */,
4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */,
); );
path = DebugUI; path = DebugUI;
sourceTree = "<group>"; sourceTree = "<group>";
@ -2340,6 +2345,7 @@
341207271EE19F6A00463194 /* OWSSystemMessageCell.m in Sources */, 341207271EE19F6A00463194 /* OWSSystemMessageCell.m in Sources */,
341BB7491DB727EE001E2975 /* JSQMediaItem+OWS.m in Sources */, 341BB7491DB727EE001E2975 /* JSQMediaItem+OWS.m in Sources */,
34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */, 34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */,
34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */,
45F2B1941D9C9F48000D2C69 /* OWSOutgoingMessageCollectionViewCell.m in Sources */, 45F2B1941D9C9F48000D2C69 /* OWSOutgoingMessageCollectionViewCell.m in Sources */,
34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */, 34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */,
B68EF9BA1C0B1EBD009C3DCD /* FLAnimatedImage.m in Sources */, B68EF9BA1C0B1EBD009C3DCD /* FLAnimatedImage.m in Sources */,

@ -2,18 +2,18 @@
// Copyright (c) 2017 Open Whisper Systems. All rights reserved. // Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// //
#import "ConversationViewController.h"
#import "AppDelegate.h" #import "AppDelegate.h"
#import "AttachmentSharing.h" #import "AttachmentSharing.h"
#import "BlockListUIUtils.h" #import "BlockListUIUtils.h"
#import "BlockListViewController.h" #import "BlockListViewController.h"
#import "ContactsViewHelper.h" #import "ContactsViewHelper.h"
#import "ConversationViewController.h"
#import "DebugUITableViewController.h" #import "DebugUITableViewController.h"
#import "Environment.h" #import "Environment.h"
#import "FingerprintViewController.h" #import "FingerprintViewController.h"
#import "FullImageViewController.h" #import "FullImageViewController.h"
#import "NewGroupViewController.h"
#import "NSDate+millisecondTimeStamp.h" #import "NSDate+millisecondTimeStamp.h"
#import "NewGroupViewController.h"
#import "OWSAudioAttachmentPlayer.h" #import "OWSAudioAttachmentPlayer.h"
#import "OWSCall.h" #import "OWSCall.h"
#import "OWSContactOffersCell.h" #import "OWSContactOffersCell.h"
@ -34,7 +34,6 @@
#import "OWSUnreadIndicatorCell.h" #import "OWSUnreadIndicatorCell.h"
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import "SignalKeyingStorage.h" #import "SignalKeyingStorage.h"
#import "ThreadUtil.h"
#import "TSAttachmentPointer.h" #import "TSAttachmentPointer.h"
#import "TSCall.h" #import "TSCall.h"
#import "TSContactThread.h" #import "TSContactThread.h"
@ -47,14 +46,15 @@
#import "TSInfoMessage.h" #import "TSInfoMessage.h"
#import "TSInvalidIdentityKeyErrorMessage.h" #import "TSInvalidIdentityKeyErrorMessage.h"
#import "TSUnreadIndicatorInteraction.h" #import "TSUnreadIndicatorInteraction.h"
#import "ThreadUtil.h"
#import "UIFont+OWS.h" #import "UIFont+OWS.h"
#import "UIUtil.h" #import "UIUtil.h"
#import "UIViewController+CameraPermissions.h" #import "UIViewController+CameraPermissions.h"
#import "UIViewController+OWS.h" #import "UIViewController+OWS.h"
#import "ViewControllerUtils.h" #import "ViewControllerUtils.h"
#import <AVFoundation/AVFoundation.h>
#import <AddressBookUI/AddressBookUI.h> #import <AddressBookUI/AddressBookUI.h>
#import <AssetsLibrary/AssetsLibrary.h> #import <AssetsLibrary/AssetsLibrary.h>
#import <AVFoundation/AVFoundation.h>
#import <ContactsUI/CNContactViewController.h> #import <ContactsUI/CNContactViewController.h>
#import <JSQMessagesViewController/JSQMessagesBubbleImage.h> #import <JSQMessagesViewController/JSQMessagesBubbleImage.h>
#import <JSQMessagesViewController/JSQMessagesBubbleImageFactory.h> #import <JSQMessagesViewController/JSQMessagesBubbleImageFactory.h>
@ -80,11 +80,11 @@
#import <SignalServiceKit/OWSMessageSender.h> #import <SignalServiceKit/OWSMessageSender.h>
#import <SignalServiceKit/OWSVerificationStateChangeMessage.h> #import <SignalServiceKit/OWSVerificationStateChangeMessage.h>
#import <SignalServiceKit/SignalRecipient.h> #import <SignalServiceKit/SignalRecipient.h>
#import <SignalServiceKit/Threading.h>
#import <SignalServiceKit/TSAccountManager.h> #import <SignalServiceKit/TSAccountManager.h>
#import <SignalServiceKit/TSGroupModel.h> #import <SignalServiceKit/TSGroupModel.h>
#import <SignalServiceKit/TSInvalidIdentityKeyReceivingErrorMessage.h> #import <SignalServiceKit/TSInvalidIdentityKeyReceivingErrorMessage.h>
#import <SignalServiceKit/TSNetworkManager.h> #import <SignalServiceKit/TSNetworkManager.h>
#import <SignalServiceKit/Threading.h>
#import <YapDatabase/YapDatabaseView.h> #import <YapDatabase/YapDatabaseView.h>
@import Photos; @import Photos;
@ -648,6 +648,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
[self createScrollDownButton]; [self createScrollDownButton];
[self createHeaderViews]; [self createHeaderViews];
[self addNotificationListeners]; [self addNotificationListeners];
dispatch_async(dispatch_get_main_queue(), ^{
[DebugUITableViewController presentDebugUIForThread:self.thread fromViewController:self];
});
} }
- (void)registerCustomMessageNibs - (void)registerCustomMessageNibs

@ -61,13 +61,6 @@ NS_ASSUME_NONNULL_BEGIN
actionBlock:^{ actionBlock:^{
[DebugUIMisc clearHasDismissedOffers]; [DebugUIMisc clearHasDismissedOffers];
}]]; }]];
if ([thread isKindOfClass:[TSGroupThread class]]) {
TSGroupThread *groupThread = (TSGroupThread *)thread;
[items addObject:[OWSTableItem itemWithTitle:@"Hallucinate twin group"
actionBlock:^{
[DebugUIMisc hallucinateTwinGroup:groupThread];
}]];
}
return [OWSTableSection sectionWithTitle:self.name items:items]; return [OWSTableSection sectionWithTitle:self.name items:items];
} }
@ -122,28 +115,6 @@ NS_ASSUME_NONNULL_BEGIN
}]; }];
} }
// Creates a new group (by cloning the current group) without informing the,
// other members. This can be used to test "group info requests", etc.
+ (void)hallucinateTwinGroup:(TSGroupThread *)groupThread
{
__block TSGroupThread *thread;
[[TSStorageManager sharedManager].dbReadWriteConnection
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:[groupThread.groupModel.groupName stringByAppendingString:@" Copy"]
memberIds:[groupThread.groupModel.groupMemberIds mutableCopy]
image:groupThread.groupModel.groupImage
groupId:[SecurityUtils generateRandomBytes:16]];
thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
}];
OWSAssert(thread);
dispatch_async(dispatch_get_main_queue(), ^{
[Environment presentConversationForThread:thread];
});
}
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -0,0 +1,15 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "DebugUIPage.h"
NS_ASSUME_NONNULL_BEGIN
@class TSThread;
@interface DebugUIStress : DebugUIPage
@end
NS_ASSUME_NONNULL_END

@ -0,0 +1,136 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "DebugUIStress.h"
#import "Environment.h"
#import "OWSMessageSender.h"
#import "OWSTableViewController.h"
#import "ThreadUtil.h"
#import <SignalServiceKit/Cryptography.h>
#import <SignalServiceKit/OWSDynamicOutgoingMessage.h>
#import <SignalServiceKit/SecurityUtils.h>
#import <SignalServiceKit/TSGroupThread.h>
#import <SignalServiceKit/TSStorageManager.h>
#import <SignalServiceKit/TSThread.h>
NS_ASSUME_NONNULL_BEGIN
@implementation DebugUIStress
#pragma mark - Logging
+ (NSString *)tag
{
return [NSString stringWithFormat:@"[%@]", self.class];
}
- (NSString *)tag
{
return self.class.tag;
}
#pragma mark - Factory Methods
- (NSString *)name
{
return @"Stress";
}
- (nullable OWSTableSection *)sectionForThread:(nullable TSThread *)thread
{
OWSAssert(thread);
NSMutableArray<OWSTableItem *> *items = [NSMutableArray new];
[items addObject:[OWSTableItem itemWithTitle:@"Send empty message"
actionBlock:^{
[DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) {
return [NSData new];
}];
}]];
[items addObject:[OWSTableItem itemWithTitle:@"Send no payload message"
actionBlock:^{
[DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) {
OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new];
return [[contentBuilder build] data];
}];
}]];
[items addObject:[OWSTableItem itemWithTitle:@"Send empty null message"
actionBlock:^{
[DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) {
OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new];
OWSSignalServiceProtosNullMessageBuilder *nullMessageBuilder = [OWSSignalServiceProtosNullMessageBuilder new];
contentBuilder.nullMessage = [nullMessageBuilder build];
return [[contentBuilder build] data];
}];
}]];
[items addObject:[OWSTableItem itemWithTitle:@"Send random null message"
actionBlock:^{
[DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) {
OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new];
OWSSignalServiceProtosNullMessageBuilder *nullMessageBuilder = [OWSSignalServiceProtosNullMessageBuilder new];
NSUInteger contentLength = arc4random_uniform(32);
nullMessageBuilder.padding = [Cryptography generateRandomBytes:contentLength];
contentBuilder.nullMessage = [nullMessageBuilder build];
// contentBuilder.dataMessage = [self buildDataMessage:recipient.recipientId];
return [[contentBuilder build] data];
}];
}]];
if ([thread isKindOfClass:[TSGroupThread class]]) {
TSGroupThread *groupThread = (TSGroupThread *)thread;
[items addObject:[OWSTableItem itemWithTitle:@"Hallucinate twin group"
actionBlock:^{
[DebugUIStress hallucinateTwinGroup:groupThread];
}]];
}
return [OWSTableSection sectionWithTitle:self.name items:items];
}
+ (void)sendStressMessage:(TSOutgoingMessage *)message
{
OWSAssert(message);
OWSMessageSender *messageSender = [Environment getCurrent].messageSender;
[messageSender sendMessage:message
success:^{
DDLogInfo(@"%@ Successfully sent message.", self.tag);
}
failure:^(NSError *error) {
DDLogWarn(@"%@ Failed to deliver message with error: %@", self.tag, error);
}];
}
+ (void)sendStressMessage:(TSThread *)thread
block:(DynamicOutgoingMessageBlock)block
{
OWSAssert(thread);
OWSAssert(block);
OWSDynamicOutgoingMessage *message = [[OWSDynamicOutgoingMessage alloc] initWithBlock:block inThread:thread];
[self sendStressMessage:message];
}
// Creates a new group (by cloning the current group) without informing the,
// other members. This can be used to test "group info requests", etc.
+ (void)hallucinateTwinGroup:(TSGroupThread *)groupThread
{
__block TSGroupThread *thread;
[[TSStorageManager sharedManager].dbReadWriteConnection
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:[groupThread.groupModel.groupName stringByAppendingString:@" Copy"]
memberIds:[groupThread.groupModel.groupMemberIds mutableCopy]
image:groupThread.groupModel.groupImage
groupId:[SecurityUtils generateRandomBytes:16]];
thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
}];
OWSAssert(thread);
[Environment presentConversationForThread:thread];
}
@end
NS_ASSUME_NONNULL_END

@ -8,6 +8,7 @@
#import "DebugUIMessages.h" #import "DebugUIMessages.h"
#import "DebugUIMisc.h" #import "DebugUIMisc.h"
#import "DebugUISessionState.h" #import "DebugUISessionState.h"
#import "DebugUIStress.h"
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import <SignalServiceKit/TSContactThread.h> #import <SignalServiceKit/TSContactThread.h>
#import <SignalServiceKit/TSThread.h> #import <SignalServiceKit/TSThread.h>
@ -96,6 +97,8 @@ NS_ASSUME_NONNULL_BEGIN
addObject:[self itemForSubsection:[DebugUICalling new] viewController:viewController thread:thread]]; addObject:[self itemForSubsection:[DebugUICalling new] viewController:viewController thread:thread]];
} }
[subsectionItems addObject:[self itemForSubsection:[DebugUIProfile new] viewController:viewController thread:thread]]; [subsectionItems addObject:[self itemForSubsection:[DebugUIProfile new] viewController:viewController thread:thread]];
[subsectionItems
addObject:[self itemForSubsection:[DebugUIStress new] viewController:viewController thread:thread]];
[subsectionItems addObject:[self itemForSubsection:[DebugUIMisc new] viewController:viewController thread:thread]]; [subsectionItems addObject:[self itemForSubsection:[DebugUIMisc new] viewController:viewController thread:thread]];
[contents addSection:[OWSTableSection sectionWithTitle:@"Sections" items:subsectionItems]]; [contents addSection:[OWSTableSection sectionWithTitle:@"Sections" items:subsectionItems]];

@ -273,6 +273,13 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
} }
[self updateBarButtonItems]; [self updateBarButtonItems];
dispatch_async(dispatch_get_main_queue(), ^{
TSThread *thread = [self threadForIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
if (thread) {
[self presentThread:thread keyboardOnViewAppearing:NO callOnViewAppearing:NO];
}
});
} }
- (void)updateBarButtonItems - (void)updateBarButtonItems

@ -0,0 +1,20 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "TSOutgoingMessage.h"
NS_ASSUME_NONNULL_BEGIN
@class OWSSignalServiceProtosDataMessageBuilder;
@class SignalRecipient;
typedef NSData *_Nonnull (^DynamicOutgoingMessageBlock)(SignalRecipient *);
@interface OWSDynamicOutgoingMessage : TSOutgoingMessage
- (instancetype)initWithBlock:(DynamicOutgoingMessageBlock)block inThread:(nullable TSThread *)thread;
@end
NS_ASSUME_NONNULL_END

@ -0,0 +1,58 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "OWSDynamicOutgoingMessage.h"
#import "NSDate+millisecondTimeStamp.h"
#import "OWSSignalServiceProtos.pb.h"
NS_ASSUME_NONNULL_BEGIN
@interface OWSDynamicOutgoingMessage ()
@property (nonatomic, readonly) DynamicOutgoingMessageBlock block;
@end
#pragma mark -
@implementation OWSDynamicOutgoingMessage
- (instancetype)initWithBlock:(DynamicOutgoingMessageBlock)block inThread:(nullable TSThread *)thread
{
self = [super initWithTimestamp:[NSDate ows_millisecondTimeStamp] inThread:thread];
if (self) {
_block = block;
}
return self;
}
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
// override superclass with no-op.
//
// There's no need to save this message, since it's not displayed to the user.
}
//- (OWSSignalServiceProtosDataMessageBuilder *)dataMessageBuilder
//{
// OWSSignalServiceProtosDataMessageBuilder *builder = [super dataMessageBuilder];
// [builder setFlags:OWSSignalServiceProtosDataMessageFlagsEndSession];
//
// return builder;
//}
- (NSData *)buildPlainTextData:(SignalRecipient *)recipient
{
NSData *plainTextData = self.block(recipient);
OWSAssert(plainTextData);
return plainTextData;
// OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new];
// contentBuilder.dataMessage = [self buildDataMessage:recipient.recipientId];
// return [[contentBuilder build] data];
}
@end
NS_ASSUME_NONNULL_END
Loading…
Cancel
Save