juggleim-rnsdk 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/android/.settings/org.eclipse.buildship.core.prefs +1 -1
  2. package/android/.settings/org.eclipse.jdt.core.prefs +4 -0
  3. package/android/build/.transforms/42b8ab7e96b9440b0e91d2ecba5f579c/transformed/classes/classes_dex/classes.dex +0 -0
  4. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$1.dex +0 -0
  5. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$10.dex +0 -0
  6. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$11.dex +0 -0
  7. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$12.dex +0 -0
  8. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$13.dex +0 -0
  9. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$14.dex +0 -0
  10. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$15.dex +0 -0
  11. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$16.dex +0 -0
  12. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$17.dex +0 -0
  13. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$18.dex +0 -0
  14. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$19.dex +0 -0
  15. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$2.dex +0 -0
  16. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$20.dex +0 -0
  17. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$21.dex +0 -0
  18. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$22.dex +0 -0
  19. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$23.dex +0 -0
  20. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$3.dex +0 -0
  21. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$4.dex +0 -0
  22. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$5.dex +0 -0
  23. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$6.dex +0 -0
  24. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$7.dex +0 -0
  25. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$8.dex +0 -0
  26. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$9.dex +0 -0
  27. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager.dex +0 -0
  28. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/RNTypeConverter$1.dex +0 -0
  29. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/RNTypeConverter.dex +0 -0
  30. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  31. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  32. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$1.class +0 -0
  33. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$10.class +0 -0
  34. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$11.class +0 -0
  35. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$12.class +0 -0
  36. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$13.class +0 -0
  37. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$14.class +0 -0
  38. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$15.class +0 -0
  39. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$16.class +0 -0
  40. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$17.class +0 -0
  41. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$18.class +0 -0
  42. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$19.class +0 -0
  43. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$2.class +0 -0
  44. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$20.class +0 -0
  45. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$21.class +0 -0
  46. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$22.class +0 -0
  47. package/android/build/{tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$22.class.uniqueId14 → intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$23.class} +0 -0
  48. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$3.class +0 -0
  49. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$4.class +0 -0
  50. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$5.class +0 -0
  51. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$6.class +0 -0
  52. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$7.class +0 -0
  53. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$8.class +0 -0
  54. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$9.class +0 -0
  55. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager.class +0 -0
  56. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/RNTypeConverter$1.class +0 -0
  57. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/RNTypeConverter.class +0 -0
  58. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$1.class +0 -0
  59. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$10.class +0 -0
  60. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$11.class +0 -0
  61. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$12.class +0 -0
  62. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$13.class +0 -0
  63. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$14.class +0 -0
  64. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$15.class +0 -0
  65. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$16.class +0 -0
  66. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$17.class +0 -0
  67. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$18.class +0 -0
  68. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$19.class +0 -0
  69. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$2.class +0 -0
  70. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$20.class +0 -0
  71. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$21.class +0 -0
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$22.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$23.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$3.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$4.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$5.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$6.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$7.class +0 -0
  79. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$8.class +0 -0
  80. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$9.class +0 -0
  81. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager.class +0 -0
  82. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/RNTypeConverter$1.class +0 -0
  83. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/RNTypeConverter.class +0 -0
  84. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  85. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  86. package/android/src/main/java/com/juggleim/JuggleIMManager.java +106 -141
  87. package/android/src/main/java/com/juggleim/RNTypeConverter.java +79 -0
  88. package/ios/JModelFactory.h +53 -0
  89. package/ios/JModelFactory.m +783 -0
  90. package/ios/JuggleIMManager.m +22 -36
  91. package/package.json +1 -1
  92. package/src/index.js +1 -1
  93. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/GenericCustomMessage.dex +0 -0
  94. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/GenericCustomMessage.class +0 -0
  95. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$1.class.uniqueId23 +0 -0
  96. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$10.class.uniqueId0 +0 -0
  97. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$11.class.uniqueId4 +0 -0
  98. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$12.class.uniqueId20 +0 -0
  99. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$13.class.uniqueId16 +0 -0
  100. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$14.class.uniqueId7 +0 -0
  101. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$15.class.uniqueId13 +0 -0
  102. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$16.class.uniqueId1 +0 -0
  103. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$17.class.uniqueId22 +0 -0
  104. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$18.class.uniqueId19 +0 -0
  105. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$19.class.uniqueId17 +0 -0
  106. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$2.class.uniqueId8 +0 -0
  107. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$20.class.uniqueId12 +0 -0
  108. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$21.class.uniqueId3 +0 -0
  109. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$3.class.uniqueId10 +0 -0
  110. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$4.class.uniqueId18 +0 -0
  111. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$5.class.uniqueId21 +0 -0
  112. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$6.class.uniqueId2 +0 -0
  113. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$7.class.uniqueId11 +0 -0
  114. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$8.class.uniqueId9 +0 -0
  115. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$9.class.uniqueId15 +0 -0
  116. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager.class.uniqueId5 +0 -0
  117. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMPackage.class.uniqueId6 +0 -0
  118. package/android/src/main/java/com/juggleim/GenericCustomMessage.java +0 -45
  119. package/ios/GenericCustomMessage.h +0 -24
  120. package/ios/GenericCustomMessage.m +0 -29
  121. /package/android/build/{intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/GenericCustomMessage.class → tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/GenericCustomMessage.class.uniqueId0} +0 -0
@@ -0,0 +1,783 @@
1
+ //
2
+ // JModelFactory.m
3
+ // juggle_im
4
+ //
5
+ // Created by Fei Li on 2025/5/22.
6
+ //
7
+
8
+ #import "JModelFactory.h"
9
+
10
+ @implementation JModelFactory
11
+
12
+ #pragma mark - model2Dic
13
+ + (NSDictionary *)conversationToDic:(JConversation *)conversation {
14
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
15
+ [dic setObject:@(conversation.conversationType) forKey:@"conversationType"];
16
+ [dic setObject:conversation.conversationId forKey:@"conversationId"];
17
+ return [dic copy];
18
+ }
19
+
20
+ + (NSDictionary *)conversationMentionMessageToDic:
21
+ (JConversationMentionMessage *)message {
22
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
23
+ if (message.senderId) {
24
+ [dic setObject:message.senderId forKey:@"senderId"];
25
+ }
26
+ if (message.msgId) {
27
+ [dic setObject:message.msgId forKey:@"msgId"];
28
+ }
29
+ [dic setObject:@(message.msgTime) forKey:@"msgTime"];
30
+ [dic setObject:@(message.type) forKey:@"type"];
31
+ return [dic copy];
32
+ }
33
+
34
+ + (NSDictionary *)conversationMentionInfoToDic:
35
+ (JConversationMentionInfo *)info {
36
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
37
+ NSMutableArray *list = [NSMutableArray array];
38
+ for (JConversationMentionMessage *message in info.mentionMsgList) {
39
+ [list addObject:[self conversationMentionMessageToDic:message]];
40
+ }
41
+ [dic setObject:list forKey:@"mentionMsgList"];
42
+ return [dic copy];
43
+ }
44
+
45
+ + (NSDictionary *)conversationInfoToDic:(JConversationInfo *)conversationInfo {
46
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
47
+ if (!conversationInfo) {
48
+ return dic;
49
+ }
50
+ [dic setObject:[self conversationToDic:conversationInfo.conversation]
51
+ forKey:@"conversation"];
52
+ [self extendDic:dic forConversationInfo:conversationInfo];
53
+ [dic setObject:@(conversationInfo.unreadCount) forKey:@"unreadCount"];
54
+ [dic setObject:@(conversationInfo.hasUnread) forKey:@"hasUnread"];
55
+ [dic setObject:@(conversationInfo.sortTime) forKey:@"sortTime"];
56
+ if (conversationInfo.lastMessage) {
57
+ [dic setObject:[self messageToDic:conversationInfo.lastMessage]
58
+ forKey:@"lastMessage"];
59
+ }
60
+ [dic setObject:@(conversationInfo.isTop) forKey:@"isTop"];
61
+ [dic setObject:@(conversationInfo.topTime) forKey:@"topTime"];
62
+ [dic setObject:@(conversationInfo.mute) forKey:@"mute"];
63
+ if (conversationInfo.draft) {
64
+ [dic setObject:conversationInfo.draft forKey:@"draft"];
65
+ }
66
+ [dic
67
+ setObject:[self conversationMentionInfoToDic:conversationInfo.mentionInfo]
68
+ forKey:@"mentionInfo"];
69
+ return [dic copy];
70
+ }
71
+
72
+ + (NSString *)messageContentToString:(JMessageContent *)content {
73
+ NSData *data;
74
+ if ([content isKindOfClass:[JImageMessage class]]) {
75
+ JImageMessage *image = (JImageMessage *)content;
76
+ NSDictionary *dic = @{
77
+ @"url" : image.url ?: @"",
78
+ @"thumbnail" : image.thumbnailUrl ?: @"",
79
+ @"local" : image.localPath ?: @"",
80
+ @"width" : @(image.width),
81
+ @"height" : @(image.height),
82
+ @"size" : @(image.size),
83
+ @"extra" : image.extra ?: @"",
84
+ @"thumbnailLocalPath" : image.thumbnailLocalPath ?: @""
85
+ };
86
+ data = [NSJSONSerialization dataWithJSONObject:dic
87
+ options:kNilOptions
88
+ error:nil];
89
+ } else if ([content isKindOfClass:[JVoiceMessage class]]) {
90
+ JVoiceMessage *voice = (JVoiceMessage *)content;
91
+ NSDictionary *dic = @{
92
+ @"url" : voice.url ?: @"",
93
+ @"local" : voice.localPath ?: @"",
94
+ @"duration" : @(voice.duration),
95
+ @"extra" : voice.extra ?: @""
96
+ };
97
+ data = [NSJSONSerialization dataWithJSONObject:dic
98
+ options:kNilOptions
99
+ error:nil];
100
+ } else if ([content isKindOfClass:[JVideoMessage class]]) {
101
+ JVideoMessage *video = (JVideoMessage *)content;
102
+ NSDictionary *dic = @{
103
+ @"url" : video.url ?: @"",
104
+ @"local" : video.localPath ?: @"",
105
+ @"poster" : video.snapshotUrl ?: @"",
106
+ @"height" : @(video.height),
107
+ @"width" : @(video.width),
108
+ @"size" : @(video.size),
109
+ @"duration" : @(video.duration),
110
+ @"extra" : video.extra ?: @"",
111
+ @"snapshotLocalPath" : video.snapshotLocalPath ?: @""
112
+ };
113
+ data = [NSJSONSerialization dataWithJSONObject:dic
114
+ options:kNilOptions
115
+ error:nil];
116
+ } else if ([content isKindOfClass:[JFileMessage class]]) {
117
+ JFileMessage *file = (JFileMessage *)content;
118
+ NSDictionary *dic = @{
119
+ @"url" : file.url ?: @"",
120
+ @"local" : file.localPath ?: @"",
121
+ @"name" : file.name ?: @"",
122
+ @"size" : @(file.size),
123
+ @"type" : file.type ?: @"",
124
+ @"extra" : file.extra ?: @""
125
+ };
126
+ data = [NSJSONSerialization dataWithJSONObject:dic
127
+ options:kNilOptions
128
+ error:nil];
129
+ } else {
130
+ data = [content encode];
131
+ }
132
+ if (!data) {
133
+ return nil;
134
+ }
135
+ return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
136
+ }
137
+
138
+ + (NSDictionary *)groupMessageReadInfoToDic:(JGroupMessageReadInfo *)info {
139
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
140
+ [dic setObject:@(info.readCount) forKey:@"readCount"];
141
+ [dic setObject:@(info.memberCount) forKey:@"memberCount"];
142
+ return [dic copy];
143
+ }
144
+
145
+ + (NSDictionary *)groupMessageMemberReadDetailToDic:
146
+ (JGroupMessageMemberReadDetail *)detail {
147
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
148
+ if (!detail) {
149
+ return [dic copy];
150
+ }
151
+ [dic setObject:[self userInfoToDic:detail.userInfo] forKey:@"userInfo"];
152
+ [dic setObject:@(detail.readTime) forKey:@"readTime"];
153
+ return [dic copy];
154
+ }
155
+
156
+ + (NSDictionary *)userInfoToDic:(JUserInfo *)info {
157
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
158
+ if (info.userId) {
159
+ [dic setObject:info.userId forKey:@"userId"];
160
+ }
161
+ if (info.userName) {
162
+ [dic setObject:info.userName forKey:@"userName"];
163
+ }
164
+ if (info.portrait) {
165
+ [dic setObject:info.portrait forKey:@"portrait"];
166
+ }
167
+ if (info.extraDic) {
168
+ [dic setObject:info.extraDic forKey:@"extraMap"];
169
+ }
170
+ [dic setObject:@(info.type) forKey:@"type"];
171
+ return [dic copy];
172
+ }
173
+
174
+ + (NSDictionary *)groupInfoToDic:(JGroupInfo *)info {
175
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
176
+ if (info.groupId) {
177
+ [dic setObject:info.groupId forKey:@"groupId"];
178
+ }
179
+ if (info.groupName) {
180
+ [dic setObject:info.groupName forKey:@"groupName"];
181
+ }
182
+ if (info.portrait) {
183
+ [dic setObject:info.portrait forKey:@"portrait"];
184
+ }
185
+ if (info.extraDic) {
186
+ [dic setObject:info.extraDic forKey:@"extraMap"];
187
+ }
188
+ return [dic copy];
189
+ }
190
+
191
+ + (NSDictionary *)groupMemberToDic:(JGroupMember *)member {
192
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
193
+ if (member.groupId) {
194
+ [dic setObject:member.groupId forKey:@"groupId"];
195
+ }
196
+ if (member.userId) {
197
+ [dic setObject:member.userId forKey:@"userId"];
198
+ }
199
+ if (member.groupDisplayName) {
200
+ [dic setObject:member.groupDisplayName forKey:@"groupDisplayName"];
201
+ }
202
+ if (member.extraDic) {
203
+ [dic setObject:member.extraDic forKey:@"extraMap"];
204
+ }
205
+ return [dic copy];
206
+ }
207
+
208
+ + (NSDictionary *)messageMentionInfoToDic:(JMessageMentionInfo *)info {
209
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
210
+ [dic setObject:@(info.type) forKey:@"type"];
211
+ if (info.targetUsers) {
212
+ NSMutableArray *a = [NSMutableArray array];
213
+ for (JUserInfo *userInfo in info.targetUsers) {
214
+ NSDictionary *userDic = [self userInfoToDic:userInfo];
215
+ [a addObject:userDic];
216
+ }
217
+ [dic setObject:a forKey:@"targetUsers"];
218
+ }
219
+ return [dic copy];
220
+ }
221
+
222
+ + (NSMutableDictionary *)messageToDic:(JMessage *)message {
223
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
224
+ [dic setObject:[self conversationToDic:message.conversation]
225
+ forKey:@"conversation"];
226
+ if (message.contentType) {
227
+ [dic setObject:message.contentType forKey:@"contentType"];
228
+ }
229
+ [dic setObject:@(message.clientMsgNo) forKey:@"clientMsgNo"];
230
+ if (message.messageId) {
231
+ [dic setObject:message.messageId forKey:@"messageId"];
232
+ }
233
+ [dic setObject:@(message.direction) forKey:@"direction"];
234
+ [dic setObject:@(message.messageState) forKey:@"messageState"];
235
+ [dic setObject:@(message.hasRead) forKey:@"hasRead"];
236
+ [dic setObject:@(message.timestamp) forKey:@"timestamp"];
237
+ if (message.senderUserId) {
238
+ [dic setObject:message.senderUserId forKey:@"senderUserId"];
239
+ [self extendDic:dic forMessage:message];
240
+ }
241
+ NSString *contentString = [self messageContentToString:message.content];
242
+ if (contentString) {
243
+ [dic setObject:contentString forKey:@"content"];
244
+ }
245
+ if (message.groupReadInfo) {
246
+ [dic setObject:[self groupMessageReadInfoToDic:message.groupReadInfo]
247
+ forKey:@"groupReadInfo"];
248
+ }
249
+ if (message.mentionInfo) {
250
+ [dic setObject:[self messageMentionInfoToDic:message.mentionInfo]
251
+ forKey:@"mentionInfo"];
252
+ }
253
+ if (message.referredMsg) {
254
+ [dic setObject:[self messageToDic:message.referredMsg]
255
+ forKey:@"referredMsg"];
256
+ }
257
+ if (message.localAttribute) {
258
+ [dic setObject:message.localAttribute forKey:@"localAttribute"];
259
+ }
260
+ [dic setObject:@(message.isEdit) forKey:@"isEdit"];
261
+ [dic setObject:@(message.destroyTime) forKey:@"destroyTime"];
262
+ [dic setObject:@(message.lifeTimeAfterRead) forKey:@"lifeTimeAfterRead"];
263
+ return dic;
264
+ }
265
+
266
+ + (NSDictionary *)favoriteMessageToDic:(JFavoriteMessage *)message {
267
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
268
+ [dic setObject:@(message.createdTime) forKey:@"createdTime"];
269
+ [dic setObject:[self messageToDic:message.message] forKey:@"message"];
270
+ return [dic copy];
271
+ }
272
+
273
+ + (NSDictionary *)messageReactionItemToDic:(JMessageReactionItem *)item {
274
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
275
+ [dic setObject:item.reactionId forKey:@"reactionId"];
276
+ NSMutableArray *userDicArray = [NSMutableArray array];
277
+ for (JUserInfo *userInfo in item.userInfoList) {
278
+ NSDictionary *userInfoDic = [JModelFactory userInfoToDic:userInfo];
279
+ [userDicArray addObject:userInfoDic];
280
+ }
281
+ [dic setObject:userDicArray forKey:@"userInfoList"];
282
+ return [dic copy];
283
+ }
284
+
285
+ + (NSDictionary *)messageReactionToDic:(JMessageReaction *)reaction {
286
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
287
+ [dic setObject:reaction.messageId forKey:@"messageId"];
288
+ NSMutableArray *itemDicArray = [NSMutableArray array];
289
+ for (JMessageReactionItem *item in reaction.itemList) {
290
+ NSDictionary *itemDic = [self messageReactionItemToDic:item];
291
+ [itemDicArray addObject:itemDic];
292
+ }
293
+ [dic setObject:itemDicArray forKey:@"itemList"];
294
+ return [dic copy];
295
+ }
296
+
297
+ + (NSDictionary *)callMemberToDic:(JCallMember *)callMember {
298
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
299
+ if (callMember.userInfo) {
300
+ [dic setObject:[JModelFactory userInfoToDic:callMember.userInfo]
301
+ forKey:@"userInfo"];
302
+ }
303
+ [dic setObject:@(callMember.callStatus) forKey:@"callStatus"];
304
+ [dic setObject:@(callMember.startTime) forKey:@"startTime"];
305
+ [dic setObject:@(callMember.connectTime) forKey:@"connectTime"];
306
+ [dic setObject:@(callMember.finishTime) forKey:@"finishTime"];
307
+ if (callMember.inviter) {
308
+ [dic setObject:[JModelFactory userInfoToDic:callMember.inviter]
309
+ forKey:@"inviter"];
310
+ }
311
+
312
+ return [dic copy];
313
+ }
314
+
315
+ + (NSDictionary *)callSessionToDic:(id<JCallSession>)callSession {
316
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
317
+ if (callSession.callId) {
318
+ [dic setObject:callSession.callId forKey:@"callId"];
319
+ }
320
+ [dic setObject:@(callSession.isMultiCall) forKey:@"isMultiCall"];
321
+ [dic setObject:@(callSession.mediaType) forKey:@"mediaType"];
322
+ [dic setObject:@(callSession.callStatus) forKey:@"callStatus"];
323
+ [dic setObject:@(callSession.startTime) forKey:@"startTime"];
324
+ [dic setObject:@(callSession.connectTime) forKey:@"connectTime"];
325
+ [dic setObject:@(callSession.finishTime) forKey:@"finishTime"];
326
+ if (callSession.owner) {
327
+ [dic setObject:callSession.owner forKey:@"owner"];
328
+ }
329
+ if (callSession.inviterId) {
330
+ [dic setObject:callSession.inviterId forKey:@"inviterId"];
331
+ }
332
+ if (callSession.extra) {
333
+ [dic setObject:callSession.extra forKey:@"extra"];
334
+ }
335
+ [dic setObject:@(callSession.finishReason) forKey:@"finishReason"];
336
+ NSMutableArray *memberDicArray = [NSMutableArray array];
337
+ for (JCallMember *member in callSession.members) {
338
+ NSDictionary *memberDic = [self callMemberToDic:member];
339
+ [memberDicArray addObject:memberDic];
340
+ }
341
+ [dic setObject:memberDicArray forKey:@"members"];
342
+
343
+ return [dic copy];
344
+ }
345
+
346
+ + (NSDictionary *)callInfoToDic:(JCallInfo *)callInfo {
347
+ NSMutableDictionary *dic = [NSMutableDictionary dictionary];
348
+ if (callInfo.callId) {
349
+ [dic setObject:callInfo.callId forKey:@"callId"];
350
+ }
351
+ [dic setObject:@(callInfo.isMultiCall) forKey:@"isMultiCall"];
352
+ [dic setObject:@(callInfo.mediaType) forKey:@"mediaType"];
353
+ if (callInfo.owner) {
354
+ [dic setObject:[self userInfoToDic:callInfo.owner] forKey:@"owner"];
355
+ }
356
+ if (callInfo.extra) {
357
+ [dic setObject:callInfo.extra forKey:@"extra"];
358
+ }
359
+ NSMutableArray *memberDicArray = [NSMutableArray array];
360
+ for (JCallMember *member in callInfo.members) {
361
+ NSDictionary *memberDic = [self callMemberToDic:member];
362
+ [memberDicArray addObject:memberDic];
363
+ }
364
+ [dic setObject:memberDicArray forKey:@"members"];
365
+
366
+ return [dic copy];
367
+ }
368
+
369
+ + (NSDictionary *)searchConversationResultToDic:
370
+ (JSearchConversationsResult *)result {
371
+ NSMutableDictionary *d = [NSMutableDictionary dictionary];
372
+ [d setObject:[self conversationInfoToDic:result.conversationInfo]
373
+ forKey:@"conversationInfo"];
374
+ [d setObject:@(result.matchedCount) forKey:@"matchedCount"];
375
+
376
+ return [d copy];
377
+ }
378
+
379
+ + (NSDictionary *)momentMediaToDic:(JMomentMedia *)media {
380
+ if (!media)
381
+ return @{};
382
+ return @{
383
+ @"url" : media.url ?: @"",
384
+ @"type" : @(media.type),
385
+ @"snapshot_url" : media.snapshotUrl ?: @"",
386
+ @"height" : @(media.height),
387
+ @"width" : @(media.width),
388
+ @"duration" : @(media.duration)
389
+ };
390
+ }
391
+
392
+ + (NSDictionary *)momentReactionToDic:(JMomentReaction *)reaction {
393
+ if (!reaction)
394
+ return @{};
395
+ NSMutableArray *userDicArray = [NSMutableArray array];
396
+ for (JUserInfo *user in reaction.userArray ?: @[]) {
397
+ [userDicArray addObject:[self userInfoToDic:user]];
398
+ }
399
+ return @{@"key" : reaction.key ?: @"", @"userList" : userDicArray};
400
+ }
401
+
402
+ + (NSDictionary *)momentCommentToDic:(JMomentComment *)comment {
403
+ if (!comment)
404
+ return @{};
405
+ return @{
406
+ @"comment_id" : comment.commentId ?: @"",
407
+ @"moment_id" : comment.momentId ?: @"",
408
+ @"parent_comment_id" : comment.parentCommentId ?: @"",
409
+ @"content" : comment.content ?: @"",
410
+ @"user_info" : [self userInfoToDic:comment.userInfo],
411
+ @"parent_user_info" : [self userInfoToDic:comment.parentUserInfo],
412
+ @"comment_time" : @(comment.createTime)
413
+ };
414
+ }
415
+
416
+ + (NSDictionary *)momentToDic:(JMoment *)moment {
417
+ if (!moment)
418
+ return @{};
419
+ NSMutableDictionary *resultDic = [NSMutableDictionary dictionary];
420
+ NSString *momentId = moment.momentId ?: @"";
421
+ resultDic[@"moment_id"] = momentId;
422
+ NSString *contentText = moment.content ?: @"";
423
+ resultDic[@"content"] = @{@"text" : contentText};
424
+ resultDic[@"moment_time"] = @(moment.createTime);
425
+ if (moment.userInfo && [moment.userInfo isKindOfClass:[JUserInfo class]]) {
426
+ resultDic[@"user_info"] = [self userInfoToDic:moment.userInfo];
427
+ }
428
+ NSArray *mediaArray = moment.mediaArray ?: @[];
429
+ NSMutableArray *mediasDicArray =
430
+ [NSMutableArray arrayWithCapacity:mediaArray.count];
431
+ for (JMomentMedia *media in mediaArray) {
432
+ if (media && [media isKindOfClass:[JMomentMedia class]]) {
433
+ [mediasDicArray addObject:[self momentMediaToDic:media]];
434
+ }
435
+ }
436
+ resultDic[@"medias"] = mediasDicArray;
437
+
438
+ NSArray *reactionArray = moment.reactionArray ?: @[];
439
+ NSMutableArray *reactionsDicArray =
440
+ [NSMutableArray arrayWithCapacity:reactionArray.count];
441
+ for (JMomentReaction *reaction in reactionArray) {
442
+ if (reaction && [reaction isKindOfClass:[JMomentReaction class]]) {
443
+ [reactionsDicArray addObject:[self momentReactionToDic:reaction]];
444
+ }
445
+ }
446
+ resultDic[@"reactions"] = reactionsDicArray;
447
+
448
+ NSArray *commentArray = moment.commentArray ?: @[];
449
+ NSMutableArray *commentsDicArray =
450
+ [NSMutableArray arrayWithCapacity:commentArray.count];
451
+ for (JMomentComment *comment in commentArray) {
452
+ if (comment && [comment isKindOfClass:[JMomentComment class]]) {
453
+ [commentsDicArray addObject:[self momentCommentToDic:comment]];
454
+ }
455
+ }
456
+ resultDic[@"top_comments"] = commentsDicArray;
457
+
458
+ return [resultDic copy];
459
+ }
460
+
461
+ #pragma mark - dic2Model
462
+ + (JConversation *)conversationFromDic:(NSDictionary *)dic {
463
+ JConversation *c = [JConversation new];
464
+ c.conversationType = [dic[@"conversationType"] intValue];
465
+ c.conversationId = dic[@"conversationId"];
466
+ return c;
467
+ }
468
+
469
+ + (JMessage *)messageFromDic:(NSDictionary *)dic {
470
+ JMessage *message = [JMessage new];
471
+ message.conversation = [self conversationFromDic:dic[@"conversation"]];
472
+ message.contentType = dic[@"contentType"];
473
+ message.clientMsgNo = [dic[@"clientMsgNo"] longLongValue];
474
+ message.messageId = dic[@"messageId"];
475
+ message.direction = [dic[@"direction"] intValue];
476
+ message.messageState = [dic[@"messageState"] intValue];
477
+ message.hasRead = [dic[@"hasRead"] boolValue];
478
+ message.timestamp = [dic[@"timestamp"] longLongValue];
479
+ message.senderUserId = dic[@"senderUserId"];
480
+ message.content =
481
+ [JModelFactory messageContentFromString:dic[@"content"]
482
+ type:message.contentType];
483
+ if (dic[@"mentionInfo"]) {
484
+ message.mentionInfo = [self messageMentionInfoFromDic:dic[@"mentionInfo"]];
485
+ }
486
+ if (dic[@"referredMsg"]) {
487
+ message.referredMsg = [self messageFromDic:dic[@"referredMsg"]];
488
+ }
489
+ message.localAttribute = dic[@"localAttribute"];
490
+ message.isEdit = [dic[@"isEdit"] boolValue];
491
+ message.destroyTime = [dic[@"destroyTime"] longLongValue];
492
+ message.lifeTimeAfterRead = [dic[@"lifeTimeAfterRead"] longLongValue];
493
+ return message;
494
+ }
495
+
496
+ + (JMessageOptions *)sendMessageOptionFromDic:(NSDictionary *)dic {
497
+ if (!dic) {
498
+ return nil;
499
+ }
500
+ JMessageOptions *option = [JMessageOptions new];
501
+ if (dic[@"mentionInfo"]) {
502
+ option.mentionInfo = [self messageMentionInfoFromDic:dic[@"mentionInfo"]];
503
+ }
504
+ option.referredMsgId = dic[@"referredMsgId"];
505
+ if (dic[@"pushData"]) {
506
+ option.pushData = [self pushDataFromDic:dic[@"pushData"]];
507
+ }
508
+ option.lifeTime = [dic[@"lifeTime"] longLongValue];
509
+ option.lifeTimeAfterRead = [dic[@"lifeTimeAfterRead"] longLongValue];
510
+ return option;
511
+ }
512
+
513
+ + (JGetMessageOptions *)getMessageOptionFromDic:(NSDictionary *)dic {
514
+ if (!dic) {
515
+ return nil;
516
+ }
517
+ JGetMessageOptions *option = [JGetMessageOptions new];
518
+ option.startTime = [dic[@"startTime"] longLongValue];
519
+ option.count = [dic[@"count"] intValue];
520
+ if (dic[@"contentTypes"]) {
521
+ NSMutableArray *types = [NSMutableArray array];
522
+ for (NSString *type in dic[@"contentTypes"]) {
523
+ [types addObject:type];
524
+ }
525
+ option.contentTypes = types;
526
+ }
527
+ return option;
528
+ }
529
+
530
+ + (JMomentMedia *)momentMediaFromDic:(NSDictionary *)dictionary {
531
+ if (!dictionary) {
532
+ return nil;
533
+ }
534
+ JMomentMedia *media = [[JMomentMedia alloc] init];
535
+
536
+ media.url = dictionary[@"url"];
537
+ media.snapshotUrl = dictionary[@"snapshot_url"];
538
+ media.type = [dictionary[@"type"] intValue];
539
+ media.height = [dictionary[@"height"] intValue];
540
+ media.width = [dictionary[@"width"] intValue];
541
+ media.duration = [dictionary[@"duration"] intValue];
542
+
543
+ return media;
544
+ }
545
+
546
+ + (JGetMomentOption *)getMomentOptionFromDic:(NSDictionary *)dic {
547
+ if (!dic || ![dic isKindOfClass:[NSDictionary class]]) {
548
+ JGetMomentOption *defaultOption = [[JGetMomentOption alloc] init];
549
+ defaultOption.startTime = 0;
550
+ defaultOption.count = 10;
551
+ defaultOption.direction = 0;
552
+ return defaultOption;
553
+ }
554
+
555
+ JGetMomentOption *option = [[JGetMomentOption alloc] init];
556
+ id startTimeValue = dic[@"startTime"];
557
+ if ([startTimeValue isKindOfClass:[NSNumber class]]) {
558
+ option.startTime = [startTimeValue longLongValue];
559
+ } else {
560
+ option.startTime = 0;
561
+ }
562
+
563
+ id countValue = dic[@"count"];
564
+ if ([countValue isKindOfClass:[NSNumber class]]) {
565
+ int count = [countValue intValue];
566
+ option.count = count;
567
+ } else {
568
+ option.count = 10;
569
+ }
570
+
571
+ id directionValue = dic[@"direction"];
572
+ if ([directionValue isKindOfClass:[NSNumber class]]) {
573
+ NSInteger direction = [directionValue integerValue];
574
+ option.direction = (JPullDirection)direction;
575
+ } else {
576
+ option.direction = 0;
577
+ }
578
+
579
+ return option;
580
+ }
581
+
582
+ + (JGetMomentCommentOption *)getMomentCommentOptionFromDic:(NSDictionary *)dic {
583
+ if (!dic || ![dic isKindOfClass:[NSDictionary class]]) {
584
+ JGetMomentCommentOption *defaultOption =
585
+ [[JGetMomentCommentOption alloc] init];
586
+ defaultOption.momentId = @"";
587
+ defaultOption.startTime = 0;
588
+ defaultOption.count = 10;
589
+ defaultOption.direction = 0;
590
+ return defaultOption;
591
+ }
592
+
593
+ JGetMomentCommentOption *option = [[JGetMomentCommentOption alloc] init];
594
+ option.momentId = dic[@"momentId"];
595
+
596
+ id startTimeValue = dic[@"startTime"];
597
+ if ([startTimeValue isKindOfClass:[NSNumber class]]) {
598
+ option.startTime = [startTimeValue longLongValue];
599
+ } else {
600
+ option.startTime = 0;
601
+ }
602
+
603
+ id countValue = dic[@"count"];
604
+ if ([countValue isKindOfClass:[NSNumber class]]) {
605
+ option.count = [countValue intValue];
606
+ } else {
607
+ option.count = 10;
608
+ }
609
+
610
+ id directionValue = dic[@"direction"];
611
+ if ([directionValue isKindOfClass:[NSNumber class]]) {
612
+ NSInteger direction = [directionValue integerValue];
613
+ option.direction = (JPullDirection)direction;
614
+ } else {
615
+ option.direction = 0;
616
+ }
617
+
618
+ return option;
619
+ }
620
+
621
+ + (JMessageMentionInfo *)messageMentionInfoFromDic:(NSDictionary *)dic {
622
+ JMessageMentionInfo *info = [JMessageMentionInfo new];
623
+ info.type = [dic[@"type"] intValue];
624
+ NSArray *targetUsersDic = dic[@"targetUsers"];
625
+ if (targetUsersDic) {
626
+ NSMutableArray *userList = [NSMutableArray array];
627
+ for (NSDictionary *userDic in targetUsersDic) {
628
+ JUserInfo *userInfo = [self userInfoFromDic:userDic];
629
+ [userList addObject:userInfo];
630
+ }
631
+ info.targetUsers = userList;
632
+ }
633
+ return info;
634
+ }
635
+
636
+ + (JUserInfo *)userInfoFromDic:(NSDictionary *)dic {
637
+ JUserInfo *info = [JUserInfo new];
638
+ info.userId = dic[@"userId"];
639
+ info.userName = dic[@"userName"];
640
+ info.portrait = dic[@"portrait"];
641
+ info.extraDic = dic[@"extraMap"];
642
+ info.type = [dic[@"type"] intValue];
643
+ return info;
644
+ }
645
+
646
+ + (JPushData *)pushDataFromDic:(NSDictionary *)dic {
647
+ JPushData *data = [JPushData new];
648
+ data.content = dic[@"content"];
649
+ data.extra = dic[@"extra"];
650
+ return data;
651
+ }
652
+
653
+ + (JMessageContent *)messageContentFromString:(NSString *)string
654
+ type:(nonnull NSString *)contentType {
655
+ NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
656
+ JMessageContent *content;
657
+ if ([contentType isEqualToString:@"jg:text"]) {
658
+ content = [self textMessageFromData:data];
659
+ } else if ([contentType isEqualToString:@"jg:file"]) {
660
+ content = [self fileMessageFromData:data];
661
+ } else if ([contentType isEqualToString:@"jg:img"]) {
662
+ content = [self imageMessageFromData:data];
663
+ } else if ([contentType isEqualToString:@"jg:recallinfo"]) {
664
+ content = [self recallInfoMessageFromData:data];
665
+ } else if ([contentType isEqualToString:@"jg:video"]) {
666
+ content = [self videoMessageFromData:data];
667
+ } else if ([contentType isEqualToString:@"jg:voice"]) {
668
+ content = [self voiceMessageFromData:data];
669
+ } else if ([contentType isEqualToString:@"jg:merge"]) {
670
+ content = [self mergeMessageFromData:data];
671
+ } else {
672
+ content = [self unknownMessageFromString:string type:contentType];
673
+ }
674
+ return content;
675
+ }
676
+
677
+ + (JMediaMessageContent *)mediaMessageContentFromString:(NSString *)string
678
+ type:(nonnull NSString *)
679
+ contentType {
680
+ NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
681
+ JMediaMessageContent *content;
682
+ if ([contentType isEqualToString:@"jg:img"]) {
683
+ content = [JModelFactory imageMessageFromData:data];
684
+ } else if ([contentType isEqualToString:@"jg:video"]) {
685
+ content = [self videoMessageFromData:data];
686
+ } else if ([contentType isEqualToString:@"jg:voice"]) {
687
+ content = [self voiceMessageFromData:data];
688
+ } else if ([contentType isEqualToString:@"jg:file"]) {
689
+ content = [self fileMessageFromData:data];
690
+ }
691
+ return content;
692
+ }
693
+
694
+ + (JTextMessage *)textMessageFromData:(NSData *)data {
695
+ JTextMessage *text = [JTextMessage new];
696
+ [text decode:data];
697
+ return text;
698
+ }
699
+
700
+ + (JImageMessage *)imageMessageFromData:(NSData *)data {
701
+ JImageMessage *image = [JImageMessage new];
702
+ [image decode:data];
703
+ return image;
704
+ }
705
+
706
+ + (JFileMessage *)fileMessageFromData:(NSData *)data {
707
+ JFileMessage *file = [JFileMessage new];
708
+ [file decode:data];
709
+ return file;
710
+ }
711
+
712
+ + (JRecallInfoMessage *)recallInfoMessageFromData:(NSData *)data {
713
+ JRecallInfoMessage *recallInfo = [JRecallInfoMessage new];
714
+ [recallInfo decode:data];
715
+ return recallInfo;
716
+ }
717
+
718
+ + (JVideoMessage *)videoMessageFromData:(NSData *)data {
719
+ JVideoMessage *video = [JVideoMessage new];
720
+ [video decode:data];
721
+ return video;
722
+ }
723
+
724
+ + (JVoiceMessage *)voiceMessageFromData:(NSData *)data {
725
+ JVoiceMessage *voice = [JVoiceMessage new];
726
+ [voice decode:data];
727
+ return voice;
728
+ }
729
+
730
+ + (JMergeMessage *)mergeMessageFromData:(NSData *)data {
731
+ JMergeMessage *merge = [JMergeMessage new];
732
+ [merge decode:data];
733
+ return merge;
734
+ }
735
+
736
+ + (JUnknownMessage *)unknownMessageFromString:(NSString *)string
737
+ type:(NSString *)contentType {
738
+ JUnknownMessage *unknown = [JUnknownMessage new];
739
+ unknown.content = string;
740
+ unknown.messageType = contentType;
741
+ return unknown;
742
+ }
743
+
744
+ #pragma mark - extension
745
+ + (void)extendDic:(NSMutableDictionary *)dic
746
+ forConversationInfo:(JConversationInfo *)info {
747
+ if (info.conversation.conversationType == JConversationTypePrivate) {
748
+ JUserInfo *userInfo = [JIM.shared.userInfoManager
749
+ getUserInfo:info.conversation.conversationId];
750
+ if (userInfo.userName.length > 0) {
751
+ [dic setObject:userInfo.userName forKey:@"name"];
752
+ }
753
+ if (userInfo.portrait.length > 0) {
754
+ [dic setObject:userInfo.portrait forKey:@"portrait"];
755
+ }
756
+ if (userInfo.extraDic.count > 0) {
757
+ [dic setObject:userInfo.extraDic forKey:@"extra"];
758
+ }
759
+ } else if (info.conversation.conversationType == JConversationTypeGroup) {
760
+ JGroupInfo *groupInfo = [JIM.shared.userInfoManager
761
+ getGroupInfo:info.conversation.conversationId];
762
+ if (groupInfo.groupName.length > 0) {
763
+ [dic setObject:groupInfo.groupName forKey:@"name"];
764
+ }
765
+ if (groupInfo.portrait.length > 0) {
766
+ [dic setObject:groupInfo.portrait forKey:@"portrait"];
767
+ }
768
+ if (groupInfo.extraDic.count > 0) {
769
+ [dic setObject:groupInfo.extraDic forKey:@"extra"];
770
+ }
771
+ }
772
+ }
773
+
774
+ + (void)extendDic:(NSMutableDictionary *)dic forMessage:(JMessage *)message {
775
+ JUserInfo *userInfo =
776
+ [JIM.shared.userInfoManager getUserInfo:message.senderUserId];
777
+ if (userInfo) {
778
+ NSDictionary *userInfoDic = [JModelFactory userInfoToDic:userInfo];
779
+ [dic setObject:userInfoDic forKey:@"sender"];
780
+ }
781
+ }
782
+
783
+ @end