From 9b875d19d2805b7ee4f8dfb12686925b7d5773ab Mon Sep 17 00:00:00 2001 From: MingLiang Wang Date: Tue, 10 Jan 2023 11:18:04 +0800 Subject: [PATCH] feat: add ws link --- packages/data-center/src/datacenter.ts | 1 + .../data-center/src/provider/affine/affine.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 79d8c81eca..b6cbc6299a 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -128,6 +128,7 @@ export class DataCenter { const provider = this.providerMap.get(providerId); assert(provider, `provide '${providerId}' is not registered`); await provider.auth(); + provider.loadWorkspaces(); } /** diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 1538c37b1e..9b327112dd 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -76,7 +76,12 @@ export class AffineProvider extends BaseProvider { } let ws = this._wsMap.get(room); if (!ws) { - ws = new WebsocketProvider('/', room, doc); + const wsUrl = `${ + window.location.protocol === 'https:' ? 'wss' : 'ws' + }://${window.location.host}/api/sync/`; + ws = new WebsocketProvider(wsUrl, room, doc, { + params: { token: this._apis.token.refresh }, + }); this._wsMap.set(room, ws); } // close all websocket links @@ -262,7 +267,15 @@ export class AffineProvider extends BaseProvider { const nw = new BlocksuiteWorkspace({ room: id, }).register(BlockSchema); - nw.meta.setName(meta.name); + const { doc } = nw; + const updates = await this._apis.downloadWorkspace(id); + if (updates && updates.byteLength) { + await new Promise(resolve => { + doc.once('update', resolve); + applyUpdate(doc, new Uint8Array(updates)); + }); + } + // nw.meta.setName(meta.name); this.linkLocal(nw); const workspaceInfo: WorkspaceInfo = {