Fix encoding of multipart messages.

This commit is contained in:
Josh Jackson 2017-02-03 15:20:37 -06:00 committed by Joe Bowser
parent 4919a2d2a8
commit 33da6e9eb8

View File

@ -488,6 +488,34 @@ public class NativeToJsMessageQueue {
encodeAsMessageHelper(sb, pluginResult); encodeAsMessageHelper(sb, pluginResult);
} }
void encodeMessageAsJsMessage(StringBuilder sb) {
switch (pluginResult.getMessageType()) {
case PluginResult.MESSAGE_TYPE_MULTIPART:
int size = pluginResult.getMultipartMessagesSize();
for (int i=0; i<size; i++) {
PluginResult subresult = pluginResult.getMultipartMessage(i);
JsMessage submessage = new JsMessage(subresult, jsPayloadOrCallbackId);
submessage.encodeMessageAsJsMessage(sb);
if (i < (size-1)) {
sb.append(",");
}
}
break;
case PluginResult.MESSAGE_TYPE_BINARYSTRING:
sb.append("atob('")
.append(pluginResult.getMessage())
.append("')");
break;
case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
sb.append("cordova.require('cordova/base64').toArrayBuffer('")
.append(pluginResult.getMessage())
.append("')");
break;
default:
sb.append(pluginResult.getMessage());
}
}
void encodeAsJsMessage(StringBuilder sb) { void encodeAsJsMessage(StringBuilder sb) {
if (pluginResult == null) { if (pluginResult == null) {
sb.append(jsPayloadOrCallbackId); sb.append(jsPayloadOrCallbackId);
@ -495,29 +523,16 @@ public class NativeToJsMessageQueue {
int status = pluginResult.getStatus(); int status = pluginResult.getStatus();
boolean success = (status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal()); boolean success = (status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal());
sb.append("cordova.callbackFromNative('") sb.append("cordova.callbackFromNative('")
.append(jsPayloadOrCallbackId) .append(jsPayloadOrCallbackId)
.append("',") .append("',")
.append(success) .append(success)
.append(",") .append(",")
.append(status) .append(status)
.append(",["); .append(",[");
switch (pluginResult.getMessageType()) { encodeMessageAsJsMessage(sb);
case PluginResult.MESSAGE_TYPE_BINARYSTRING:
sb.append("atob('")
.append(pluginResult.getMessage())
.append("')");
break;
case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
sb.append("cordova.require('cordova/base64').toArrayBuffer('")
.append(pluginResult.getMessage())
.append("')");
break;
default:
sb.append(pluginResult.getMessage());
}
sb.append("],") sb.append("],")
.append(pluginResult.getKeepCallback()) .append(pluginResult.getKeepCallback())
.append(");"); .append(");");
} }
} }
} }