From c2e31540d7605cca303a5009dd5379214fe60e87 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 23 Mar 2018 10:19:04 -0400 Subject: [PATCH] Elaborate debug UI for messages. --- .../ConversationViewController.m | 4 + .../ViewControllers/DebugUI/DebugUIMessages.m | 153 +++++++++--------- .../src/ViewControllers/HomeViewController.m | 8 +- SignalServiceKit/src/Util/NSDate+OWS.h | 2 +- 4 files changed, 87 insertions(+), 80 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 241a1c1ca..da0e1bff8 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -490,6 +490,10 @@ typedef enum : NSUInteger { [self createBackButton]; [self addNotificationListeners]; [self loadDraftInCompose]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [DebugUITableViewController presentDebugUIForThread:self.thread fromViewController:self]; + }); } - (void)loadView diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index f565a9927..0f2a09a68 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -35,9 +35,9 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) { DebugMediaType_Random, }; -typedef void (^ActionSucceesBlock)(void); +typedef void (^ActionSuccessBlock)(void); typedef void (^ActionFailureBlock)(void); -typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failure); +typedef void (^ActionBlock)(NSUInteger index, ActionSuccessBlock success, ActionFailureBlock failure); @interface TSOutgoingMessage (PostDatingDebug) @@ -59,29 +59,27 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu OWSAssert(thread); NSMutableArray *items = [@[ - [OWSTableItem itemWithTitle:@"Perform 100 random actions" - actionBlock:^{ - [DebugUIMessages performRandomActions:100 thread:thread]; - }], - [OWSTableItem itemWithTitle:@"Perform 1,000 random actions" - actionBlock:^{ - [DebugUIMessages performRandomActions:1000 thread:thread]; - }], - [OWSTableItem itemWithTitle:@"Send 10 messages (1/sec.)" + +#pragma mark - Actions + + [OWSTableItem itemWithTitle:@"Send N text messages (1/sec.)" actionBlock:^{ - [DebugUIMessages sendTextMessages:10 thread:thread]; + [DebugUIMessages sendNTextMessagesInThread:thread]; }], - [OWSTableItem itemWithTitle:@"Send 100 messages (1/sec.)" + [OWSTableItem itemWithTitle:@"Send N Random Media (1/sec.)" actionBlock:^{ - [DebugUIMessages sendTextMessages:100 thread:thread]; + [DebugUIMessages sendNRandomMediaInThread:thread]; }], - [OWSTableItem itemWithTitle:@"Send 1,000 messages (1/sec.)" + +#pragma mark - Misc. + + [OWSTableItem itemWithTitle:@"Perform 100 random actions" actionBlock:^{ - [DebugUIMessages sendTextMessages:1000 thread:thread]; + [DebugUIMessages performRandomActions:100 thread:thread]; }], - [OWSTableItem itemWithTitle:@"Send 3,000 messages (1/sec.)" + [OWSTableItem itemWithTitle:@"Perform 1,000 random actions" actionBlock:^{ - [DebugUIMessages sendTextMessages:3000 thread:thread]; + [DebugUIMessages performRandomActions:1000 thread:thread]; }], [OWSTableItem itemWithTitle:@"Send 10 tiny text messages (1/sec.)" actionBlock:^{ @@ -199,10 +197,6 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu actionBlock:^{ [DebugUIMessages sendRandomAttachment:thread uti:(NSString *)kUTTypePDF]; }], - [OWSTableItem itemWithTitle:@"Send N Random Media (1/sec.)" - actionBlock:^{ - [DebugUIMessages sendRandomMediaInThread:thread]; - }], [OWSTableItem itemWithTitle:@"Create all system messages" actionBlock:^{ [DebugUIMessages createSystemMessagesInThread:thread]; @@ -291,17 +285,17 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu return [OWSTableSection sectionWithTitle:self.name items:items]; } -+ (void)sendMessages:(int)counter toAllMembersOfGroup:(TSGroupThread *)groupThread ++ (void)sendMessages:(NSUInteger)count toAllMembersOfGroup:(TSGroupThread *)groupThread { for (NSString *recipientId in groupThread.groupModel.groupMemberIds) { TSContactThread *contactThread = [TSContactThread getOrCreateThreadWithContactId:recipientId]; - [DebugUIMessages sendTextMessages:counter thread:contactThread]; + [self performAction:[self sendTextMessagesActionInThread:contactThread] count:count]; } } -+ (void)sendTextMessageInThread:(TSThread *)thread counter:(int)counter ++ (void)sendTextMessageInThread:(TSThread *)thread counter:(NSUInteger)counter { - DDLogInfo(@"%@ sendTextMessageInThread: %d", self.logTag, counter); + DDLogInfo(@"%@ sendTextMessageInThread: %zd", self.logTag, counter); [DDLog flushLog]; NSString *randomText = [self randomText]; @@ -311,18 +305,24 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu DDLogError(@"%@ sendTextMessageInThread timestamp: %llu.", self.logTag, message.timestamp); } -+ (void)sendTextMessages:(int)counter thread:(TSThread *)thread ++ (void)sendNTextMessagesInThread:(TSThread *)thread { - if (counter < 1) { - return; - } - [self sendTextMessageInThread:thread counter:counter]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)1.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - [self sendTextMessages:counter - 1 thread:thread]; - }); + [self performActionNTimes:[self sendTextMessagesActionInThread:thread]]; } -+ (void)sendTinyTextMessageInThread:(TSThread *)thread counter:(int)counter ++ (ActionBlock)sendTextMessagesActionInThread:(TSThread *)thread +{ + + OWSAssert(thread); + + return ^(NSUInteger index, ActionSuccessBlock success, ActionFailureBlock failure) { + [self sendTextMessageInThread:thread counter:index]; + // TODO: + success(); + }; +} + ++ (void)sendTinyTextMessageInThread:(TSThread *)thread counter:(NSUInteger)counter { NSString *randomText = [[self randomText] substringToIndex:arc4random_uniform(4)]; NSString *text = [[[@(counter) description] stringByAppendingString:@" "] stringByAppendingString:randomText]; @@ -330,7 +330,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu [ThreadUtil sendMessageWithText:text inThread:thread messageSender:messageSender]; } -+ (void)sendTinyTextMessages:(int)counter thread:(TSThread *)thread ++ (void)sendTinyTextMessages:(NSUInteger)counter thread:(TSThread *)thread { if (counter < 1) { return; @@ -421,7 +421,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu ]; } -+ (void)sendRandomMediaInThread:(TSThread *)thread ++ (void)sendNRandomMediaInThread:(TSThread *)thread { OWSAssertIsOnMainThread() OWSAssert(thread); @@ -449,13 +449,12 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu break; } - [alert addAction:[UIAlertAction - actionWithTitle:label - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { - [self performActionNTimes:[self sendRandomMediaAction:mediaType thread:thread] - thread:thread]; - }]]; + [alert addAction:[UIAlertAction actionWithTitle:label + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self performActionNTimes:[self sendRandomMediaAction:mediaType + thread:thread]]; + }]]; } [alert addAction:[OWSAlerts cancelAction]]; @@ -468,7 +467,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu { OWSAssert(thread); - return ^(ActionSucceesBlock success, ActionFailureBlock failure) { + return ^(NSUInteger index, ActionSuccessBlock success, ActionFailureBlock failure) { void (^sendMessage)(NSString *) = ^(NSString *filePath) { [self sendAttachment:filePath thread:thread success:success failure:failure]; }; @@ -503,15 +502,14 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }; } -+ (void)performActionNTimes:(ActionBlock)action thread:(TSThread *)thread ++ (void)performActionNTimes:(ActionBlock)action { - OWSAssertIsOnMainThread() OWSAssert(thread); + OWSAssertIsOnMainThread(); UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"How many?" message:nil preferredStyle:UIAlertControllerStyleActionSheet]; for (NSNumber *countValue in @[ - @(0), @(1), @(10), @(100), @@ -535,7 +533,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu OWSAssert(action); OWSAssert(count > 0); - action( + action(count, ^{ if (count <= 1) { return; @@ -588,7 +586,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu { OWSMessageSender *messageSender = [Environment current].messageSender; NSMutableString *message = [NSMutableString new]; - for (int i = 0; i < 32; i++) { + for (NSUInteger i = 0; i < 32; i++) { [message appendString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse rutrum, nulla " @"vitae pretium hendrerit, tellus turpis pharetra libero, vitae sodales tortor ante vel " @"sem. Fusce sed nisl a lorem gravida tincidunt. Suspendisse efficitur non quam ac " @@ -824,7 +822,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }]; } -+ (void)sendTextAndSystemMessages:(int)counter thread:(TSThread *)thread ++ (void)sendTextAndSystemMessages:(NSUInteger)counter thread:(TSThread *)thread { if (counter < 1) { return; @@ -878,10 +876,10 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu return randomText; } -+ (void)createFakeUnreadMessages:(int)counter thread:(TSThread *)thread ++ (void)createFakeUnreadMessages:(NSUInteger)counter thread:(TSThread *)thread { [OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - for (int i = 0; i < counter; i++) { + for (NSUInteger i = 0; i < counter; i++) { NSString *randomText = [self randomText]; TSIncomingMessage *message = [[TSIncomingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] inThread:thread @@ -1170,7 +1168,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu } } -+ (void)createFakeLargeOutgoingAttachments:(int)counter thread:(TSThread *)thread ++ (void)createFakeLargeOutgoingAttachments:(NSUInteger)counter thread:(TSThread *)thread { if (counter < 1) { return; @@ -1208,7 +1206,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }); } -+ (void)sendTinyAttachments:(int)counter thread:(TSThread *)thread ++ (void)sendTinyAttachments:(NSUInteger)counter thread:(TSThread *)thread { if (counter < 1) { return; @@ -1229,7 +1227,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }); } -+ (void)createNewGroups:(int)counter recipientId:(NSString *)recipientId ++ (void)createNewGroups:(NSUInteger)counter recipientId:(NSString *)recipientId { if (counter < 1) { return; @@ -1272,24 +1270,24 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }]; } -+ (void)injectFakeIncomingMessages:(int)counter thread:(TSThread *)thread ++ (void)injectFakeIncomingMessages:(NSUInteger)counter thread:(TSThread *)thread { // Wait 5 seconds so debug user has time to navigate to another // view before message processing occurs. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.f * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - for (int i = 0; i < counter; i++) { + for (NSUInteger i = 0; i < counter; i++) { [self injectIncomingMessageInThread:thread counter:counter - i]; } }); } -+ (void)injectIncomingMessageInThread:(TSThread *)thread counter:(int)counter ++ (void)injectIncomingMessageInThread:(TSThread *)thread counter:(NSUInteger)counter { OWSAssert(thread); - DDLogInfo(@"%@ injectIncomingMessageInThread: %d", self.logTag, counter); + DDLogInfo(@"%@ injectIncomingMessageInThread: %zd", self.logTag, counter); NSString *randomText = [self randomText]; NSString *text = [[[@(counter) description] stringByAppendingString:@" "] stringByAppendingString:randomText]; @@ -1335,7 +1333,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }]; } -+ (void)performRandomActions:(int)counter thread:(TSThread *)thread ++ (void)performRandomActions:(NSUInteger)counter thread:(TSThread *)thread { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.f * NSEC_PER_SEC)), dispatch_get_main_queue(), @@ -1347,8 +1345,7 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }); } -+ (void)performRandomActionInThread:(TSThread *)thread - counter:(int)counter ++ (void)performRandomActionInThread:(TSThread *)thread counter:(NSUInteger)counter { typedef void (^ActionBlock)(YapDatabaseReadWriteTransaction *transaction); NSArray *actionBlocks = @[ @@ -1394,8 +1391,8 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu }, ]; [OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - int actionCount = 1 + (int)arc4random_uniform(3); - for (int actionIdx = 0; actionIdx < actionCount; actionIdx++) { + NSUInteger actionCount = 1 + (NSUInteger)arc4random_uniform(3); + for (NSUInteger actionIdx = 0; actionIdx < actionCount; actionIdx++) { ActionBlock actionBlock = actionBlocks[(NSUInteger)arc4random_uniform((uint32_t)actionBlocks.count)]; actionBlock(transaction); } @@ -1609,21 +1606,21 @@ typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failu { OWSAssert(thread); - uint64_t now = [NSDate ows_millisecondTimeStamp]; + long long now = (long long)[NSDate ows_millisecondTimeStamp]; NSArray *timestamps = @[ - @(now + 1 * kHourInMs), + @(now + 1 * (long long)kHourInMs), @(now), - @(now - 1 * kHourInMs), - @(now - 12 * kHourInMs), - @(now - 1 * kDayInMs), - @(now - 2 * kDayInMs), - @(now - 3 * kDayInMs), - @(now - 6 * kDayInMs), - @(now - 7 * kDayInMs), - @(now - 8 * kDayInMs), - @(now - 2 * kWeekInMs), - @(now - 1 * kMonthInMs), - @(now - 2 * kMonthInMs), + @(now - 1 * (long long)kHourInMs), + @(now - 12 * (long long)kHourInMs), + @(now - 1 * (long long)kDayInMs), + @(now - 2 * (long long)kDayInMs), + @(now - 3 * (long long)kDayInMs), + @(now - 6 * (long long)kDayInMs), + @(now - 7 * (long long)kDayInMs), + @(now - 8 * (long long)kDayInMs), + @(now - 2 * (long long)kWeekInMs), + @(now - 1 * (long long)kMonthInMs), + @(now - 2 * (long long)kMonthInMs), ]; NSMutableArray *recipientIds = [thread.recipientIdentifiers mutableCopy]; [recipientIds removeObject:[TSAccountManager localNumber]]; diff --git a/Signal/src/ViewControllers/HomeViewController.m b/Signal/src/ViewControllers/HomeViewController.m index 1a37cccd7..4aef80733 100644 --- a/Signal/src/ViewControllers/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeViewController.m @@ -286,7 +286,13 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState }; [self updateBarButtonItems]; dispatch_async(dispatch_get_main_queue(), ^{ - [self settingsButtonPressed:nil]; + TSThread *_Nullable thread = [self threadForIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; + if (!thread) { + return; + } + [self presentThread:thread keyboardOnViewAppearing:NO callOnViewAppearing:NO]; + + // [self settingsButtonPressed:nil]; }); } diff --git a/SignalServiceKit/src/Util/NSDate+OWS.h b/SignalServiceKit/src/Util/NSDate+OWS.h index e48a6f570..2455b7439 100755 --- a/SignalServiceKit/src/Util/NSDate+OWS.h +++ b/SignalServiceKit/src/Util/NSDate+OWS.h @@ -12,7 +12,7 @@ extern const NSTimeInterval kDayInterval; extern const NSTimeInterval kWeekInterval; extern const NSTimeInterval kMonthInterval; -#define kSecondInMs 1000 +#define kSecondInMs ((uint64_t)1000) #define kMinuteInMs (kSecondInMs * 60) #define kHourInMs (kMinuteInMs * 60) #define kDayInMs (kHourInMs * 24)