aboutsummaryrefslogtreecommitdiff
path: root/javascript/olm_suffix.js
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2018-09-25 17:13:29 +0100
committerDavid Baker <dave@matrix.org>2018-09-25 17:13:29 +0100
commit263b94428a24caaa5b899ed7f73b896620e6cdf4 (patch)
treedacfa7322ee472d9a09e4bd56805bae0aad215c9 /javascript/olm_suffix.js
parentf29d8cdd7bf1faf8294f51624c633fb05c9a0e2f (diff)
Another day, another interface
Change the interface again, hopefully this time a bit more normal. Now we wrap the emscripten module completely and just expose the high level objects. The olm library export is now imported as normal (ie. returns a module rather than a function returning a module) but has an `init` method which *must* be called. This returns a promise which resolves when the module is ready. It also rejects if the module failed to set up, unlike before (and unlike the promise-not-a-promise that emscripten returns). Generally catch failures to init the module.
Diffstat (limited to 'javascript/olm_suffix.js')
-rw-r--r--javascript/olm_suffix.js23
1 files changed, 23 insertions, 0 deletions
diff --git a/javascript/olm_suffix.js b/javascript/olm_suffix.js
new file mode 100644
index 0000000..023c0a5
--- /dev/null
+++ b/javascript/olm_suffix.js
@@ -0,0 +1,23 @@
+olm_exports['init'] = function() {
+ return new Promise(function(resolve, reject) {
+ onInitSuccess = function() {
+ resolve();
+ };
+ onInitFail = function(err) {
+ reject(err);
+ };
+ Module();
+ });
+};
+
+if (typeof(window) !== 'undefined') {
+ // We've been imported directly into a browser. Define the global 'Olm' object.
+ // (we do this even if module.exports was defined, because it's useful to have
+ // Olm in the global scope for browserified and webpacked apps.)
+ window["Olm"] = olm_exports;
+}
+
+// Emscripten sets the module exports to be its module
+// with wrapped c functions. Clobber it with our higher
+// level wrapper class.
+module.exports = olm_exports;