70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
// Copyright 2015-2020 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
/* global window, dcodeIO, textsecure */
|
|
|
|
// eslint-disable-next-line func-names
|
|
(function () {
|
|
const FILES_TO_LOAD = [
|
|
'SignalService.proto',
|
|
'SignalStorage.proto',
|
|
'SubProtocol.proto',
|
|
'DeviceMessages.proto',
|
|
'Stickers.proto',
|
|
|
|
// Just for encrypting device names
|
|
'DeviceName.proto',
|
|
|
|
// Metadata-specific protos
|
|
'UnidentifiedDelivery.proto',
|
|
|
|
// Groups
|
|
'Groups.proto',
|
|
];
|
|
|
|
let remainingFilesToLoad = FILES_TO_LOAD.length;
|
|
const hasFinishedLoading = () => remainingFilesToLoad <= 0;
|
|
let onLoadCallbacks = [];
|
|
|
|
window.textsecure = window.textsecure || {};
|
|
window.textsecure.protobuf = {
|
|
onLoad: callback => {
|
|
if (hasFinishedLoading()) {
|
|
setTimeout(callback, 0);
|
|
} else {
|
|
onLoadCallbacks.push(callback);
|
|
}
|
|
},
|
|
};
|
|
|
|
FILES_TO_LOAD.forEach(filename => {
|
|
dcodeIO.ProtoBuf.loadProtoFile(
|
|
{ root: window.PROTO_ROOT, file: filename },
|
|
(error, result) => {
|
|
if (error) {
|
|
const text = `Error loading protos from ${filename} (root: ${
|
|
window.PROTO_ROOT
|
|
}) ${error && error.stack ? error.stack : error}`;
|
|
window.log.error(text);
|
|
throw error;
|
|
}
|
|
const protos = result.build('signalservice');
|
|
if (!protos) {
|
|
const text = `Error loading protos from ${filename} - no exported types! (root: ${window.PROTO_ROOT})`;
|
|
window.log.error(text);
|
|
throw new Error(text);
|
|
}
|
|
// eslint-disable-next-line no-restricted-syntax, guard-for-in
|
|
for (const protoName in protos) {
|
|
textsecure.protobuf[protoName] = protos[protoName];
|
|
}
|
|
|
|
remainingFilesToLoad -= 1;
|
|
if (hasFinishedLoading()) {
|
|
onLoadCallbacks.forEach(callback => callback());
|
|
onLoadCallbacks = [];
|
|
}
|
|
}
|
|
);
|
|
});
|
|
})();
|