Skip to content

Commit d4a1132

Browse files
svlaevbradbumbalough
authored andcommitted
Send message with attributes (#17)
* Added new methods to allow attributed messages to be sent * Updated sendMessage method. It now accepts attributes param * Converting ReadableMap to JSONObject * Vars accessed from within inner classes should be marked as final * Removed unnecessary method * Updated docs regarding the `attributes` param in `Channel#sendMessage` method
1 parent 6a0ed1c commit d4a1132

File tree

5 files changed

+61
-24
lines changed

5 files changed

+61
-24
lines changed

Example/android/app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ dependencies {
7373
compile "com.facebook.react:react-native:+" // From node_modules
7474
compile project(':ExtraDimensions')
7575
compile project(':RCTTwilioChat')
76+
compile 'com.twilio:chat-android:0.12.1'
77+
compile 'com.twilio:accessmanager-android:0.1.0'
7678
}
7779

7880
// Run this once to be able to run the application with BUCK

android/src/main/java/com/bradbumbalough/RCTTwilioChat/RCTTwilioChatMessages.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.twilio.chat.CallbackListener;
1515

1616
import java.util.List;
17+
import java.util.Map;
1718

1819
import org.json.JSONObject;
1920

@@ -65,7 +66,7 @@ public void onSuccess(Messages messages) {
6566
}
6667

6768
@ReactMethod
68-
public void sendMessage(String channelSid, final String body, final Promise promise) {
69+
public void sendMessage(String channelSid, final String body, final ReadableMap attributes, final Promise promise) {
6970
loadMessagesFromChannelSid(channelSid, new CallbackListener<Messages>() {
7071
@Override
7172
public void onError(ErrorInfo errorInfo) {
@@ -74,19 +75,39 @@ public void onError(ErrorInfo errorInfo) {
7475
}
7576

7677
@Override
77-
public void onSuccess(Messages messages) {
78-
messages.sendMessage(body, new StatusListener() {
79-
@Override
80-
public void onError(ErrorInfo errorInfo) {
81-
super.onError(errorInfo);
82-
promise.reject("send-message-error","Error occurred while attempting to sendMessage.");
83-
}
84-
85-
@Override
86-
public void onSuccess() {
87-
promise.resolve(true);
88-
}
89-
});
78+
public void onSuccess(final Messages messages) {
79+
final Message newMessage = messages.createMessage(body);
80+
81+
final StatusListener sendListener = new StatusListener() {
82+
@Override
83+
public void onError(ErrorInfo errorInfo) {
84+
super.onError(errorInfo);
85+
promise.reject("send-message-error","Error occurred while attempting to sendMessage.");
86+
}
87+
88+
@Override
89+
public void onSuccess() {
90+
promise.resolve(true);
91+
}
92+
};
93+
94+
if(attributes != null) {
95+
final JSONObject json = RCTConvert.readableMapToJson(attributes);
96+
newMessage.setAttributes(json, new StatusListener() {
97+
@Override
98+
public void onSuccess() {
99+
messages.sendMessage(newMessage, sendListener);
100+
}
101+
102+
@Override
103+
public void onError(ErrorInfo errorInfo) {
104+
super.onError(errorInfo);
105+
promise.reject("send-attributed-message-error","Error occurred while attempting to set attributes in sendAttributedMessage.");
106+
}
107+
});
108+
} else {
109+
messages.sendMessage(body, sendListener);
110+
}
90111
}
91112
});
92113
}

docs/Channel.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,11 @@ Leave a channel.
147147
|--- |--- |--- |
148148
|*index*|Number|The index of the message to delete
149149
150-
#### `sendMessage(body)` : Promise
150+
#### `sendMessage(body, attributes)` : Promise
151151
|Name |Type |Description |
152152
|--- |--- |--- |
153153
|*body*|String|The message body
154+
|*attributes*|Object|Any properties you want associated with the message (Optional)
154155
155156
#### `setAllMessagesConsumed()`
156157
Update the last consumed index for this Member and Channel to the max message currently on this device.

ios/RCTTwilioChat/RCTTwilioChatMessages.m

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,30 @@ - (void)loadMessagesFromChannelSid:(NSString *)sid :(void (^)(TCHResult *result,
3636
}
3737

3838

39-
RCT_REMAP_METHOD(sendMessage, channelSid:(NSString *)channelSid body:(NSString *)body send_message_resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
39+
RCT_REMAP_METHOD(sendMessage, channelSid:(NSString *)channelSid body:(NSString *)body attributes:(NSDictionary<NSString *, id> *)attributes send_message_resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
4040
[self loadMessagesFromChannelSid:channelSid :^(TCHResult *result, TCHMessages *messages) {
4141
if (result.isSuccessful) {
42-
[messages sendMessage:[messages createMessageWithBody:body] completion:^(TCHResult *result) {
43-
if (result.isSuccessful) {
44-
resolve(@[@TRUE]);
45-
}
46-
else {
47-
reject(@"send-message-error", @"Error occured while attempting to send a message.", result.error);
42+
TCHMessage* message = [messages createMessageWithBody:body];
43+
void (^sendListener)(TCHResult * sendResult) = ^(TCHResult *sendResult) {
44+
if (sendResult.isSuccessful) {
45+
resolve(@[@TRUE]);
46+
}
47+
else {
48+
reject(@"send-message-error", @"Error occured while attempting to send a message.", sendResult.error);
49+
}
50+
};
51+
if (attributes != nil) {
52+
[message setAttributes:attributes completion:^(TCHResult *setAttrResult) {
53+
if(setAttrResult.isSuccessful) {
54+
[messages sendMessage:message completion:sendListener];
55+
} else {
56+
reject(@"send-attributed-message-error", @"Error occured while attempting to send attributed message.", setAttrResult.error);
4857
}
4958
}];
59+
}
60+
else {
61+
[messages sendMessage:message completion:sendListener];
62+
}
5063
}
5164
else {
5265
reject(@"send-message-error", @"Error occured while attempting to send a message.", result.error);

lib/Channel.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ class Channel {
214214
return TwilioChatMessages.getLastConsumedMessageIndex(this.sid);
215215
}
216216

217-
sendMessage(body) {
218-
return TwilioChatMessages.sendMessage(this.sid, body);
217+
sendMessage(body, attributes = null) {
218+
return TwilioChatMessages.sendMessage(this.sid, body, attributes);
219219
}
220220

221221
removeMessage(index) {

0 commit comments

Comments
 (0)