Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: message media type #683

Merged
merged 3 commits into from
Dec 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AVOS/LeanCloudObjcTests/LCIMConversationTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,7 @@ class LCIMConversationTestCase: RTMBaseTestCase {
conv.read()
}
wait(for: [allReadExp], timeout: timeout)
delegator.reset()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

跑全量测试,这里出现一个「多次调用 exp」的异常,所以加了一个 reset

}

func testMembersChange() {
Expand Down
10 changes: 5 additions & 5 deletions AVOS/LeanCloudObjcTests/LCIMMessageTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
}
}

Expand Down
98 changes: 44 additions & 54 deletions AVOS/Sources/Realtime/IM/Conversation/LCIMConversation.m
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

改了 LCIMMessageMediaType 后,不知道为什么 switch 识别不了了,遂改成 if-else 模式

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) {
Expand Down
14 changes: 12 additions & 2 deletions AVOS/Sources/Realtime/IM/Message/LCIMMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
9 changes: 9 additions & 0 deletions AVOS/Sources/Realtime/IM/Message/LCIMMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion AVOS/Sources/Realtime/IM/TypedMessages/LCIMAudioMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeAudio;
return LCIMMessageMediaTypeAudio;
}

- (double)size {
Expand Down
2 changes: 1 addition & 1 deletion AVOS/Sources/Realtime/IM/TypedMessages/LCIMFileMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeFile;
return LCIMMessageMediaTypeFile;
}

- (double)size {
Expand Down
2 changes: 1 addition & 1 deletion AVOS/Sources/Realtime/IM/TypedMessages/LCIMImageMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeImage;
return LCIMMessageMediaTypeImage;
}

- (double)width {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeLocation;
return LCIMMessageMediaTypeLocation;
}

+ (instancetype)messageWithText:(NSString *)text
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeRecalled;
return LCIMMessageMediaTypeRecalled;
}

@end
2 changes: 1 addition & 1 deletion AVOS/Sources/Realtime/IM/TypedMessages/LCIMTextMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeText;
return LCIMMessageMediaTypeText;
}

+ (instancetype)messageWithText:(NSString *)text
Expand Down
5 changes: 1 addition & 4 deletions AVOS/Sources/Realtime/IM/TypedMessages/LCIMTypedMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
@class LCFile;
@class LCGeoPoint;


typedef int32_t MessageMediaType;

NS_ASSUME_NONNULL_BEGIN

@protocol LCIMTypedMessageSubclassing <NSObject>
Expand All @@ -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

Expand Down
2 changes: 1 addition & 1 deletion AVOS/Sources/Realtime/IM/TypedMessages/LCIMVideoMessage.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ + (void)load

+ (LCIMMessageMediaType)classMediaType
{
return kLCIMMessageMediaTypeVideo;
return LCIMMessageMediaTypeVideo;
}

- (double)size {
Expand Down
1 change: 1 addition & 0 deletions main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down