Elaborate debug UI for messages.

This commit is contained in:
Matthew Chen 2018-03-23 09:57:22 -04:00
parent 0dfa9cac7b
commit 68f3334e77
1 changed files with 67 additions and 55 deletions

View File

@ -35,6 +35,10 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) {
DebugMediaType_Random,
};
typedef void (^ActionSucceesBlock)(void);
typedef void (^ActionFailureBlock)(void);
typedef void (^ActionBlock)(ActionSucceesBlock success, ActionFailureBlock failure);
@interface TSOutgoingMessage (PostDatingDebug)
- (void)setReceivedAtTimestamp:(uint64_t)value;
@ -445,11 +449,13 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) {
break;
}
[alert addAction:[UIAlertAction actionWithTitle:label
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[self sendRandomMedia:mediaType thread:thread];
}]];
[alert addAction:[UIAlertAction
actionWithTitle:label
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[self performActionNTimes:[self sendRandomMediaAction:mediaType thread:thread]
thread:thread];
}]];
}
[alert addAction:[OWSAlerts cancelAction]];
@ -458,14 +464,54 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) {
[fromViewController presentViewController:alert animated:YES completion:nil];
}
+ (void)sendRandomMedia:(DebugMediaType)mediaType thread:(TSThread *)thread
+ (ActionBlock)sendRandomMediaAction:(DebugMediaType)mediaType thread:(TSThread *)thread
{
OWSAssert(thread);
return ^(ActionSucceesBlock success, ActionFailureBlock failure) {
void (^sendMessage)(NSString *) = ^(NSString *filePath) {
[self sendAttachment:filePath thread:thread success:success failure:failure];
};
DebugMediaType mediaTypeToSend = mediaType;
while (mediaTypeToSend == DebugMediaType_Random) {
NSArray<NSNumber *> *allMediaTypes = self.allMediaTypes;
NSNumber *value = allMediaTypes[arc4random_uniform((uint32_t)allMediaTypes.count)];
mediaTypeToSend = (DebugMediaType)value.intValue;
}
switch (mediaTypeToSend) {
case DebugMediaType_Gif:
return [self ensureRandomGifWithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Jpeg:
return [self ensureRandomJpegWithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Mp3:
return [self ensureRandomMp3WithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Mp4:
return [self ensureRandomMp4WithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Random:
OWSFail(@"%@ Invalid value.", self.logTag);
break;
}
};
}
+ (void)performActionNTimes:(ActionBlock)action thread:(TSThread *)thread
{
OWSAssertIsOnMainThread() OWSAssert(thread);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"How many to send?"
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"How many?"
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
for (NSNumber *countValue in @[
@(0),
@(1),
@(10),
@(100),
@ -474,10 +520,8 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) {
]) {
[alert addAction:[UIAlertAction actionWithTitle:countValue.stringValue
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[self sendRandomMedia:mediaType
count:countValue.unsignedIntegerValue
thread:thread];
handler:^(UIAlertAction *ignore) {
[self performAction:action count:countValue.unsignedIntegerValue];
}]];
}
@ -486,54 +530,22 @@ typedef NS_ENUM(NSUInteger, DebugMediaType) {
[fromViewController presentViewController:alert animated:YES completion:nil];
}
+ (void)sendRandomMedia:(DebugMediaType)mediaType count:(NSUInteger)count thread:(TSThread *)thread
+ (void)performAction:(ActionBlock)action count:(NSUInteger)count
{
OWSAssert(thread);
OWSAssert(action);
OWSAssert(count > 0);
void (^completion)(void) = ^{
if (count <= 1) {
return;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)1.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self sendRandomMedia:mediaType count:count - 1 thread:thread];
action(
^{
if (count <= 1) {
return;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)1.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self performAction:action count:count - 1];
});
},
^{
});
};
void (^sendMessage)(NSString *) = ^(NSString *filePath) {
[self sendAttachment:filePath
thread:thread
success:completion
failure:^{
}];
};
DebugMediaType mediaTypeToSend = mediaType;
while (mediaTypeToSend == DebugMediaType_Random) {
NSArray<NSNumber *> *allMediaTypes = self.allMediaTypes;
NSNumber *value = allMediaTypes[arc4random_uniform((uint32_t)allMediaTypes.count)];
mediaTypeToSend = (DebugMediaType)value.intValue;
}
switch (mediaTypeToSend) {
case DebugMediaType_Gif:
return [self ensureRandomGifWithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Jpeg:
return [self ensureRandomJpegWithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Mp3:
return [self ensureRandomMp3WithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Mp4:
return [self ensureRandomMp4WithSuccess:sendMessage
failure:^{
}];
case DebugMediaType_Random:
OWSFail(@"%@ Invalid value.", self.logTag);
break;
}
}
+ (void)ensureRandomJpegWithSuccess:(nullable void (^)(NSString *filePath))success