From 263b94428a24caaa5b899ed7f73b896620e6cdf4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 25 Sep 2018 17:13:29 +0100 Subject: 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. --- javascript/olm_suffix.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 javascript/olm_suffix.js (limited to 'javascript/olm_suffix.js') 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; -- cgit v1.2.3 From dfbe8a4796747b0a732f0eb322a37de99a2d2eb9 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 25 Sep 2018 17:48:17 +0100 Subject: Return same promise if init() called many times So we only init the library once. --- javascript/olm_suffix.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'javascript/olm_suffix.js') diff --git a/javascript/olm_suffix.js b/javascript/olm_suffix.js index 023c0a5..ec0e39b 100644 --- a/javascript/olm_suffix.js +++ b/javascript/olm_suffix.js @@ -1,5 +1,8 @@ +var olmInitPromise; + olm_exports['init'] = function() { - return new Promise(function(resolve, reject) { + if (olmInitPromise) return olmInitPromise; + olmInitPromise = new Promise(function(resolve, reject) { onInitSuccess = function() { resolve(); }; @@ -8,6 +11,7 @@ olm_exports['init'] = function() { }; Module(); }); + return olmInitPromise; }; if (typeof(window) !== 'undefined') { -- cgit v1.2.3 From c4a39186862b61915cab1e98e6eed417878020cd Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 26 Sep 2018 16:38:39 +0100 Subject: Support passing olm options into init() --- javascript/olm_suffix.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'javascript/olm_suffix.js') diff --git a/javascript/olm_suffix.js b/javascript/olm_suffix.js index ec0e39b..7f19953 100644 --- a/javascript/olm_suffix.js +++ b/javascript/olm_suffix.js @@ -1,7 +1,10 @@ var olmInitPromise; -olm_exports['init'] = function() { +olm_exports['init'] = function(opts) { if (olmInitPromise) return olmInitPromise; + + if (opts) OLM_OPTIONS = opts; + olmInitPromise = new Promise(function(resolve, reject) { onInitSuccess = function() { resolve(); -- cgit v1.2.3