parent
b09b47543b
commit
df2b966acd
3 changed files with 82 additions and 41 deletions
@ -0,0 +1,21 @@ |
||||
/* |
||||
Copyright 2020 The Matrix.org Foundation C.I.C. |
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); |
||||
you may not use this file except in compliance with the License. |
||||
You may obtain a copy of the License at |
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software |
||||
distributed under the License is distributed on an "AS IS" BASIS, |
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
See the License for the specific language governing permissions and |
||||
limitations under the License. |
||||
*/ |
||||
|
||||
interface Window { |
||||
Olm: { |
||||
init: () => Promise<void>; |
||||
}; |
||||
} |
@ -0,0 +1,60 @@ |
||||
/* |
||||
Copyright 2015, 2016 OpenMarket Ltd |
||||
Copyright 2017 Vector Creations Ltd |
||||
Copyright 2018, 2019 New Vector Ltd |
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> |
||||
Copyright 2020 The Matrix.org Foundation C.I.C. |
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); |
||||
you may not use this file except in compliance with the License. |
||||
You may obtain a copy of the License at |
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software |
||||
distributed under the License is distributed on an "AS IS" BASIS, |
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
See the License for the specific language governing permissions and |
||||
limitations under the License. |
||||
*/ |
||||
|
||||
// @ts-ignore
|
||||
import olmWasmPath from "olm/olm.wasm"; |
||||
import Olm from 'olm'; |
||||
|
||||
export function loadOlm() { |
||||
/* Load Olm. We try the WebAssembly version first, and then the legacy, |
||||
* asm.js version if that fails. For this reason we need to wait for this |
||||
* to finish before continuing to load the rest of the app. In future |
||||
* we could somehow pass a promise down to react-sdk and have it wait on |
||||
* that so olm can be loading in parallel with the rest of the app. |
||||
* |
||||
* We also need to tell the Olm js to look for its wasm file at the same |
||||
* level as index.html. It really should be in the same place as the js, |
||||
* ie. in the bundle directory, but as far as I can tell this is |
||||
* completely impossible with webpack. We do, however, use a hashed |
||||
* filename to avoid caching issues. |
||||
*/ |
||||
return Olm.init({ |
||||
locateFile: () => olmWasmPath, |
||||
}).then(() => { |
||||
console.log("Using WebAssembly Olm"); |
||||
}).catch((e) => { |
||||
console.log("Failed to load Olm: trying legacy version", e); |
||||
return new Promise((resolve, reject) => { |
||||
const s = document.createElement('script'); |
||||
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
|
||||
s.onload = resolve; |
||||
s.onerror = reject; |
||||
document.body.appendChild(s); |
||||
}).then(() => { |
||||
// Init window.Olm, ie. the one just loaded by the script tag,
|
||||
// not 'Olm' which is still the failed wasm version.
|
||||
return window.Olm.init(); |
||||
}).then(() => { |
||||
console.log("Using legacy Olm"); |
||||
}).catch((e) => { |
||||
console.log("Both WebAssembly and asm.js Olm failed!", e); |
||||
}); |
||||
}); |
||||
} |
Loading…
Reference in new issue