diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 93d37504ff..6c4ac5e69f 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -151,10 +151,6 @@ export class Platform { this._serviceWorkerHandler.registerAndStart(assetPaths.serviceWorker); } this._syncWorkerPool = null; - if (assetPaths.syncWorker && window.Worker) { - this._syncWorkerPool = new SyncWorkerPool(this._assetPaths.syncWorker); - this._syncWorkerPool.add("1646528482480255"); - } this.notificationService = undefined; // Only try to use crypto when olm is provided if(this._assetPaths.olm) { @@ -179,6 +175,11 @@ export class Platform { this.mediaDevices = new MediaDevicesWrapper(navigator.mediaDevices); this.webRTC = new DOMWebRTC(); this._themeLoader = import.meta.env.DEV? null: new ThemeLoader(this); + + if (assetPaths.syncWorker && window.Worker) { + this._syncWorkerPool = new SyncWorkerPool(this._assetPaths.syncWorker, this.sessionInfoStorage); + this._syncWorkerPool.add("1646528482480255"); + } } async init() { diff --git a/src/platform/web/worker-sync/SyncWorker.ts b/src/platform/web/worker-sync/SyncWorker.ts index 776ee55de6..d49fa3597f 100644 --- a/src/platform/web/worker-sync/SyncWorker.ts +++ b/src/platform/web/worker-sync/SyncWorker.ts @@ -1,4 +1,10 @@ import {ISessionInfo} from "../../../matrix/sessioninfo/localstorage/SessionInfoStorage"; +import {HomeServerApi} from "../../../matrix/net/HomeServerApi"; +import {createFetchRequest} from "../dom/request/fetch"; +import {Clock} from "../dom/Clock"; +import {Reconnector} from "../../../matrix/net/Reconnector"; +import {ExponentialRetryDelay} from "../../../matrix/net/ExponentialRetryDelay"; +import {OnlineStatus} from "../dom/OnlineStatus"; type Payload = object; @@ -16,8 +22,29 @@ export interface StartSyncPayload extends Payload { } class SyncWorker { + private _clock: Clock; + private _reconnector: Reconnector; + async start(payload: StartSyncPayload): Promise { - console.log(`Starting sync for session with id ${payload.sessionInfo.id}`); + const sessionInfo = payload.sessionInfo; + console.log(`Starting sync worker for session with id ${sessionInfo.id}`); + + this._clock = new Clock; + + this._reconnector = new Reconnector({ + onlineStatus: new OnlineStatus(), + retryDelay: new ExponentialRetryDelay(this._clock.createTimeout), + createMeasure: this._clock.createMeasure + }); + + const hsApi = new HomeServerApi({ + homeserver: sessionInfo.homeserver, + accessToken: sessionInfo.accessToken, + request: createFetchRequest(this._clock.createTimeout), + reconnector: this._reconnector, + }); + + return payload; } }