juggleim-rnsdk 0.4.4 → 1.0.1

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 (67) hide show
  1. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$10.class +0 -0
  2. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$11.class +0 -0
  3. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$12.class +0 -0
  4. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$13.class +0 -0
  5. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$14.class +0 -0
  6. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$15.class +0 -0
  7. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$16.class +0 -0
  8. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$17.class +0 -0
  9. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$18.class +0 -0
  10. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$19.class +0 -0
  11. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$20.class +0 -0
  12. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$21.class +0 -0
  13. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$22.class +0 -0
  14. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$23.class +0 -0
  15. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$24.class +0 -0
  16. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$25.class +0 -0
  17. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$26.class +0 -0
  18. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$27.class +0 -0
  19. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$28.class +0 -0
  20. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$29.class +0 -0
  21. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$30.class +0 -0
  22. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$31.class +0 -0
  23. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$32.class +0 -0
  24. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$7.class +0 -0
  25. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$8.class +0 -0
  26. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$9.class +0 -0
  27. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager.class +0 -0
  28. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$1.class.uniqueId29 +0 -0
  29. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$10.class.uniqueId21 +0 -0
  30. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$11.class.uniqueId5 +0 -0
  31. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$12.class.uniqueId15 +0 -0
  32. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$13.class.uniqueId12 +0 -0
  33. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$14.class.uniqueId24 +0 -0
  34. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$15.class.uniqueId26 +0 -0
  35. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$16.class.uniqueId10 +0 -0
  36. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$17.class.uniqueId33 +0 -0
  37. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$18.class.uniqueId0 +0 -0
  38. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$19.class.uniqueId23 +0 -0
  39. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$2.class.uniqueId8 +0 -0
  40. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$20.class.uniqueId20 +0 -0
  41. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$21.class.uniqueId3 +0 -0
  42. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$22.class.uniqueId32 +0 -0
  43. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$23.class.uniqueId11 +0 -0
  44. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$24.class.uniqueId27 +0 -0
  45. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$25.class.uniqueId25 +0 -0
  46. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$26.class.uniqueId13 +0 -0
  47. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$27.class.uniqueId14 +0 -0
  48. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$28.class.uniqueId4 +0 -0
  49. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$29.class.uniqueId19 +0 -0
  50. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$3.class.uniqueId16 +0 -0
  51. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$30.class.uniqueId22 +0 -0
  52. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$31.class.uniqueId2 +0 -0
  53. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$32.class.uniqueId31 +0 -0
  54. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$4.class.uniqueId30 +0 -0
  55. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$5.class.uniqueId9 +0 -0
  56. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$6.class.uniqueId28 +0 -0
  57. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$7.class.uniqueId7 +0 -0
  58. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$8.class.uniqueId17 +0 -0
  59. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$9.class.uniqueId1 +0 -0
  60. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager.class.uniqueId18 +0 -0
  61. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  62. package/android/src/main/java/com/juggleim/JuggleIMManager.java +90 -0
  63. package/ios/JModelFactory.m +2 -2
  64. package/ios/JuggleIMManager.m +37 -0
  65. package/package.json +2 -1
  66. package/src/types.d.ts +25 -0
  67. package/src/types.js +15 -0
@@ -585,6 +585,17 @@ public class JuggleIMManager extends ReactContextBaseJavaModule {
585
585
  map.putString("localPath", img.getLocalPath());
586
586
  map.putString("thumbnailLocalPath", img.getThumbnailLocalPath());
587
587
  map.putString("thumbnailUrl", img.getThumbnailUrl());
588
+ } else if (content instanceof VideoMessage) {
589
+ VideoMessage video = (VideoMessage) content;
590
+ map.putString("localPath", video.getLocalPath());
591
+ map.putString("url", video.getUrl());
592
+ map.putString("snapshotLocalPath", video.getSnapshotLocalPath());
593
+ map.putString("snapshotUrl", video.getSnapshotUrl());
594
+ map.putInt("width", video.getWidth());
595
+ map.putInt("height", video.getHeight());
596
+ map.putDouble("size", video.getSize());
597
+ map.putInt("duration", video.getDuration());
598
+ map.putString("extra", video.getExtra());
588
599
  } else if (content instanceof StreamTextMessage) {
589
600
  StreamTextMessage streamText = (StreamTextMessage) content;
590
601
  map.putBoolean("isFinished", streamText.isFinished());
@@ -592,11 +603,57 @@ public class JuggleIMManager extends ReactContextBaseJavaModule {
592
603
  return map;
593
604
  }
594
605
 
606
+ /**
607
+ * 读取字符串字段,不存在或为空时返回空字符串。
608
+ *
609
+ * @param map 原始消息内容
610
+ * @param key 字段名
611
+ * @return 字符串字段值
612
+ */
613
+ private String getOptionalString(ReadableMap map, String key) {
614
+ if (map.hasKey(key) && !map.isNull(key)) {
615
+ return map.getString(key);
616
+ }
617
+ return "";
618
+ }
619
+
620
+ /**
621
+ * 读取整数字段,不存在或为空时返回 0。
622
+ *
623
+ * @param map 原始消息内容
624
+ * @param key 字段名
625
+ * @return 整数字段值
626
+ */
627
+ private int getOptionalInt(ReadableMap map, String key) {
628
+ if (map.hasKey(key) && !map.isNull(key)) {
629
+ return map.getInt(key);
630
+ }
631
+ return 0;
632
+ }
633
+
634
+ /**
635
+ * 读取文件路径并兼容 content:// 和 file://。
636
+ *
637
+ * @param map 原始消息内容
638
+ * @param key 字段名
639
+ * @return 原生 SDK 可读取的本地文件路径
640
+ */
641
+ private String getOptionalFilePath(ReadableMap map, String key) {
642
+ String path = getOptionalString(map, key);
643
+ if (path.isEmpty()) {
644
+ return "";
645
+ }
646
+ return FileUtils.convertContentUriToFile(getReactApplicationContext(), path);
647
+ }
648
+
595
649
  private MessageContent convertMapToMessageContent(ReadableMap map) {
596
650
  String contentType = map.getString("contentType");
597
651
  switch (contentType) {
598
652
  case "jg:text":
599
653
  TextMessage text = new TextMessage(map.getString("content"));
654
+ if (map.hasKey("extra")) {
655
+ text.setExtra(map.getString("extra"));
656
+ }
600
657
  return text;
601
658
  case "jg:img":
602
659
  ImageMessage img = new ImageMessage();
@@ -606,6 +663,9 @@ public class JuggleIMManager extends ReactContextBaseJavaModule {
606
663
  img.setThumbnailUrl(map.getString("thumbnailUrl"));
607
664
  img.setWidth(map.getInt("width"));
608
665
  img.setHeight(map.getInt("height"));
666
+ if (map.hasKey("extra")) {
667
+ img.setExtra(map.getString("extra"));
668
+ }
609
669
  return img;
610
670
  case "jg:file":
611
671
  FileMessage file = new FileMessage();
@@ -613,13 +673,43 @@ public class JuggleIMManager extends ReactContextBaseJavaModule {
613
673
  file.setType(map.getString("type"));
614
674
  file.setName(map.getString("name"));
615
675
  file.setSize(map.getInt("size"));
676
+ if (map.hasKey("extra")) {
677
+ file.setExtra(map.getString("extra"));
678
+ }
616
679
  return file;
617
680
  case "jg:voice":
618
681
  VoiceMessage voice = new VoiceMessage();
619
682
  voice.setUrl(map.getString("url"));
620
683
  voice.setLocalPath(map.getString("localPath"));
621
684
  voice.setDuration(map.getInt("duration"));
685
+ if (map.hasKey("extra")) {
686
+ voice.setExtra(map.getString("extra"));
687
+ }
622
688
  return voice;
689
+ case "jg:video":
690
+ VideoMessage video = new VideoMessage();
691
+ String localPath = getOptionalFilePath(map, "localPath");
692
+ if (localPath.isEmpty()) {
693
+ localPath = getOptionalFilePath(map, "local");
694
+ }
695
+ video.setLocalPath(localPath);
696
+ video.setUrl(getOptionalString(map, "url"));
697
+ String snapshotUrl = getOptionalString(map, "snapshotUrl");
698
+ if (snapshotUrl.isEmpty()) {
699
+ snapshotUrl = getOptionalString(map, "poster");
700
+ }
701
+ video.setSnapshotUrl(snapshotUrl);
702
+ video.setSnapshotLocalPath(getOptionalFilePath(map, "snapshotLocalPath"));
703
+ video.setWidth(getOptionalInt(map, "width"));
704
+ video.setHeight(getOptionalInt(map, "height"));
705
+ if (map.hasKey("size") && !map.isNull("size")) {
706
+ video.setSize((long) map.getDouble("size"));
707
+ }
708
+ video.setDuration(getOptionalInt(map, "duration"));
709
+ if (map.hasKey("extra")) {
710
+ video.setExtra(map.getString("extra"));
711
+ }
712
+ return video;
623
713
  case "jg:streamtext":
624
714
  StreamTextMessage streamText = new StreamTextMessage();
625
715
  if (map.hasKey("content")) {
@@ -101,8 +101,8 @@
101
101
  JVideoMessage *video = (JVideoMessage *)content;
102
102
  NSDictionary *dic = @{
103
103
  @"url" : video.url ?: @"",
104
- @"local" : video.localPath ?: @"",
105
- @"poster" : video.snapshotUrl ?: @"",
104
+ @"localPath" : video.localPath ?: @"",
105
+ @"snapshotUrl" : video.snapshotUrl ?: @"",
106
106
  @"height" : @(video.height),
107
107
  @"width" : @(video.width),
108
108
  @"size" : @(video.size),
@@ -511,6 +511,17 @@ RCT_EXPORT_METHOD(addConversationDelegate) {
511
511
  dict[@"localPath"] = voiceMsg.localPath ?: @"";
512
512
  dict[@"duration"] = @(voiceMsg.duration);
513
513
  dict[@"extra"] = voiceMsg.extra ?: @"";
514
+ } else if ([content isKindOfClass:[JVideoMessage class]]) {
515
+ JVideoMessage *videoMsg = (JVideoMessage *)content;
516
+ dict[@"url"] = videoMsg.url ?: @"";
517
+ dict[@"localPath"] = videoMsg.localPath ?: @"";
518
+ dict[@"snapshotUrl"] = videoMsg.snapshotUrl ?: @"";
519
+ dict[@"snapshotLocalPath"] = videoMsg.snapshotLocalPath ?: @"";
520
+ dict[@"width"] = @(videoMsg.width);
521
+ dict[@"height"] = @(videoMsg.height);
522
+ dict[@"size"] = @(videoMsg.size);
523
+ dict[@"duration"] = @(videoMsg.duration);
524
+ dict[@"extra"] = videoMsg.extra ?: @"";
514
525
  } else if ([content isKindOfClass:[JStreamTextMessage class]]) {
515
526
  JStreamTextMessage *streamMsg = (JStreamTextMessage *)content;
516
527
  dict[@"content"] = streamMsg.content ?: @"";
@@ -1650,6 +1661,9 @@ RCT_EXPORT_METHOD(removeMessageReaction : (
1650
1661
  if ([contentType isEqualToString:@"jg:text"]) {
1651
1662
  JTextMessage *text =
1652
1663
  [[JTextMessage alloc] initWithContent:messageDict[@"content"] ?: @""];
1664
+ if (messageDict[@"extra"]) {
1665
+ text.extra = messageDict[@"extra"];
1666
+ }
1653
1667
  return text;
1654
1668
  } else if ([contentType isEqualToString:@"jg:img"]) {
1655
1669
  JImageMessage *img = [[JImageMessage alloc] init];
@@ -1659,6 +1673,9 @@ RCT_EXPORT_METHOD(removeMessageReaction : (
1659
1673
  img.thumbnailUrl = messageDict[@"thumbnailUrl"];
1660
1674
  img.width = [messageDict[@"width"] integerValue];
1661
1675
  img.height = [messageDict[@"height"] integerValue];
1676
+ if (messageDict[@"extra"]) {
1677
+ img.extra = messageDict[@"extra"];
1678
+ }
1662
1679
  return img;
1663
1680
  } else if ([contentType isEqualToString:@"jg:file"]) {
1664
1681
  JFileMessage *file = [[JFileMessage alloc] init];
@@ -1666,13 +1683,33 @@ RCT_EXPORT_METHOD(removeMessageReaction : (
1666
1683
  file.type = messageDict[@"type"];
1667
1684
  file.name = messageDict[@"name"];
1668
1685
  file.size = [messageDict[@"size"] longLongValue];
1686
+ if (messageDict[@"extra"]) {
1687
+ file.extra = messageDict[@"extra"];
1688
+ }
1669
1689
  return file;
1670
1690
  } else if ([contentType isEqualToString:@"jg:voice"]) {
1671
1691
  JVoiceMessage *voice = [[JVoiceMessage alloc] init];
1672
1692
  voice.url = messageDict[@"url"];
1673
1693
  voice.localPath = messageDict[@"localPath"];
1674
1694
  voice.duration = [messageDict[@"duration"] integerValue];
1695
+ if (messageDict[@"extra"]) {
1696
+ voice.extra = messageDict[@"extra"];
1697
+ }
1675
1698
  return voice;
1699
+ } else if ([contentType isEqualToString:@"jg:video"]) {
1700
+ JVideoMessage *video = [[JVideoMessage alloc] init];
1701
+ video.url = messageDict[@"url"];
1702
+ video.localPath = messageDict[@"localPath"] ?: messageDict[@"local"];
1703
+ video.snapshotUrl = messageDict[@"snapshotUrl"] ?: messageDict[@"poster"];
1704
+ video.snapshotLocalPath = messageDict[@"snapshotLocalPath"];
1705
+ video.width = [messageDict[@"width"] integerValue];
1706
+ video.height = [messageDict[@"height"] integerValue];
1707
+ video.size = [messageDict[@"size"] longLongValue];
1708
+ video.duration = [messageDict[@"duration"] integerValue];
1709
+ if (messageDict[@"extra"]) {
1710
+ video.extra = messageDict[@"extra"];
1711
+ }
1712
+ return video;
1676
1713
  } else if ([contentType isEqualToString:@"jg:streamtext"]) {
1677
1714
  JStreamTextMessage *streamText = [[JStreamTextMessage alloc] init];
1678
1715
  streamText.content = messageDict[@"content"] ?: @"";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juggleim-rnsdk",
3
- "version": "0.4.4",
3
+ "version": "1.0.1",
4
4
  "description": "React Native wrapper for Juggle IM SDK",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -19,6 +19,7 @@
19
19
  ],
20
20
  "scripts": {
21
21
  "test": "echo \"Error: no test specified\" && exit 1",
22
+ "test:video-media-bridge": "node scripts/check-video-media-bridge.js",
22
23
  "app": "cd app && npm start",
23
24
  "prepare": "npm run build",
24
25
  "build": "echo \"Build completed\""
package/src/types.d.ts CHANGED
@@ -198,6 +198,31 @@ export class VoiceMessageContent extends MessageContent {
198
198
  contentType: string;
199
199
  }
200
200
 
201
+ /**
202
+ * 视频消息内容
203
+ * @property {string} localPath - 视频本地路径:支持 /、file://、content://
204
+ * @property {string} [url] - 视频远程URL
205
+ * @property {string} [snapshotUrl] - 视频封面远程URL
206
+ * @property {string} [snapshotLocalPath] - 视频封面本地路径
207
+ * @property {number} width - 视频宽度
208
+ * @property {number} height - 视频高度
209
+ * @property {number} size - 视频文件大小,单位字节
210
+ * @property {number} duration - 视频时长,单位秒
211
+ */
212
+ export class VideoMessageContent extends MessageContent {
213
+ localPath: string;
214
+ url?: string;
215
+ snapshotUrl?: string;
216
+ snapshotLocalPath?: string;
217
+ width: number;
218
+ height: number;
219
+ size: number;
220
+ duration: number;
221
+ extra?: string;
222
+
223
+ contentType: string;
224
+ }
225
+
201
226
  /**
202
227
  * 通话结束通知消息内容: jg:callfinishntf
203
228
  * @property {number} reason - 结束原因
package/src/types.js CHANGED
@@ -133,6 +133,21 @@ export class VoiceMessageContent extends MessageContent {
133
133
  }
134
134
  }
135
135
 
136
+ /**
137
+ * 视频消息内容
138
+ */
139
+ export class VideoMessageContent extends MessageContent {
140
+ constructor(localPath, width, height, duration, size = 0) {
141
+ super();
142
+ this.contentType = "jg:video";
143
+ this.localPath = localPath;
144
+ this.width = width;
145
+ this.height = height;
146
+ this.duration = duration;
147
+ this.size = size;
148
+ }
149
+ }
150
+
136
151
  /**
137
152
  * 流式文本消息内容
138
153
  */