Kill off olm-loader
Now that Olm needs to be inited asynchronously anyway, we can just pass the options to Olm.init(), and as long as we do that before we start the js-sdk, we're all good. This will means the olm js is now part of the main bundle but since it's now just a wrapper around the wasm, this is probably faster. Also add the directwatch flag to olm.wasm because otherwise it doesn't seem to copy the file in watch mode...pull/7385/head
parent
c511902356
commit
1f34d2d644
|
@ -60,7 +60,7 @@ const COPY_LIST = [
|
||||||
// XXX: This is tied quite heavily to the matching olm.js so it really should be
|
// XXX: This is tied quite heavily to the matching olm.js so it really should be
|
||||||
// in the bundle dir with the js to avoid caching issues giving us wasm that
|
// in the bundle dir with the js to avoid caching issues giving us wasm that
|
||||||
// doesn't match our js, but I cannot find any way to get webpack to do this.
|
// doesn't match our js, but I cannot find any way to get webpack to do this.
|
||||||
["node_modules/olm/olm.wasm", "webapp"],
|
["node_modules/olm/olm.wasm", "webapp", { directwatch: 1 }],
|
||||||
["./config.json", "webapp", { directwatch: 1 }],
|
["./config.json", "webapp", { directwatch: 1 }],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,8 @@ import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/Setting
|
||||||
import Tinter from 'matrix-react-sdk/lib/Tinter';
|
import Tinter from 'matrix-react-sdk/lib/Tinter';
|
||||||
import SdkConfig from "matrix-react-sdk/lib/SdkConfig";
|
import SdkConfig from "matrix-react-sdk/lib/SdkConfig";
|
||||||
|
|
||||||
|
import Olm from 'olm';
|
||||||
|
|
||||||
import rageshake from "matrix-react-sdk/lib/rageshake/rageshake";
|
import rageshake from "matrix-react-sdk/lib/rageshake/rageshake";
|
||||||
|
|
||||||
import CallHandler from 'matrix-react-sdk/lib/CallHandler';
|
import CallHandler from 'matrix-react-sdk/lib/CallHandler';
|
||||||
|
@ -227,6 +229,20 @@ async function loadApp() {
|
||||||
|
|
||||||
window.addEventListener('hashchange', onHashChange);
|
window.addEventListener('hashchange', onHashChange);
|
||||||
|
|
||||||
|
/* Start loading Olm. Note that we *don't* wait for this to load: the
|
||||||
|
* js-sdk will also call this and actually wait on the promise before it
|
||||||
|
* tries to use the library. It can be loading its wasm while the rest of
|
||||||
|
* the app loads though.
|
||||||
|
*
|
||||||
|
* 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, to avoid caching issues, but as far as I
|
||||||
|
* can tell this is completely impossible with webpack.
|
||||||
|
*/
|
||||||
|
Olm.init({
|
||||||
|
locateFile: () => 'olm.wasm',
|
||||||
|
});
|
||||||
|
|
||||||
await loadLanguage();
|
await loadLanguage();
|
||||||
|
|
||||||
const fragparts = parseQsFromFragment(window.location);
|
const fragparts = parseQsFromFragment(window.location);
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2016 OpenMarket Ltd
|
|
||||||
Copyright 2018 New Vector Ltd
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import olm from 'olm/olm.js';
|
|
||||||
|
|
||||||
/* a very thin shim for loading olm.js: just sets the global OLM_OPTIONS and
|
|
||||||
* requires the actual olm.js library.
|
|
||||||
*
|
|
||||||
* olm.js reads global.OLM_OPTIONS and defines global.Olm. The latter is fine for us,
|
|
||||||
* but we need to prepare the former.
|
|
||||||
*
|
|
||||||
* We can't use webpack's definePlugin to do this, because we tell webpack not
|
|
||||||
* to parse olm.js. We also can't put this code in index.js, because olm and
|
|
||||||
* index.js are loaded in parallel, and we need to make sure OLM_OPTIONS is set
|
|
||||||
* before olm.js is loaded.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* 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,
|
|
||||||
* to avoid caching issues, but as far as I can tell this is completely impossible
|
|
||||||
* with webpack.
|
|
||||||
*/
|
|
||||||
global.OLM_OPTIONS = {
|
|
||||||
locateFile: () => 'olm.wasm',
|
|
||||||
};
|
|
|
@ -15,15 +15,6 @@ module.exports = {
|
||||||
|
|
||||||
"mobileguide": "./src/vector/mobile_guide/index.js",
|
"mobileguide": "./src/vector/mobile_guide/index.js",
|
||||||
|
|
||||||
// We ship olm.js as a separate lump of javascript. This makes it get
|
|
||||||
// loaded via a separate <script/> tag in index.html (which loads it
|
|
||||||
// into the browser global `Olm`, where js-sdk expects to find it).
|
|
||||||
//
|
|
||||||
// (we should probably make js-sdk load it asynchronously at some
|
|
||||||
// point, so that it doesn't block the pageload, but that is a separate
|
|
||||||
// problem)
|
|
||||||
"olm": "./src/vector/olm-loader.js",
|
|
||||||
|
|
||||||
// CSS themes
|
// CSS themes
|
||||||
"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss",
|
"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss",
|
||||||
"theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss",
|
"theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss",
|
||||||
|
@ -154,12 +145,3 @@ module.exports = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// olm is an optional dependency. Ignore it if it's not installed, to avoid a
|
|
||||||
// scary-looking error.
|
|
||||||
try {
|
|
||||||
require('olm');
|
|
||||||
} catch (e) {
|
|
||||||
console.log("Olm is not installed; not shipping it");
|
|
||||||
delete(module.exports.entry["olm"]);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue