diff --git a/Source/ARTChannel.m b/Source/ARTChannel.m index 01dbdf01d..9edd6713c 100644 --- a/Source/ARTChannel.m +++ b/Source/ARTChannel.m @@ -175,6 +175,13 @@ - (void)getMessageWithSerial:(NSString *)serial NSAssert(false, @"-[%@ %@] should always be overriden.", self.class, NSStringFromSelector(_cmd)); } +- (void)getMessageVersionsWithSerial:(NSString *)serial + params:(nullable NSDictionary *)params + wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents + callback:(ARTPaginatedMessagesCallback)callback { + NSAssert(false, @"-[%@ %@] should always be overriden.", self.class, NSStringFromSelector(_cmd)); +} + - (void)getMessageVersionsWithSerial:(NSString *)serial wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents callback:(ARTPaginatedMessagesCallback)callback { diff --git a/Source/ARTRealtimeChannel.m b/Source/ARTRealtimeChannel.m index 6a829fdcc..f75a569e4 100644 --- a/Source/ARTRealtimeChannel.m +++ b/Source/ARTRealtimeChannel.m @@ -156,8 +156,12 @@ - (void)getMessageWithSerial:(NSString *)serial callback:(ARTMessageErrorCallbac [_internal getMessageWithSerial:serial wrapperSDKAgents:nil callback:callback]; } +- (void)getMessageVersionsWithSerial:(NSString *)serial params:(nullable NSDictionary *)params callback:(ARTPaginatedMessagesCallback)callback { + [_internal getMessageVersionsWithSerial:serial params:params wrapperSDKAgents:nil callback:callback]; +} + - (void)getMessageVersionsWithSerial:(NSString *)serial callback:(ARTPaginatedMessagesCallback)callback { - [_internal getMessageVersionsWithSerial:serial wrapperSDKAgents:nil callback:callback]; + [_internal getMessageVersionsWithSerial:serial params:nil wrapperSDKAgents:nil callback:callback]; } - (void)history:(ARTPaginatedMessagesCallback)callback { @@ -487,8 +491,11 @@ - (void)getMessageWithSerial:(NSString *)serial wrapperSDKAgents:(nullable NSStr [self.restChannel getMessageWithSerial:serial wrapperSDKAgents:wrapperSDKAgents callback:callback]; } -- (void)getMessageVersionsWithSerial:(NSString *)serial wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents callback:(ARTPaginatedMessagesCallback)callback { - [self.restChannel getMessageVersionsWithSerial:serial wrapperSDKAgents:wrapperSDKAgents callback:callback]; +- (void)getMessageVersionsWithSerial:(NSString *)serial + params:(nullable NSDictionary *)params + wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents + callback:(ARTPaginatedMessagesCallback)callback { + [self.restChannel getMessageVersionsWithSerial:serial params:params wrapperSDKAgents:wrapperSDKAgents callback:callback]; } - (void)publishProtocolMessage:(ARTProtocolMessage *)pm callback:(ARTStatusCallback)cb { diff --git a/Source/ARTRestChannel.m b/Source/ARTRestChannel.m index 3b05c43bc..492d3495c 100644 --- a/Source/ARTRestChannel.m +++ b/Source/ARTRestChannel.m @@ -113,8 +113,12 @@ - (void)getMessageWithSerial:(NSString *)serial callback:(ARTMessageErrorCallbac [_internal getMessageWithSerial:serial wrapperSDKAgents:nil callback:callback]; } +- (void)getMessageVersionsWithSerial:(NSString *)serial params:(nullable NSDictionary *)params callback:(ARTPaginatedMessagesCallback)callback { + [_internal getMessageVersionsWithSerial:serial params:params wrapperSDKAgents:nil callback:callback]; +} + - (void)getMessageVersionsWithSerial:(NSString *)serial callback:(ARTPaginatedMessagesCallback)callback { - [_internal getMessageVersionsWithSerial:serial wrapperSDKAgents:nil callback:callback]; + [_internal getMessageVersionsWithSerial:serial params:nil wrapperSDKAgents:nil callback:callback]; } - (void)history:(ARTPaginatedMessagesCallback)callback { @@ -624,6 +628,7 @@ - (void)getMessageWithSerial:(NSString *)serial // RSL14 - (void)getMessageVersionsWithSerial:(NSString *)serial + params:(nullable NSDictionary *)params wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents callback:(ARTPaginatedMessagesCallback)callback { if (callback) { @@ -639,6 +644,14 @@ - (void)getMessageVersionsWithSerial:(NSString *)serial NSString *messagePath = [NSString stringWithFormat:@"messages/%@/versions", [serial stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]]; NSURLComponents *components = [[NSURLComponents alloc] initWithURL:[NSURL URLWithString:[self->_basePath stringByAppendingPathComponent:messagePath]] resolvingAgainstBaseURL:YES]; + if (params && params.count > 0) { + NSMutableArray *queryItems = [NSMutableArray array]; + for (NSString *key in params) { + [queryItems addObject:[NSURLQueryItem queryItemWithName:key value:params[key].stringValue]]; + } + components.queryItems = queryItems; + } + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[components URL]]; request.HTTPMethod = @"GET"; diff --git a/Source/ARTWrapperSDKProxyRealtimeChannel.m b/Source/ARTWrapperSDKProxyRealtimeChannel.m index 7f3ccfe31..8350750f3 100644 --- a/Source/ARTWrapperSDKProxyRealtimeChannel.m +++ b/Source/ARTWrapperSDKProxyRealtimeChannel.m @@ -129,8 +129,16 @@ - (void)deleteMessage:(nonnull ARTMessage *)message operation:(nullable ARTMessa callback:callback]; } +- (void)getMessageVersionsWithSerial:(nonnull NSString *)serial params:(nullable NSDictionary *)params callback:(nonnull ARTPaginatedMessagesCallback)callback { + [self.underlyingChannel.internal getMessageVersionsWithSerial:serial + params:params + wrapperSDKAgents:self.proxyOptions.agents + callback:callback]; +} + - (void)getMessageVersionsWithSerial:(nonnull NSString *)serial callback:(nonnull ARTPaginatedMessagesCallback)callback { [self.underlyingChannel.internal getMessageVersionsWithSerial:serial + params:nil wrapperSDKAgents:self.proxyOptions.agents callback:callback]; } diff --git a/Source/PrivateHeaders/Ably/ARTChannel.h b/Source/PrivateHeaders/Ably/ARTChannel.h index c685dbe1c..62ed2eeae 100644 --- a/Source/PrivateHeaders/Ably/ARTChannel.h +++ b/Source/PrivateHeaders/Ably/ARTChannel.h @@ -61,6 +61,11 @@ NS_SWIFT_SENDABLE wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents callback:(ARTMessageErrorCallback)callback; +- (void)getMessageVersionsWithSerial:(NSString *)serial + params:(nullable NSDictionary *)params + wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents + callback:(ARTPaginatedMessagesCallback)callback; + - (void)getMessageVersionsWithSerial:(NSString *)serial wrapperSDKAgents:(nullable NSStringDictionary *)wrapperSDKAgents callback:(ARTPaginatedMessagesCallback)callback; diff --git a/Source/include/Ably/ARTChannelProtocol.h b/Source/include/Ably/ARTChannelProtocol.h index dbf5b0397..1ecdf0c67 100644 --- a/Source/include/Ably/ARTChannelProtocol.h +++ b/Source/include/Ably/ARTChannelProtocol.h @@ -104,6 +104,17 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)getMessageWithSerial:(NSString *)serial callback:(ARTMessageErrorCallback)callback; +/** + * Retrieves all historical versions of a specific message, ordered by version. This includes the original message and all subsequent updates or delete operations. + * + * @param serial A serial identifier string of the message whose versions are to be retrieved. + * @param params Optional parameters sent as part of the query string. + * @param callback A callback which, upon success, will contain an `ARTPaginatedResult` object containing an array of `ARTMessage` objects representing all versions of the message. Upon failure, the callback will contain an `ARTErrorInfo` object which explains the error. + */ +- (void)getMessageVersionsWithSerial:(NSString *)serial + params:(nullable NSDictionary *)params + callback:(ARTPaginatedMessagesCallback)callback; + /** * Retrieves all historical versions of a specific message, ordered by version. This includes the original message and all subsequent updates or delete operations. *