load olm and pass it to session
This commit is contained in:
parent
92fdbe15df
commit
fe0257bca1
3 changed files with 32 additions and 4 deletions
27
src/main.js
27
src/main.js
|
@ -26,10 +26,34 @@ import {BrawlView} from "./ui/web/BrawlView.js";
|
|||
import {Clock} from "./ui/web/dom/Clock.js";
|
||||
import {OnlineStatus} from "./ui/web/dom/OnlineStatus.js";
|
||||
|
||||
function addScript(src) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var s = document.createElement("script");
|
||||
s.setAttribute("src", src );
|
||||
s.onload=resolve;
|
||||
s.onerror=reject;
|
||||
document.body.appendChild(s);
|
||||
});
|
||||
}
|
||||
|
||||
async function loadOlm(olmPaths) {
|
||||
if (olmPaths) {
|
||||
if (window.WebAssembly) {
|
||||
await addScript(olmPaths.wasmBundle);
|
||||
await window.Olm.init({locateFile: () => olmPaths.wasm});
|
||||
} else {
|
||||
await addScript(olmPaths.legacyBundle);
|
||||
await window.Olm.init();
|
||||
}
|
||||
return window.Olm;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Don't use a default export here, as we use multiple entries during legacy build,
|
||||
// which does not support default exports,
|
||||
// see https://github.com/rollup/plugins/tree/master/packages/multi-entry
|
||||
export async function main(container) {
|
||||
export async function main(container, olmPaths) {
|
||||
try {
|
||||
// to replay:
|
||||
// const fetchLog = await (await fetch("/fetchlogs/constrainterror.json")).json();
|
||||
|
@ -59,6 +83,7 @@ export async function main(container) {
|
|||
sessionInfoStorage,
|
||||
request,
|
||||
clock,
|
||||
olmPromise: loadOlm(olmPaths),
|
||||
});
|
||||
},
|
||||
sessionInfoStorage,
|
||||
|
|
|
@ -21,7 +21,7 @@ import {User} from "./User.js";
|
|||
|
||||
export class Session {
|
||||
// sessionInfo contains deviceId, userId and homeServer
|
||||
constructor({storage, hsApi, sessionInfo}) {
|
||||
constructor({storage, hsApi, sessionInfo, olm}) {
|
||||
this._storage = storage;
|
||||
this._hsApi = hsApi;
|
||||
this._session = null;
|
||||
|
@ -30,6 +30,7 @@ export class Session {
|
|||
this._sendScheduler = new SendScheduler({hsApi, backoff: new RateLimitingBackoff()});
|
||||
this._roomUpdateCallback = (room, params) => this._rooms.update(room.id, params);
|
||||
this._user = new User(sessionInfo.userId);
|
||||
this._olm = olm;
|
||||
}
|
||||
|
||||
async load() {
|
||||
|
|
|
@ -41,7 +41,7 @@ export const LoginFailure = createEnum(
|
|||
);
|
||||
|
||||
export class SessionContainer {
|
||||
constructor({clock, random, onlineStatus, request, storageFactory, sessionInfoStorage}) {
|
||||
constructor({clock, random, onlineStatus, request, storageFactory, sessionInfoStorage, olmPromise}) {
|
||||
this._random = random;
|
||||
this._clock = clock;
|
||||
this._onlineStatus = onlineStatus;
|
||||
|
@ -57,6 +57,7 @@ export class SessionContainer {
|
|||
this._sync = null;
|
||||
this._sessionId = null;
|
||||
this._storage = null;
|
||||
this._olmPromise = olmPromise;
|
||||
}
|
||||
|
||||
createNewSessionId() {
|
||||
|
@ -149,7 +150,8 @@ export class SessionContainer {
|
|||
userId: sessionInfo.userId,
|
||||
homeServer: sessionInfo.homeServer,
|
||||
};
|
||||
this._session = new Session({storage: this._storage, sessionInfo: filteredSessionInfo, hsApi});
|
||||
const olm = await this._olmPromise;
|
||||
this._session = new Session({storage: this._storage, sessionInfo: filteredSessionInfo, hsApi, olm});
|
||||
await this._session.load();
|
||||
|
||||
this._sync = new Sync({hsApi, storage: this._storage, session: this._session});
|
||||
|
|
Reference in a new issue