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 = {