From 5e941fc3aa07553c8a4a3191cc58521e4669fdc4 Mon Sep 17 00:00:00 2001 From: zapcannon87 Date: Tue, 28 Dec 2021 14:29:01 +0800 Subject: [PATCH 1/3] chore: update cli --- main.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/main.swift b/main.swift index e4efdac8..7ac139ea 100755 --- a/main.swift +++ b/main.swift @@ -61,6 +61,7 @@ class Task { completion?($0) group.leave() } + print("Run Task: \(self.task.arguments?[0] ?? "") \(self.task.arguments?[1] ?? "") ...") try self.task.run() self.task.waitUntilExit() } catch { From 03cddd5fefde83bde744d8e4cdfa9a59790ff0ba Mon Sep 17 00:00:00 2001 From: zapcannon87 Date: Tue, 28 Dec 2021 15:28:19 +0800 Subject: [PATCH 2/3] refactor: message media type --- .../IM/Conversation/LCIMConversation.m | 98 +++++++++---------- .../Sources/Realtime/IM/Message/LCIMMessage.h | 14 ++- .../Sources/Realtime/IM/Message/LCIMMessage.m | 9 ++ .../IM/TypedMessages/LCIMAudioMessage.m | 2 +- .../IM/TypedMessages/LCIMFileMessage.m | 2 +- .../IM/TypedMessages/LCIMImageMessage.m | 2 +- .../IM/TypedMessages/LCIMLocationMessage.m | 2 +- .../IM/TypedMessages/LCIMRecalledMessage.m | 2 +- .../IM/TypedMessages/LCIMTextMessage.m | 2 +- .../IM/TypedMessages/LCIMTypedMessage.h | 5 +- .../IM/TypedMessages/LCIMVideoMessage.m | 2 +- 11 files changed, 73 insertions(+), 67 deletions(-) diff --git a/AVOS/Sources/Realtime/IM/Conversation/LCIMConversation.m b/AVOS/Sources/Realtime/IM/Conversation/LCIMConversation.m index 9c877fdc..bacd0214 100644 --- a/AVOS/Sources/Realtime/IM/Conversation/LCIMConversation.m +++ b/AVOS/Sources/Realtime/IM/Conversation/LCIMConversation.m @@ -1341,69 +1341,59 @@ - (void)fillTypedMessage:(LCIMTypedMessage *)typedMessage withFile:(LCFile *)fil { NSMutableDictionary *metaData = (file.metaData.mutableCopy ?: [NSMutableDictionary dictionary]); - switch (typedMessage.mediaType) { - case kLCIMMessageMediaTypeImage: - { - double width = [metaData[@"width"] doubleValue]; - double height = [metaData[@"height"] doubleValue]; - if (!(width > 0 && height > 0)) { + if (typedMessage.mediaType == LCIMMessageMediaTypeImage) { + double width = [metaData[@"width"] doubleValue]; + double height = [metaData[@"height"] doubleValue]; + if (!(width > 0 && height > 0)) { #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - UIImage *image = ({ - UIImage *image; - NSString *cachedPath = file.persistentCachePath; - if ([[NSFileManager defaultManager] fileExistsAtPath:cachedPath]) { - NSData *data = [NSData dataWithContentsOfFile:cachedPath]; - image = [UIImage imageWithData:data]; - } - image; - }); - width = image.size.width * image.scale; - height = image.size.height * image.scale; -#elif TARGET_OS_OSX - NSImage *image = ({ - NSImage *image; - NSString *cachedPath = file.persistentCachePath; - if ([[NSFileManager defaultManager] fileExistsAtPath:cachedPath]) { - NSData *data = [NSData dataWithContentsOfFile:cachedPath]; - image = [[NSImage alloc] initWithData:data]; - } - image; - }); - width = image.size.width; - height = image.size.height; -#endif - if (width > 0) { - metaData[@"width"] = @(width); + UIImage *image = ({ + UIImage *image; + NSString *cachedPath = file.persistentCachePath; + if ([[NSFileManager defaultManager] fileExistsAtPath:cachedPath]) { + NSData *data = [NSData dataWithContentsOfFile:cachedPath]; + image = [UIImage imageWithData:data]; } - if (height > 0) { - metaData[@"height"] = @(height); + image; + }); + width = image.size.width * image.scale; + height = image.size.height * image.scale; +#elif TARGET_OS_OSX + NSImage *image = ({ + NSImage *image; + NSString *cachedPath = file.persistentCachePath; + if ([[NSFileManager defaultManager] fileExistsAtPath:cachedPath]) { + NSData *data = [NSData dataWithContentsOfFile:cachedPath]; + image = [[NSImage alloc] initWithData:data]; } + image; + }); + width = image.size.width; + height = image.size.height; +#endif + if (width > 0) { + metaData[@"width"] = @(width); + } + if (height > 0) { + metaData[@"height"] = @(height); } } - break; - case kLCIMMessageMediaTypeAudio: - case kLCIMMessageMediaTypeVideo: - { - double seconds = [metaData[@"duration"] doubleValue]; - if (!(seconds > 0)) { - NSString *path = file.persistentCachePath; - if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { - NSURL *fileURL = [NSURL fileURLWithPath:path]; - if (fileURL) { - AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:fileURL - options:nil]; - seconds = CMTimeGetSeconds(audioAsset.duration); - if (seconds > 0) { - metaData[@"duration"] = @(seconds); - } + } else if (typedMessage.mediaType == LCIMMessageMediaTypeAudio || + typedMessage.mediaType == LCIMMessageMediaTypeVideo) { + double seconds = [metaData[@"duration"] doubleValue]; + if (!(seconds > 0)) { + NSString *path = file.persistentCachePath; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + NSURL *fileURL = [NSURL fileURLWithPath:path]; + if (fileURL) { + AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:fileURL + options:nil]; + seconds = CMTimeGetSeconds(audioAsset.duration); + if (seconds > 0) { + metaData[@"duration"] = @(seconds); } } } } - break; - case kLCIMMessageMediaTypeFile: - default: - break; } NSString *fileName = file.name; if (fileName) { diff --git a/AVOS/Sources/Realtime/IM/Message/LCIMMessage.h b/AVOS/Sources/Realtime/IM/Message/LCIMMessage.h index a169a376..dc2e902b 100644 --- a/AVOS/Sources/Realtime/IM/Message/LCIMMessage.h +++ b/AVOS/Sources/Realtime/IM/Message/LCIMMessage.h @@ -8,7 +8,17 @@ #import "LCIMCommon.h" -typedef NS_ENUM(int32_t, LCIMMessageMediaType) { +typedef int32_t LCIMMessageMediaType NS_TYPED_EXTENSIBLE_ENUM; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeNone; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeText; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeImage; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeAudio; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeVideo; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeLocation; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeFile; +FOUNDATION_EXPORT const LCIMMessageMediaType LCIMMessageMediaTypeRecalled; + +typedef NS_ENUM(int32_t, kLCIMMessageMediaType) { kLCIMMessageMediaTypeNone = 0, kLCIMMessageMediaTypeText = -1, kLCIMMessageMediaTypeImage = -2, @@ -17,7 +27,7 @@ typedef NS_ENUM(int32_t, LCIMMessageMediaType) { kLCIMMessageMediaTypeLocation = -5, kLCIMMessageMediaTypeFile = -6, kLCIMMessageMediaTypeRecalled = -127 -}; +} __deprecated_enum_msg("Deprecated! please use `LCIMMessageMediaType` instead, this ENUM may be removed in the future."); typedef NS_ENUM(int8_t, LCIMMessageIOType) { LCIMMessageIOTypeIn = 1, diff --git a/AVOS/Sources/Realtime/IM/Message/LCIMMessage.m b/AVOS/Sources/Realtime/IM/Message/LCIMMessage.m index b9630280..371c0a51 100644 --- a/AVOS/Sources/Realtime/IM/Message/LCIMMessage.m +++ b/AVOS/Sources/Realtime/IM/Message/LCIMMessage.m @@ -12,6 +12,15 @@ #import "LCIMConversation_Internal.h" #import "LCIMTypedMessage_Internal.h" +const LCIMMessageMediaType LCIMMessageMediaTypeNone = 0; +const LCIMMessageMediaType LCIMMessageMediaTypeText = -1; +const LCIMMessageMediaType LCIMMessageMediaTypeImage = -2; +const LCIMMessageMediaType LCIMMessageMediaTypeAudio = -3; +const LCIMMessageMediaType LCIMMessageMediaTypeVideo = -4; +const LCIMMessageMediaType LCIMMessageMediaTypeLocation = -5; +const LCIMMessageMediaType LCIMMessageMediaTypeFile = -6; +const LCIMMessageMediaType LCIMMessageMediaTypeRecalled = -127; + @implementation LCIMMessagePatchedReason @end diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMAudioMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMAudioMessage.m index d077fb8d..3c9579b1 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMAudioMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMAudioMessage.m @@ -18,7 +18,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeAudio; + return LCIMMessageMediaTypeAudio; } - (double)size { diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMFileMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMFileMessage.m index d2634e96..35a0f31f 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMFileMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMFileMessage.m @@ -18,7 +18,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeFile; + return LCIMMessageMediaTypeFile; } - (double)size { diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMImageMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMImageMessage.m index abbf71cd..8999a21c 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMImageMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMImageMessage.m @@ -18,7 +18,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeImage; + return LCIMMessageMediaTypeImage; } - (double)width { diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMLocationMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMLocationMessage.m index 718d3324..feffeea1 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMLocationMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMLocationMessage.m @@ -19,7 +19,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeLocation; + return LCIMMessageMediaTypeLocation; } + (instancetype)messageWithText:(NSString *)text diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMRecalledMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMRecalledMessage.m index 1a6e5e01..1589d84b 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMRecalledMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMRecalledMessage.m @@ -20,7 +20,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeRecalled; + return LCIMMessageMediaTypeRecalled; } @end diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTextMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTextMessage.m index b5a5658b..7bf74d9c 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTextMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTextMessage.m @@ -18,7 +18,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeText; + return LCIMMessageMediaTypeText; } + (instancetype)messageWithText:(NSString *)text diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTypedMessage.h b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTypedMessage.h index edcc2052..bd131d7c 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTypedMessage.h +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMTypedMessage.h @@ -11,9 +11,6 @@ @class LCFile; @class LCGeoPoint; - -typedef int32_t MessageMediaType; - NS_ASSUME_NONNULL_BEGIN @protocol LCIMTypedMessageSubclassing @@ -23,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN /// The type of the typed message, /// The zero and negative number is reserved for default typed message, /// Any other typed message should use positive number. -+ (MessageMediaType)classMediaType; ++ (LCIMMessageMediaType)classMediaType; @end diff --git a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMVideoMessage.m b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMVideoMessage.m index 4c43483c..92c4e62a 100644 --- a/AVOS/Sources/Realtime/IM/TypedMessages/LCIMVideoMessage.m +++ b/AVOS/Sources/Realtime/IM/TypedMessages/LCIMVideoMessage.m @@ -18,7 +18,7 @@ + (void)load + (LCIMMessageMediaType)classMediaType { - return kLCIMMessageMediaTypeVideo; + return LCIMMessageMediaTypeVideo; } - (double)size { From 54fe65ee1bfaa0dc345cea46840d7ad39468c909 Mon Sep 17 00:00:00 2001 From: zapcannon87 Date: Tue, 28 Dec 2021 15:28:34 +0800 Subject: [PATCH 3/3] test: update --- AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift | 1 + AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift b/AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift index 1baebc0f..d58063c9 100644 --- a/AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift +++ b/AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift @@ -735,6 +735,7 @@ class LCIMConversationTestCase: RTMBaseTestCase { conv.read() } wait(for: [allReadExp], timeout: timeout) + delegator.reset() } func testMembersChange() { diff --git a/AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift b/AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift index 10dfe350..925a47f2 100644 --- a/AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift +++ b/AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift @@ -1431,7 +1431,7 @@ class LCIMMessageTestCase: RTMBaseTestCase { wait(for: [intervalQueryExp], timeout: timeout) let typeQuery = expectation(description: "type query") - conversation?.queryMediaMessagesFromServer(with: .text, limit: 10, fromMessageId: nil, fromTimestamp: 0, callback: { msgs, error in + conversation?.queryMediaMessagesFromServer(withType: .text, limit: 10, fromMessageId: nil, fromTimestamp: 0, callback: { msgs, error in XCTAssertNil(error) XCTAssertEqual(msgs?.count, 1) XCTAssertNotNil(msgs?.first?.deliveredTimestamp) @@ -1450,14 +1450,14 @@ extension LCIMMessageTestCase { typealias ConversationSuite = (client: LCIMClient, delegator: LCIMClientDelegator, conversation: LCIMConversation) class CustomMessage: LCIMTypedMessage, LCIMTypedMessageSubclassing { - static func classMediaType() -> MessageMediaType { - return 1 + static func classMediaType() -> LCIMMessageMediaType { + return LCIMMessageMediaType(1) } } class InvalidCustomMessage: LCIMTypedMessage, LCIMTypedMessageSubclassing { - static func classMediaType() -> MessageMediaType { - return -1 + static func classMediaType() -> LCIMMessageMediaType { + return LCIMMessageMediaType(-1) } }