Private
Public Access
1
0

MessagesList: Also adds support for afterMessageGUID

This commit is contained in:
James Magahern
2022-08-03 17:13:01 -07:00
parent 83ba072a9d
commit cad3425327

View File

@@ -15,6 +15,11 @@
#define kDefaultMessagesLimit 75
@interface IMChat (MBIMSafeMessagesLoading)
- (void)load:(NSUInteger)number messagesBeforeGUID:(NSString *)beforeMessageGUID;
- (void)load:(NSUInteger)number messagesAfterGUID:(NSString *)afterMessageGUID;
@end
@implementation MBIMMessagesListOperation
+ (void)load { [super load]; }
@@ -45,6 +50,12 @@
}
NSString *beforeMessageGUID = [self valueForQueryItemWithName:@"beforeMessageGUID"];
NSString *afterMessageGUID = [self valueForQueryItemWithName:@"afterMessageGUID"];
if (beforeMessageGUID && afterMessageGUID) {
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"Cannot provide both beforeMessageGUID and afterMessageGUID params."];
break;
}
if (!guid) {
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"No GUID provided."];
@@ -67,23 +78,25 @@
}
if (beforeMessageGUID) {
if ([chat respondsToSelector:@selector(loadMessagesBeforeAndAfterGUID:numberOfMessagesToLoadBeforeGUID:numberOfMessagesToLoadAfterGUID:loadImmediately:threadIdentifier:)]) {
[chat loadMessagesBeforeAndAfterGUID:beforeMessageGUID numberOfMessagesToLoadBeforeGUID:limit numberOfMessagesToLoadAfterGUID:0 loadImmediately:YES threadIdentifier:nil];
} else {
[chat loadMessagesBeforeAndAfterGUID:beforeMessageGUID numberOfMessagesToLoadBeforeGUID:limit numberOfMessagesToLoadAfterGUID:0 loadImmediately:YES];
}
[chat load:limit messagesBeforeGUID:beforeMessageGUID];
} else if (afterMessageGUID) {
[chat load:limit messagesAfterGUID:afterMessageGUID];
} else {
[chat loadMessagesBeforeDate:beforeDate limit:limit loadImmediately:YES];
}
[[chat chatItems] enumerateMessagesWithOptions:0 usingBlock:^(IMMessage *message, BOOL *stop) {
// Assume "beforeMessageGUID" is exclusive
if ([[message guid] isEqual:beforeMessageGUID]) {
*stop = YES;
return;
}
NSDictionary *messageDict = [message mbim_dictionaryRepresentation];
[messages addObject:messageDict];
// Assume "afterMessageGUID" is exclusive.
if (![[message guid] isEqual:afterMessageGUID]) {
NSDictionary *messageDict = [message mbim_dictionaryRepresentation];
[messages addObject:messageDict];
}
}];
});
}
@@ -96,3 +109,35 @@
}
@end
@implementation IMChat (MBIMSafeMessagesLoading)
- (id)_safe_loadMessagesBeforeAndAfterGUID:(NSString *)messagesGUID numberOfMessagesToLoadBeforeGUID:(NSUInteger)limitBefore numberOfMessagesToLoadAfterGUID:(NSUInteger)limitAfter loadImmediately:(BOOL)loadImmediately
{
if ([self respondsToSelector:@selector(loadMessagesBeforeAndAfterGUID:
numberOfMessagesToLoadBeforeGUID:
numberOfMessagesToLoadAfterGUID:
loadImmediately:threadIdentifier:)]) {
return [self loadMessagesBeforeAndAfterGUID:messagesGUID
numberOfMessagesToLoadBeforeGUID:limitBefore
numberOfMessagesToLoadAfterGUID:limitAfter
loadImmediately:YES threadIdentifier:nil];
} else {
return [self loadMessagesBeforeAndAfterGUID:messagesGUID
numberOfMessagesToLoadBeforeGUID:limitBefore
numberOfMessagesToLoadAfterGUID:limitAfter
loadImmediately:YES];
}
}
- (void)load:(NSUInteger)number messagesBeforeGUID:(NSString *)beforeMessageGUID
{
[self _safe_loadMessagesBeforeAndAfterGUID:beforeMessageGUID numberOfMessagesToLoadBeforeGUID:number numberOfMessagesToLoadAfterGUID:0 loadImmediately:YES];
}
- (void)load:(NSUInteger)number messagesAfterGUID:(NSString *)afterMessageGUID
{
[self _safe_loadMessagesBeforeAndAfterGUID:afterMessageGUID numberOfMessagesToLoadBeforeGUID:0 numberOfMessagesToLoadAfterGUID:number loadImmediately:YES];
}
@end