More logging, delete, new convo
This commit is contained in:
@@ -23,6 +23,8 @@
|
||||
|
||||
- (nullable IMChat *)_chatForHandleIDs:(NSArray<NSString *> *)handleIDs registry:(IMChatRegistry *)registry
|
||||
{
|
||||
MBIMLogInfo(@"Resolving send target for handles: %@", handleIDs);
|
||||
|
||||
IMAccount *iMessageAccount = [[IMAccountController sharedInstance] bestAccountForService:[IMServiceImpl iMessageService]];
|
||||
if (!iMessageAccount) {
|
||||
MBIMLogError(@"Unable to find an iMessage account for message send.");
|
||||
@@ -47,6 +49,12 @@
|
||||
chat = [registry chatWithHandle:handle];
|
||||
}
|
||||
|
||||
if (chat) {
|
||||
MBIMLogInfo(@"Resolved send target %@ to chat %@", [handle ID], [chat guid] ?: @"<unknown>");
|
||||
} else {
|
||||
MBIMLogError(@"Unable to locate or create chat for handle %@", [handle ID]);
|
||||
}
|
||||
|
||||
return chat;
|
||||
}
|
||||
|
||||
@@ -60,6 +68,12 @@
|
||||
chat = [registry chatWithHandles:handles displayName:nil joinedChatsOnly:YES];
|
||||
}
|
||||
|
||||
if (chat) {
|
||||
MBIMLogInfo(@"Resolved handles %@ to chat %@", handleIDs, [chat guid] ?: @"<unknown>");
|
||||
} else {
|
||||
MBIMLogError(@"Unable to locate or create chat for handles %@", handleIDs);
|
||||
}
|
||||
|
||||
return chat;
|
||||
}
|
||||
|
||||
@@ -69,6 +83,13 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSString *chatGUID = [chat guid];
|
||||
if (!chatGUID) {
|
||||
chatGUID = [[[IMChatRegistry sharedInstance] allGUIDsForChat:chat] firstObject];
|
||||
}
|
||||
|
||||
MBIMLogInfo(@"Preparing sendMessage for chat %@ (bodyLength=%lu attachmentCount=%lu)", chatGUID ?: @"<unknown>", (unsigned long)[messageBody length], (unsigned long)[guids count]);
|
||||
|
||||
IMAccount *sendingAccount = [chat account];
|
||||
if (!sendingAccount) {
|
||||
sendingAccount = [[IMAccountController sharedInstance] bestAccountForService:[IMServiceImpl iMessageService]];
|
||||
@@ -92,9 +113,15 @@
|
||||
[[IMFileTransferCenter sharedInstance] assignTransfer:guid toMessage:reply account:sendingAccount];
|
||||
}
|
||||
|
||||
NSMutableDictionary *result = [[reply mbim_dictionaryRepresentation] mutableCopy];
|
||||
NSDictionary *replyRepresentation = [reply mbim_dictionaryRepresentation];
|
||||
if (![replyRepresentation isKindOfClass:[NSDictionary class]]) {
|
||||
MBIMLogError(@"Unable to encode sent message for chat %@", chatGUID ?: @"<unknown>");
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSMutableDictionary *result = [replyRepresentation mutableCopy];
|
||||
if (includeConversationGUID) {
|
||||
NSString *conversationGUID = [chat guid];
|
||||
NSString *conversationGUID = chatGUID;
|
||||
if (!conversationGUID) {
|
||||
conversationGUID = [[[IMChatRegistry sharedInstance] allGUIDsForChat:chat] firstObject];
|
||||
}
|
||||
@@ -104,6 +131,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
MBIMLogInfo(@"Dispatching IMCore send for chat %@", chatGUID ?: @"<unknown>");
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[chat sendMessage:reply];
|
||||
});
|
||||
@@ -138,6 +166,7 @@
|
||||
NSError *error = nil;
|
||||
NSDictionary *args = [NSJSONSerialization JSONObjectWithData:self.requestBodyData options:0 error:&error];
|
||||
if (error || args.count == 0) {
|
||||
MBIMLogError(@"Unable to parse sendMessage request body: %@", error);
|
||||
self.serverCompletionBlock(response);
|
||||
return;
|
||||
}
|
||||
@@ -180,34 +209,65 @@
|
||||
}
|
||||
}
|
||||
|
||||
dispatch_sync([[self class] sharedIMAccessQueue], ^{
|
||||
IMChatRegistry *registry = [IMChatRegistry sharedInstance];
|
||||
IMChat *chat = nil;
|
||||
BOOL includeConversationGUID = NO;
|
||||
MBIMLogInfo(@"sendMessage request received. guid=%@ handleIDs=%@ bodyLength=%lu attachmentGUIDs=%@", hasGUID ? guid : @"<none>", handleIDs, (unsigned long)[messageBody length], transferGUIDs);
|
||||
|
||||
if (hasGUID) {
|
||||
chat = [registry existingChatWithGUID:guid];
|
||||
if (!chat) {
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Chat does not exist for the provided guid."];
|
||||
@try {
|
||||
dispatch_sync([[self class] sharedIMAccessQueue], ^{
|
||||
IMChatRegistry *registry = [IMChatRegistry sharedInstance];
|
||||
IMChat *chat = nil;
|
||||
BOOL includeConversationGUID = NO;
|
||||
|
||||
if (hasGUID) {
|
||||
MBIMLogInfo(@"sendMessage targeting existing conversation %@", guid);
|
||||
chat = [registry existingChatWithGUID:guid];
|
||||
if (!chat) {
|
||||
MBIMLogError(@"Chat does not exist for guid %@", guid);
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Chat does not exist for the provided guid."];
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
MBIMLogInfo(@"sendMessage targeting handles %@", handleIDs);
|
||||
chat = [self _chatForHandleIDs:handleIDs registry:registry];
|
||||
includeConversationGUID = YES;
|
||||
if (!chat) {
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Unable to create or locate a chat for the provided handles."];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
NSString *resolvedChatGUID = [chat guid];
|
||||
if (!resolvedChatGUID) {
|
||||
resolvedChatGUID = [[[IMChatRegistry sharedInstance] allGUIDsForChat:chat] firstObject];
|
||||
}
|
||||
MBIMLogInfo(@"sendMessage resolved target chat %@", resolvedChatGUID ?: @"<unknown>");
|
||||
|
||||
NSDictionary *result = [self _sendMessage:messageBody
|
||||
toChat:chat
|
||||
attachmentGUIDs:transferGUIDs
|
||||
includeConversationGUID:includeConversationGUID];
|
||||
if (!result) {
|
||||
MBIMLogError(@"sendMessage failed before a response payload could be encoded for chat %@", resolvedChatGUID ?: @"<unknown>");
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Unable to construct sent message response."];
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
chat = [self _chatForHandleIDs:handleIDs registry:registry];
|
||||
includeConversationGUID = YES;
|
||||
if (!chat) {
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Unable to create or locate a chat for the provided handles."];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
NSDictionary *result = [self _sendMessage:messageBody
|
||||
toChat:chat
|
||||
attachmentGUIDs:transferGUIDs
|
||||
includeConversationGUID:includeConversationGUID];
|
||||
if (result) {
|
||||
response = [MBIMJSONDataResponse responseWithJSONObject:result];
|
||||
}
|
||||
});
|
||||
NSObject<HTTPResponse> *jsonResponse = [MBIMJSONDataResponse responseWithJSONObject:result];
|
||||
if (jsonResponse) {
|
||||
response = jsonResponse;
|
||||
} else {
|
||||
MBIMLogError(@"Unable to encode sendMessage JSON response for chat %@", resolvedChatGUID ?: @"<unknown>");
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Unable to encode sendMessage response."];
|
||||
}
|
||||
});
|
||||
} @catch (NSException *exception) {
|
||||
MBIMLogError(@"Unhandled exception during sendMessage. name=%@ reason=%@ userInfo=%@", exception.name, exception.reason, exception.userInfo);
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Unhandled exception while sending message. Check server logs."];
|
||||
}
|
||||
|
||||
if (response == nil) {
|
||||
MBIMLogError(@"sendMessage completed without producing a response. guid=%@ handleIDs=%@", hasGUID ? guid : @"<none>", handleIDs);
|
||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"sendMessage did not produce a response. Check server logs."];
|
||||
}
|
||||
|
||||
self.serverCompletionBlock(response);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user