Skip to content

Commit

Permalink
By analogy with ARTRealtimePresenceQuery (which causes warning in X…
Browse files Browse the repository at this point in the history
…code 16) I've added `NS_SWIFT_SENDABLE` to other query types as well.

Also added NS_SWIFT_SENDABLE to `ARTChannelProperties`.
  • Loading branch information
maratal committed Sep 12, 2024
1 parent 80f05fd commit bfaaba1
Show file tree
Hide file tree
Showing 20 changed files with 287 additions and 21 deletions.
16 changes: 16 additions & 0 deletions Ably.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,12 @@
844B9CCF2C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
844B9CD02C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
844B9CD12C807BC400A260E8 /* ARTDeviceDetails+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
845381F42C930A8C0085834E /* ARTBaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 845381F32C930A8C0085834E /* ARTBaseQuery.h */; settings = {ATTRIBUTES = (Private, ); }; };
845381F52C930A8C0085834E /* ARTBaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 845381F32C930A8C0085834E /* ARTBaseQuery.h */; settings = {ATTRIBUTES = (Private, ); }; };
845381F62C930A8C0085834E /* ARTBaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 845381F32C930A8C0085834E /* ARTBaseQuery.h */; settings = {ATTRIBUTES = (Private, ); }; };
845381F82C930B9D0085834E /* ARTBaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 845381F72C930B9D0085834E /* ARTBaseQuery.m */; };
845381F92C930B9D0085834E /* ARTBaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 845381F72C930B9D0085834E /* ARTBaseQuery.m */; };
845381FA2C930B9D0085834E /* ARTBaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 845381F72C930B9D0085834E /* ARTBaseQuery.m */; };
848ED97326E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; };
848ED97426E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; };
848ED97526E50D0F0087E800 /* ObjcppTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848ED97226E50D0F0087E800 /* ObjcppTest.mm */; settings = {COMPILER_FLAGS = "-fmodules"; }; };
Expand Down Expand Up @@ -1245,6 +1251,8 @@
8412FDE32661AC37001FE9E6 /* msgpack.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = msgpack.xcframework; path = Carthage/Build/msgpack.xcframework; sourceTree = "<group>"; };
8412FDF42661AC7B001FE9E6 /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = "<group>"; };
844B9CCE2C807BC400A260E8 /* ARTDeviceDetails+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ARTDeviceDetails+Private.h"; path = "PrivateHeaders/Ably/ARTDeviceDetails+Private.h"; sourceTree = "<group>"; };
845381F32C930A8C0085834E /* ARTBaseQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ARTBaseQuery.h; path = include/Ably/ARTBaseQuery.h; sourceTree = "<group>"; };
845381F72C930B9D0085834E /* ARTBaseQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTBaseQuery.m; sourceTree = "<group>"; };
848ED97226E50D0F0087E800 /* ObjcppTest.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjcppTest.mm; sourceTree = "<group>"; };
850BFB4A1B79323C009D0ADD /* ARTPaginatedResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ARTPaginatedResult.h; path = include/Ably/ARTPaginatedResult.h; sourceTree = "<group>"; };
850BFB4B1B79323C009D0ADD /* ARTPaginatedResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTPaginatedResult.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2125,6 +2133,8 @@
96BF61571A35B52C004CF2B3 /* ARTHttp.m */,
D7588AF11BFF91B800BB8279 /* ARTURLSessionServerTrust.h */,
D7588AF21BFF91B800BB8279 /* ARTURLSessionServerTrust.m */,
845381F32C930A8C0085834E /* ARTBaseQuery.h */,
845381F72C930B9D0085834E /* ARTBaseQuery.m */,
D746AE1A1BBB5207003ECEF8 /* ARTDataQuery.h */,
D746AE1B1BBB5207003ECEF8 /* ARTDataQuery+Private.h */,
D746AE1C1BBB5207003ECEF8 /* ARTDataQuery.m */,
Expand Down Expand Up @@ -2232,6 +2242,7 @@
EB91213E1CA0AD6600BA0A40 /* ARTMsgPackEncoder.h in Headers */,
96A507BD1A3791490077CDF8 /* ARTRealtime.h in Headers */,
21088DC32A5354F10033C722 /* ARTConnectRetryState.h in Headers */,
845381F42C930A8C0085834E /* ARTBaseQuery.h in Headers */,
EB5E058D1C77027600A48B39 /* ARTCrypto+Private.h in Headers */,
2132C2F529D5BE05000C4355 /* ARTRetrySequence.h in Headers */,
D72C67DF201AB74000978EBB /* ARTPushActivationStateMachine+Private.h in Headers */,
Expand Down Expand Up @@ -2472,6 +2483,7 @@
D710D4A921949ADF008F54AD /* ARTRestChannels.h in Headers */,
D710D4D821949BF9008F54AD /* ARTRealtimePresence.h in Headers */,
D710D48F21949AAE008F54AD /* ARTRest.h in Headers */,
845381F52C930A8C0085834E /* ARTBaseQuery.h in Headers */,
D710D5B821949D4F008F54AD /* ARTAuthOptions+Private.h in Headers */,
2124B79429DB13C400AD8361 /* ARTInternalLog.h in Headers */,
D710D51D21949C42008F54AD /* ARTDeviceStorage.h in Headers */,
Expand Down Expand Up @@ -2642,6 +2654,7 @@
D710D4AF21949AE0008F54AD /* ARTRestChannels.h in Headers */,
D710D4E821949BFB008F54AD /* ARTRealtimePresence.h in Headers */,
D710D49121949AAF008F54AD /* ARTRest.h in Headers */,
845381F62C930A8C0085834E /* ARTBaseQuery.h in Headers */,
D710D5C821949D50008F54AD /* ARTAuthOptions+Private.h in Headers */,
2124B79529DB13C400AD8361 /* ARTInternalLog.h in Headers */,
D710D52F21949C44008F54AD /* ARTDeviceStorage.h in Headers */,
Expand Down Expand Up @@ -3177,6 +3190,7 @@
D7DF738B1EA645300013CD36 /* ARTLocalDeviceStorage.m in Sources */,
D7B621911E4A6E0200684474 /* ARTPush.m in Sources */,
D70C36C6233E6831002FD6E3 /* ARTFormEncode.m in Sources */,
845381F82C930B9D0085834E /* ARTBaseQuery.m in Sources */,
D7AE18D31E5B410F00478D82 /* ARTPushChannelSubscriptions.m in Sources */,
1CD8DCA01B1C7315007EAF36 /* ARTDefault.m in Sources */,
211A610729DA05D700D169C5 /* ARTAttachRequestParams.m in Sources */,
Expand Down Expand Up @@ -3417,6 +3431,7 @@
D710D5D621949D78008F54AD /* ARTChannel.m in Sources */,
D70C36C7233E6831002FD6E3 /* ARTFormEncode.m in Sources */,
D710D5D121949D78008F54AD /* ARTAuthDetails.m in Sources */,
845381F92C930B9D0085834E /* ARTBaseQuery.m in Sources */,
D710D4EC21949C0D008F54AD /* ARTRealtime.m in Sources */,
D710D4ED21949C0D008F54AD /* ARTRealtimeChannel.m in Sources */,
211A610829DA05D700D169C5 /* ARTAttachRequestParams.m in Sources */,
Expand Down Expand Up @@ -3541,6 +3556,7 @@
D70C36C8233E6831002FD6E3 /* ARTFormEncode.m in Sources */,
D710D5F721949D79008F54AD /* ARTAuthDetails.m in Sources */,
D710D4FC21949C0E008F54AD /* ARTRealtime.m in Sources */,
845381FA2C930B9D0085834E /* ARTBaseQuery.m in Sources */,
D710D4FD21949C0E008F54AD /* ARTRealtimeChannel.m in Sources */,
D710D65621949E77008F54AD /* ARTNSDictionary+ARTDictionaryUtil.m in Sources */,
211A610929DA05D700D169C5 /* ARTAttachRequestParams.m in Sources */,
Expand Down
4 changes: 4 additions & 0 deletions Source/ARTBaseQuery.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#import "ARTBaseQuery.h"

@implementation ARTBaseQuery
@end
76 changes: 74 additions & 2 deletions Source/ARTDataQuery.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
#import "ARTDataQuery+Private.h"
#import "ARTRealtimeChannel+Private.h"

@implementation ARTDataQuery
@implementation ARTDataQuery {
NSDate *_start;
NSDate *_end;
uint16_t _limit;
ARTQueryDirection _direction;
}

- (instancetype)init {
if (self = [super init]) {
Expand Down Expand Up @@ -38,9 +43,63 @@ - (NSMutableArray *)asQueryItems:(NSError *_Nullable*)error {
return items;
}

- (NSDate *)start {
return _start;
}

- (void)setStart:(NSDate *)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_start = value;
}

- (NSDate *)end {
return _end;
}

- (void)setEnd:(NSDate *)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_end = value;
}

- (uint16_t)limit {
return _limit;
}

- (void)setLimit:(uint16_t)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_limit = value;
}

- (ARTQueryDirection)direction {
return _direction;
}

- (void)setDirection:(ARTQueryDirection)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_direction = value;
}

@end

@implementation ARTRealtimeHistoryQuery
@implementation ARTRealtimeHistoryQuery {
BOOL _untilAttach;
}

- (NSMutableArray *)asQueryItems:(NSError **)errorPtr {
NSMutableArray *items = [super asQueryItems:errorPtr];
Expand All @@ -58,4 +117,17 @@ - (NSMutableArray *)asQueryItems:(NSError **)errorPtr {
return items;
}

- (BOOL)untilAttach {
return _untilAttach;
}

- (void)setUntilAttach:(BOOL)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_untilAttach = value;
}

@end
19 changes: 18 additions & 1 deletion Source/ARTRealtimePresence.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@

#pragma mark - ARTRealtimePresenceQuery

@implementation ARTRealtimePresenceQuery
@implementation ARTRealtimePresenceQuery {
BOOL _waitForSync;
}

- (instancetype)initWithLimit:(NSUInteger)limit clientId:(NSString *)clientId connectionId:(NSString *)connectionId {
self = [super initWithLimit:limit clientId:clientId connectionId:connectionId];
Expand All @@ -29,6 +31,19 @@ - (instancetype)initWithLimit:(NSUInteger)limit clientId:(NSString *)clientId co
return self;
}

- (BOOL)waitForSync {
return _waitForSync;
}

- (void)setWaitForSync:(BOOL)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_waitForSync = value;
}

@end

@implementation ARTRealtimePresence {
Expand Down Expand Up @@ -221,6 +236,8 @@ - (void)get:(ARTRealtimePresenceQuery *)query callback:(ARTPresenceMessagesCallb
};
}

query.frozen = true;

dispatch_async(_queue, ^{
switch (self->_channel.state_nosync) {
case ARTRealtimeChannelDetached:
Expand Down
2 changes: 2 additions & 0 deletions Source/ARTRest.m
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,8 @@ - (BOOL)stats:(ARTStatsQuery *)query callback:(ARTPaginatedStatsCallback)callbac
});
};
}

query.frozen = true;

if (query.limit > 1000) {
if (errorPtr) {
Expand Down
2 changes: 2 additions & 0 deletions Source/ARTRestChannel.m
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ - (BOOL)history:(ARTDataQuery *)query callback:(ARTPaginatedMessagesCallback)cal
});
};
}

query.frozen = true;

__block BOOL ret;
dispatch_sync(_queue, ^{
Expand Down
49 changes: 48 additions & 1 deletion Source/ARTRestPresence.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@
#import "ARTChannel.h"
#import "ARTDataQuery.h"

@implementation ARTPresenceQuery
@implementation ARTPresenceQuery {
NSUInteger _limit;
NSString *_clientId;
NSString *_connectionId;
}

- (instancetype)init {
return [self initWithClientId:nil connectionId:nil];
Expand Down Expand Up @@ -49,6 +53,45 @@ - (NSMutableArray *)asQueryItems {
return items;
}

- (NSUInteger)limit {
return _limit;
}

- (void)setLimit:(NSUInteger)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_limit = value;
}

- (NSString *)clientId {
return _clientId;
}

- (void)setClientId:(NSString *)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_clientId = value;
}

- (NSString *)connectionId {
return _connectionId;
}

- (void)setConnectionId:(NSString *)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_connectionId = value;
}

@end

@implementation ARTRestPresence {
Expand Down Expand Up @@ -130,6 +173,8 @@ - (BOOL)get:(ARTPresenceQuery *)query callback:(ARTPaginatedPresenceCallback)cal
};
}

query.frozen = true;

if (query.limit > 1000) {
if (errorPtr) {
*errorPtr = [NSError errorWithDomain:ARTAblyErrorDomain
Expand Down Expand Up @@ -175,6 +220,8 @@ - (BOOL)history:(ARTDataQuery *)query callback:(ARTPaginatedPresenceCallback)cal
};
}

query.frozen = true;

if (query.limit > 1000) {
if (errorPtr) {
*errorPtr = [NSError errorWithDomain:ARTAblyErrorDomain
Expand Down
17 changes: 16 additions & 1 deletion Source/ARTStats.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#import "ARTStats.h"
#import "ARTDataQuery+Private.h"

@implementation ARTStatsQuery
@implementation ARTStatsQuery {
ARTStatsGranularity _unit;
}

- (instancetype)init {
if (self = [super init]) {
Expand Down Expand Up @@ -34,6 +36,19 @@ - (NSMutableArray *)asQueryItems:(NSError **)error {
return items;
}

- (ARTStatsGranularity)unit {
return _unit;
}

- (void)setUnit:(ARTStatsGranularity)value {
if (self.isFrozen) {
@throw [NSException exceptionWithName:NSObjectInaccessibleException
reason:[NSString stringWithFormat:@"%@: You can't change query after you've passed it to the receiver.", self.class]
userInfo:nil];
}
_unit = value;
}

@end

@implementation ARTStatsMessageCount
Expand Down
1 change: 1 addition & 0 deletions Source/Ably.modulemap
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ framework module Ably {
header "ARTChannels+Private.h"
header "ARTConnection+Private.h"
header "ARTConnectionDetails+Private.h"
header "ARTBaseQuery.h"
header "ARTDataQuery+Private.h"
header "ARTDefault+Private.h"
header "ARTEventEmitter+Private.h"
Expand Down
8 changes: 8 additions & 0 deletions Source/include/Ably/ARTBaseQuery.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#import <Foundation/Foundation.h>

/// :nodoc:
@interface ARTBaseQuery : NSObject

@property (nonatomic, getter=isFrozen) BOOL frozen;

@end
6 changes: 4 additions & 2 deletions Source/include/Ably/ARTDataQuery.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#import <Foundation/Foundation.h>

#import <Ably/ARTBaseQuery.h>
#import <Ably/ARTTypes.h>

NS_ASSUME_NONNULL_BEGIN
Expand All @@ -14,7 +14,8 @@ typedef NS_ENUM(NSUInteger, ARTQueryDirection) {
/**
This object is used for providing parameters into methods with paginated results.
*/
@interface ARTDataQuery : NSObject
NS_SWIFT_SENDABLE
@interface ARTDataQuery : ARTBaseQuery

/**
* The time from which the data items are retrieved.
Expand All @@ -41,6 +42,7 @@ typedef NS_ENUM(NSUInteger, ARTQueryDirection) {
/**
This object is used for providing parameters into `ARTRealtimePresence`'s methods with paginated results.
*/
NS_SWIFT_SENDABLE
@interface ARTRealtimeHistoryQuery : ARTDataQuery

/**
Expand Down
1 change: 1 addition & 0 deletions Source/include/Ably/ARTRealtimeChannel.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ ART_EMBED_INTERFACE_EVENT_EMITTER(ARTChannelEvent, ARTChannelStateChange *)
/**
* Describes the properties of the channel state.
*/
NS_SWIFT_SENDABLE
@interface ARTChannelProperties : NSObject
/**
* Starts unset when a channel is instantiated, then updated with the `channelSerial` from each `ARTChannelEventAttached` event that matches the channel. Used as the value for `ARTRealtimeHistoryQuery.untilAttach`.
Expand Down
Loading

0 comments on commit bfaaba1

Please sign in to comment.