Refactor sendMessageToDevices

Leverage map and Promise.all for more concise and linear code flow.
pull/749/head
lilia 10 years ago
parent 9ff95c7e61
commit bafc61600c

@ -39688,46 +39688,46 @@ window.textsecure.messaging = function() {
var self = {}; var self = {};
// message == PushMessageContentProto (NOT STRING) // message == DataMessage or ContentMessage proto
function sendMessageToDevices(timestamp, number, deviceObjectList, message) { function sendMessageToDevices(timestamp, number, deviceObjectList, message) {
var jsonData = [];
var relay = undefined; var relay = undefined;
var promises = []; return Promise.all(deviceObjectList.map(function(device) {
if (device.relay !== undefined) {
var addEncryptionFor = function(i) {
if (deviceObjectList[i].relay !== undefined) {
if (relay === undefined) if (relay === undefined)
relay = deviceObjectList[i].relay; relay = device.relay;
else if (relay != deviceObjectList[i].relay) else if (relay != device.relay)
return new Promise(function() { throw new Error("Mismatched relays for number " + number); }); return new Promise(function() {
throw new Error("Mismatched relays for number " + number);
});
} else { } else {
if (relay === undefined) if (relay === undefined)
relay = ""; relay = "";
else if (relay != "") else if (relay != "")
return new Promise(function() { throw new Error("Mismatched relays for number " + number); }); return new Promise(function() {
throw new Error("Mismatched relays for number " + number);
});
} }
return textsecure.protocol_wrapper.encryptMessageFor(deviceObjectList[i], message).then(function(encryptedMsg) { return textsecure.protocol_wrapper.encryptMessageFor(device, message).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.getRegistrationId(deviceObjectList[i].encodedNumber).then(function(registrationId) { return textsecure.protocol_wrapper.getRegistrationId(device.encodedNumber).then(function(registrationId) {
return textsecure.storage.devices.removeTempKeysFromDevice(deviceObjectList[i].encodedNumber).then(function() { return textsecure.storage.devices.removeTempKeysFromDevice(device.encodedNumber).then(function() {
jsonData[i] = { var json = {
type: encryptedMsg.type, type: encryptedMsg.type,
destinationDeviceId: textsecure.utils.unencodeNumber(deviceObjectList[i].encodedNumber)[1], destinationDeviceId: textsecure.utils.unencodeNumber(device.encodedNumber)[1],
destinationRegistrationId: registrationId, destinationRegistrationId: registrationId,
content: encryptedMsg.body, content: encryptedMsg.body,
timestamp: timestamp timestamp: timestamp
}; };
if (deviceObjectList[i].relay !== undefined) if (device.relay !== undefined) {
jsonData[i].relay = deviceObjectList[i].relay; json.relay = device.relay;
}
return json;
}); });
}); });
}); });
} })).then(function(jsonData) {
for (var i = 0; i < deviceObjectList.length; i++)
promises[i] = addEncryptionFor(i);
return Promise.all(promises).then(function() {
var legacy = (message instanceof textsecure.protobuf.DataMessage); var legacy = (message instanceof textsecure.protobuf.DataMessage);
return TextSecureServer.sendMessages(number, jsonData, legacy); return TextSecureServer.sendMessages(number, jsonData, legacy);
}); });

@ -7,46 +7,46 @@ window.textsecure.messaging = function() {
var self = {}; var self = {};
// message == PushMessageContentProto (NOT STRING) // message == DataMessage or ContentMessage proto
function sendMessageToDevices(timestamp, number, deviceObjectList, message) { function sendMessageToDevices(timestamp, number, deviceObjectList, message) {
var jsonData = [];
var relay = undefined; var relay = undefined;
var promises = []; return Promise.all(deviceObjectList.map(function(device) {
if (device.relay !== undefined) {
var addEncryptionFor = function(i) {
if (deviceObjectList[i].relay !== undefined) {
if (relay === undefined) if (relay === undefined)
relay = deviceObjectList[i].relay; relay = device.relay;
else if (relay != deviceObjectList[i].relay) else if (relay != device.relay)
return new Promise(function() { throw new Error("Mismatched relays for number " + number); }); return new Promise(function() {
throw new Error("Mismatched relays for number " + number);
});
} else { } else {
if (relay === undefined) if (relay === undefined)
relay = ""; relay = "";
else if (relay != "") else if (relay != "")
return new Promise(function() { throw new Error("Mismatched relays for number " + number); }); return new Promise(function() {
throw new Error("Mismatched relays for number " + number);
});
} }
return textsecure.protocol_wrapper.encryptMessageFor(deviceObjectList[i], message).then(function(encryptedMsg) { return textsecure.protocol_wrapper.encryptMessageFor(device, message).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.getRegistrationId(deviceObjectList[i].encodedNumber).then(function(registrationId) { return textsecure.protocol_wrapper.getRegistrationId(device.encodedNumber).then(function(registrationId) {
return textsecure.storage.devices.removeTempKeysFromDevice(deviceObjectList[i].encodedNumber).then(function() { return textsecure.storage.devices.removeTempKeysFromDevice(device.encodedNumber).then(function() {
jsonData[i] = { var json = {
type: encryptedMsg.type, type: encryptedMsg.type,
destinationDeviceId: textsecure.utils.unencodeNumber(deviceObjectList[i].encodedNumber)[1], destinationDeviceId: textsecure.utils.unencodeNumber(device.encodedNumber)[1],
destinationRegistrationId: registrationId, destinationRegistrationId: registrationId,
content: encryptedMsg.body, content: encryptedMsg.body,
timestamp: timestamp timestamp: timestamp
}; };
if (deviceObjectList[i].relay !== undefined) if (device.relay !== undefined) {
jsonData[i].relay = deviceObjectList[i].relay; json.relay = device.relay;
}
return json;
}); });
}); });
}); });
} })).then(function(jsonData) {
for (var i = 0; i < deviceObjectList.length; i++)
promises[i] = addEncryptionFor(i);
return Promise.all(promises).then(function() {
var legacy = (message instanceof textsecure.protobuf.DataMessage); var legacy = (message instanceof textsecure.protobuf.DataMessage);
return TextSecureServer.sendMessages(number, jsonData, legacy); return TextSecureServer.sendMessages(number, jsonData, legacy);
}); });

Loading…
Cancel
Save