MessagesList: Also adds support for afterMessageGUID
This commit is contained in:
@@ -15,6 +15,11 @@
|
|||||||
|
|
||||||
#define kDefaultMessagesLimit 75
|
#define kDefaultMessagesLimit 75
|
||||||
|
|
||||||
|
@interface IMChat (MBIMSafeMessagesLoading)
|
||||||
|
- (void)load:(NSUInteger)number messagesBeforeGUID:(NSString *)beforeMessageGUID;
|
||||||
|
- (void)load:(NSUInteger)number messagesAfterGUID:(NSString *)afterMessageGUID;
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation MBIMMessagesListOperation
|
@implementation MBIMMessagesListOperation
|
||||||
|
|
||||||
+ (void)load { [super load]; }
|
+ (void)load { [super load]; }
|
||||||
@@ -45,6 +50,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSString *beforeMessageGUID = [self valueForQueryItemWithName:@"beforeMessageGUID"];
|
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) {
|
if (!guid) {
|
||||||
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"No GUID provided."];
|
response = [[MBIMErrorResponse alloc] initWithErrorCode:500 message:@"No GUID provided."];
|
||||||
@@ -67,23 +78,25 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (beforeMessageGUID) {
|
if (beforeMessageGUID) {
|
||||||
if ([chat respondsToSelector:@selector(loadMessagesBeforeAndAfterGUID:numberOfMessagesToLoadBeforeGUID:numberOfMessagesToLoadAfterGUID:loadImmediately:threadIdentifier:)]) {
|
[chat load:limit messagesBeforeGUID:beforeMessageGUID];
|
||||||
[chat loadMessagesBeforeAndAfterGUID:beforeMessageGUID numberOfMessagesToLoadBeforeGUID:limit numberOfMessagesToLoadAfterGUID:0 loadImmediately:YES threadIdentifier:nil];
|
} else if (afterMessageGUID) {
|
||||||
} else {
|
[chat load:limit messagesAfterGUID:afterMessageGUID];
|
||||||
[chat loadMessagesBeforeAndAfterGUID:beforeMessageGUID numberOfMessagesToLoadBeforeGUID:limit numberOfMessagesToLoadAfterGUID:0 loadImmediately:YES];
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
[chat loadMessagesBeforeDate:beforeDate limit:limit loadImmediately:YES];
|
[chat loadMessagesBeforeDate:beforeDate limit:limit loadImmediately:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
[[chat chatItems] enumerateMessagesWithOptions:0 usingBlock:^(IMMessage *message, BOOL *stop) {
|
[[chat chatItems] enumerateMessagesWithOptions:0 usingBlock:^(IMMessage *message, BOOL *stop) {
|
||||||
|
// Assume "beforeMessageGUID" is exclusive
|
||||||
if ([[message guid] isEqual:beforeMessageGUID]) {
|
if ([[message guid] isEqual:beforeMessageGUID]) {
|
||||||
*stop = YES;
|
*stop = YES;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assume "afterMessageGUID" is exclusive.
|
||||||
|
if (![[message guid] isEqual:afterMessageGUID]) {
|
||||||
NSDictionary *messageDict = [message mbim_dictionaryRepresentation];
|
NSDictionary *messageDict = [message mbim_dictionaryRepresentation];
|
||||||
[messages addObject:messageDict];
|
[messages addObject:messageDict];
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -96,3 +109,35 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@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
|
||||||
|
|||||||
Reference in New Issue
Block a user