Skip to content

Commit c1ccd80

Browse files
authored
Merge pull request #46 from jpush/dev
Dev
2 parents 21cd078 + 186bbb4 commit c1ccd80

File tree

16 files changed

+239
-136
lines changed

16 files changed

+239
-136
lines changed

JMessageRN.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Pod::Spec.new do |s|
1212

1313
s.ios.deployment_target = '7.0'
1414

15-
s.source = { :git => "https://github.com/jpush/jmessage-react-native", :tag => "#{s.version}" }
15+
s.source = { :git => "https://github.com/jpush/jmessage-react-native.git", :tag => "#{s.version}" }
1616
s.source_files = 'ios/RCTJMessageModule/*.{h,m}'
1717
s.preserve_paths = "*.js"
1818
s.frameworks = 'UIKit','CFNetwork','CoreFoundation','CoreTelephony','SystemConfiguration','CoreGraphics','Foundation','Security','CoreLocation','CoreAudio','AudioToolbox','AVFoundation'

android/src/io/jchat/android/JMessageModule.java

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -303,27 +303,37 @@ public void createSendMessage(ReadableMap map, Callback callback) {
303303
MessageContent content;
304304
Conversation conversation = mJMessageUtils.getConversation(map);
305305
String type = map.getString(Constant.MESSAGE_TYPE);
306-
if (type.equals(Constant.TEXT)) {
307-
content = new TextContent(map.getString(Constant.TEXT));
308-
} else if (type.equals(Constant.IMAGE)) {
309-
String path = map.getString(Constant.PATH);
310-
content = new ImageContent(new File(path));
311-
} else if (type.equals(Constant.VOICE)) {
312-
String path = map.getString(Constant.PATH);
313-
File file = new File(path);
314-
MediaPlayer mediaPlayer = MediaPlayer.create(mContext, Uri.parse(path));
315-
int duration = mediaPlayer.getDuration() / 1000; // Millisecond to second.
316-
content = new VoiceContent(file,
317-
duration);
318-
mediaPlayer.release();
319-
} else if (type.equals(Constant.LOCATION)) {
320-
double latitude = map.getDouble(Constant.LATITUDE);
321-
double longitude = map.getDouble(Constant.LONGITUDE);
322-
int scale = map.getInt(Constant.SCALE);
323-
String address = map.getString(Constant.ADDRESS);
324-
content = new LocationContent(latitude, longitude, scale, address);
325-
} else {
326-
content = new CustomContent();
306+
switch (type) {
307+
case Constant.TEXT:
308+
content = new TextContent(map.getString(Constant.TEXT));
309+
break;
310+
case Constant.IMAGE:
311+
String path = map.getString(Constant.PATH);
312+
String suffix = path.substring(path.lastIndexOf(".") + 1);
313+
content = new ImageContent(new File(path), suffix);
314+
break;
315+
case Constant.VOICE:
316+
path = map.getString(Constant.PATH);
317+
File file = new File(path);
318+
MediaPlayer mediaPlayer = MediaPlayer.create(mContext, Uri.parse(path));
319+
int duration = mediaPlayer.getDuration() / 1000; // Millisecond to second.
320+
content = new VoiceContent(file, duration);
321+
mediaPlayer.release();
322+
break;
323+
case Constant.FILE:
324+
path = map.getString(Constant.PATH);
325+
file = new File(path);
326+
content = new FileContent(file);
327+
break;
328+
case Constant.LOCATION:
329+
double latitude = map.getDouble(Constant.LATITUDE);
330+
double longitude = map.getDouble(Constant.LONGITUDE);
331+
int scale = map.getInt(Constant.SCALE);
332+
String address = map.getString(Constant.ADDRESS);
333+
content = new LocationContent(latitude, longitude, scale, address);
334+
break;
335+
default:
336+
content = new CustomContent();
327337
}
328338
if (map.hasKey(Constant.EXTRAS)) {
329339
content.setExtras(ResultUtils.fromMap(map.getMap(Constant.EXTRAS)));
@@ -403,7 +413,8 @@ public void sendTextMessage(ReadableMap map, final Callback success, final Callb
403413
public void sendImageMessage(ReadableMap map, Callback success, Callback fail) {
404414
String path = map.getString(Constant.PATH);
405415
try {
406-
ImageContent content = new ImageContent(new File(path));
416+
String suffix = path.substring(path.lastIndexOf(".") + 1);
417+
ImageContent content = new ImageContent(new File(path), suffix);
407418
mJMessageUtils.sendMessage(map, content, success, fail);
408419
} catch (FileNotFoundException e) {
409420
e.printStackTrace();
@@ -452,9 +463,8 @@ public void sendLocationMessage(ReadableMap map, Callback success, Callback fail
452463
@ReactMethod
453464
public void sendFileMessage(ReadableMap map, Callback success, Callback fail) {
454465
try {
455-
String fileName = map.getString(Constant.FILE_NAME);
456466
String path = map.getString(Constant.PATH);
457-
FileContent content = new FileContent(new File(path), fileName);
467+
FileContent content = new FileContent(new File(path));
458468
mJMessageUtils.sendMessage(map, content, success, fail);
459469
} catch (FileNotFoundException e) {
460470
e.printStackTrace();
@@ -1084,10 +1094,6 @@ public void downloadFile(ReadableMap map, final Callback success, final Callback
10841094
mJMessageUtils.handleError(fail, ERR_CODE_MESSAGE, ERR_MSG_MESSAGE);
10851095
return;
10861096
}
1087-
if (msg.getContentType() != ContentType.image) {
1088-
mJMessageUtils.handleError(fail, ERR_CODE_MESSAGE, "Wrong message type");
1089-
return;
1090-
}
10911097
FileContent content = (FileContent) msg.getContent();
10921098
content.downloadFile(msg, new DownloadCompletionCallback() {
10931099
@Override

android/src/io/jchat/android/utils/ResultUtils.java

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33

44

5-
import android.graphics.Bitmap;
6-
import android.graphics.BitmapFactory;
75
import android.text.TextUtils;
86

97
import com.facebook.react.bridge.Arguments;
@@ -18,8 +16,6 @@
1816
import org.json.JSONException;
1917
import org.json.JSONObject;
2018

21-
import java.io.File;
22-
import java.io.FileOutputStream;
2319
import java.util.HashMap;
2420
import java.util.Iterator;
2521
import java.util.List;
@@ -128,18 +124,20 @@ public static WritableMap toJSObject(Message msg) {
128124
result.putString(Constant.SERVER_ID, String.valueOf(msg.getServerMessageId()));
129125
result.putMap(Constant.FROM, toJSObject(msg.getFromUser()));
130126

131-
if (msg.getDirect() == MessageDirect.send) {
132-
if (msg.getTargetType() == ConversationType.single) {
133-
result.putMap(Constant.TARGET, toJSObject((UserInfo) msg.getTargetInfo()));
134-
} else if (msg.getTargetType() == ConversationType.group) {
127+
switch (msg.getTargetType()) {
128+
case group:
135129
result.putMap(Constant.TARGET, toJSObject((GroupInfo) msg.getTargetInfo()));
136-
} else {
130+
break;
131+
case single:
132+
if (msg.getDirect() == MessageDirect.send) {
133+
result.putMap(Constant.TARGET, toJSObject((UserInfo) msg.getTargetInfo()));
134+
} else {
135+
result.putMap(Constant.TARGET, toJSObject(JMessageClient.getMyInfo()));
136+
}
137+
break;
138+
case chatroom:
137139
result.putMap(Constant.TARGET, toJSObject((ChatRoomInfo) msg.getTargetInfo()));
138-
}
139-
140-
} else {
141-
UserInfo myInfo = JMessageClient.getMyInfo();
142-
result.putMap(Constant.TARGET, toJSObject(myInfo));
140+
break;
143141
}
144142

145143
MessageContent content = msg.getContent();
@@ -157,21 +155,7 @@ public static WritableMap toJSObject(Message msg) {
157155
case image:
158156
result.putString(Constant.TYPE, Constant.IMAGE);
159157
ImageContent imageContent = (ImageContent) content;
160-
// jmessage did not add file extension, so save to local.
161-
File file = new File(imageContent.getLocalThumbnailPath() + ".png");
162-
FileOutputStream fos = new FileOutputStream(file);
163-
BitmapFactory.Options opts = new BitmapFactory.Options();
164-
opts.inJustDecodeBounds = false;
165-
opts.inSampleSize = 1;
166-
Bitmap bitmap = BitmapFactory.decodeFile(imageContent.getLocalThumbnailPath(), opts);
167-
try {
168-
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
169-
fos.flush();
170-
fos.close();
171-
} catch (Exception e) {
172-
e.printStackTrace();
173-
}
174-
result.putString(Constant.THUMB_PATH, file.getAbsolutePath());
158+
result.putString(Constant.THUMB_PATH, imageContent.getLocalThumbnailPath());
175159
result.putString(Constant.LOCAL_PATH, imageContent.getLocalPath());
176160
break;
177161
case voice:
@@ -183,7 +167,7 @@ public static WritableMap toJSObject(Message msg) {
183167
case file:
184168
result.putString(Constant.TYPE, Constant.FILE);
185169
FileContent fileContent = (FileContent) content;
186-
result.putString(Constant.FILE_NAME, fileContent.getLocalPath());
170+
result.putString(Constant.FILE_NAME, fileContent.getFileName());
187171
break;
188172
case custom:
189173
result.putString(Constant.TYPE, Constant.CUSTOM);

document/API.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import JMessage from 'jmessage-react-plugin';
1111
- [初始化](#初始化)
1212
- [init](#init)
1313
- [setDebugMode](#setdebugmode)
14+
- [setBadge](#setbadge)
1415
- [用户登录、注册及属性维护](#用户登录注册及属性维护)
1516
- [register](#register)
1617
- [login](#login)
@@ -120,6 +121,16 @@ JMessage.setDebugMode({ enable: true })
120121

121122
- enable:为 true 打开 Debug 模式,false 关闭 Debug 模式。
122123

124+
### setBadge
125+
126+
设置 badge 值,该操作会设置本地应用的 badge 值,同时设置极光服务器的 badge 值,收到消息 badge +1 会在极光服务器 badge 的基础上累加。
127+
128+
#### 示例
129+
130+
```javascript
131+
JMessage.setBadge(5, (success) => {})
132+
```
133+
123134
## 用户登录、注册及属性维护
124135

125136
### register

example/android/app/app.iml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,26 @@
8888
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
8989
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
9090
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
91+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
9192
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
93+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
9294
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
9395
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
9496
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
97+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
9598
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
9699
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
97100
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
98101
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
102+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/sourceFolderJavaResources" />
99103
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
100104
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
101105
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
102106
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
103107
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
104108
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
105109
</content>
106-
<orderEntry type="jdk" jdkName="Android API 25 Platform (1)" jdkType="Android SDK" />
110+
<orderEntry type="jdk" jdkName="Android API 25 Platform (2)" jdkType="Android SDK" />
107111
<orderEntry type="sourceFolder" forTests="false" />
108112
<orderEntry type="library" name="com.facebook.fresco:imagepipeline-okhttp3-1.3.0" level="project" />
109113
<orderEntry type="library" name="com.google.code.gson:gson:2.8.0@jar" level="project" />

example/android/app/src/main/java/com/sample/application/MainApplication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ public void onCreate() {
5050
SoLoader.init(this, /* native exopackage */ false);
5151
Log.i("MainApplication", "Init JMessageClient");
5252
JMessageClient.setDebugMode(true);
53-
JMessageClient.init(this);
53+
// JMessageClient.init(this, true);
5454
}
5555
}

example/app/routes/Chat/index.js

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export default class Chat extends Component {
5454
messageListLayout: {},
5555
inputViewLayout: { width: window.width, height: initHeight, },
5656
menuContainerHeight: 625,
57+
from: 0,
58+
limit: 10,
5759
};
5860

5961
this.updateLayout = this.updateLayout.bind(this);
@@ -176,8 +178,8 @@ export default class Chat extends Component {
176178
})
177179
var parames = {
178180

179-
from: 0, // 开始的消息下标。
180-
limit: 10, // 要获取的消息数。比如当 from = 0, limit = 10 时,是获取第 0 - 9 条历史消息。
181+
from: this.state.from, // 开始的消息下标。
182+
limit: this.state.limit, // 要获取的消息数。比如当 from = 0, limit = 10 时,是获取第 0 - 9 条历史消息。
181183
type: this.conversation.type,
182184
username: this.conversation.username,
183185
groupId: this.conversation.groupId,
@@ -186,6 +188,9 @@ export default class Chat extends Component {
186188
this.messageListDidLoadCallback = () => {
187189

188190
JMessage.getHistoryMessages(parames, (messages) => {
191+
this.setState({
192+
from: this.state.from + 10
193+
})
189194
var auroraMessages = messages.map((message) => {
190195
var normalMessage = this.convertJMessageToAuroraMsg(message)
191196
if (normalMessage.msgType === "unknow") {
@@ -310,7 +315,8 @@ export default class Chat extends Component {
310315

311316
onMsgClick = (message) => {
312317
console.log(message)
313-
alert(JSON.stringify(message))
318+
// alert(JSON.stringify(message))
319+
Alert.alert('onSendGalleryFiles',JSON.stringify(message))
314320
}
315321

316322
onStatusViewClick = (message) => {
@@ -327,13 +333,33 @@ export default class Chat extends Component {
327333

328334
onPullToRefresh = () => {
329335
console.log("on pull to refresh")
330-
// After loading history messages
331-
if (Platform.OS === "android") {
332-
this.timer = setTimeout(() => {
333-
console.log("send refresh complete event")
334-
this.refs["MessageList"].refreshComplete()
335-
}, 2000);
336+
var parames = {
337+
338+
from: this.state.from, // 开始的消息下标。
339+
limit: this.state.limit, // 要获取的消息数。比如当 from = 0, limit = 10 时,是获取第 0 - 9 条历史消息。
340+
type: this.conversation.type,
341+
username: this.conversation.username,
342+
groupId: this.conversation.groupId,
343+
roomId: this.conversation.roomId
336344
}
345+
JMessage.getHistoryMessages(parames, (messages) => {
346+
if (Platform.OS == "android") {
347+
this.refs["MessageList"].refreshComplete()
348+
}
349+
this.setState({
350+
from: this.state.from + 10
351+
})
352+
var auroraMessages = messages.map((message) => {
353+
var normalMessage = this.convertJMessageToAuroraMsg(message)
354+
if (normalMessage.msgType === "unknow") {
355+
return
356+
}
357+
return normalMessage
358+
})
359+
AuroraIController.insertMessagesToTop(auroraMessages)
360+
}, (error) => {
361+
Alert.alert('error!', JSON.stringify(error))
362+
})
337363
}
338364

339365
onSendText = (text) => {
@@ -469,32 +495,38 @@ export default class Chat extends Component {
469495

470496
onSendGalleryFiles = (mediaFiles) => {
471497
for (index in mediaFiles) {
498+
Alert.alert('onSendGalleryFiles',JSON.stringify(mediaFiles[index]['mediaPath']))
472499
var message = this.getNormalMessage()
473500
message.messageType = "image"
474501
message.path = mediaFiles[index].mediaPath
475-
476-
JMessage.createSendMessage(message, (msg) => {
502+
JMessage.sendImageMessage(message, (msg) => {
477503
var auroraMsg = this.convertJMessageToAuroraMsg(msg)
478504
auroraMsg.status = 'send_going'
479505
AuroraIController.appendMessages([auroraMsg])
480506
AuroraIController.scrollToBottom(true)
481-
482-
if (this.conversation.type === 'single') {
483-
msg.username = this.conversation.username
484-
} else if (this.conversation.type === "group") {
485-
msg.groupId = this.conversation.groupId
486-
} else {
487-
msg.roomId = this.conversation.roomId
488-
}
489-
msg.type = this.conversation.type
490-
491-
JMessage.sendMessage(msg, (jmessage) => {
492-
var auroraMsg = this.convertJMessageToAuroraMsg(jmessage)
493-
AuroraIController.updateMessage(auroraMsg)
494-
}, (error) => {
495-
Alert.alert('send image fail')
496-
})
497-
})
507+
}, () => {})
508+
// JMessage.createSendMessage(message, (msg) => {
509+
// var auroraMsg = this.convertJMessageToAuroraMsg(msg)
510+
// auroraMsg.status = 'send_going'
511+
// AuroraIController.appendMessages([auroraMsg])
512+
// AuroraIController.scrollToBottom(true)
513+
514+
// if (this.conversation.type === 'single') {
515+
// msg.username = this.conversation.username
516+
// } else if (this.conversation.type === "group") {
517+
// msg.groupId = this.conversation.groupId
518+
// } else {
519+
// msg.roomId = this.conversation.roomId
520+
// }
521+
// msg.type = this.conversation.type
522+
523+
// JMessage.sendMessage(msg, (jmessage) => {
524+
// var auroraMsg = this.convertJMessageToAuroraMsg(jmessage)
525+
// AuroraIController.updateMessage(auroraMsg)
526+
// }, (error) => {
527+
// Alert.alert('send image fail')
528+
// })
529+
// })
498530
}
499531
}
500532

0 commit comments

Comments
 (0)