Merge branch 'feat/cloud-sync-saika' into feat/datacenter

This commit is contained in:
DiamondThree
2023-01-10 14:12:55 +08:00
8 changed files with 172 additions and 92 deletions
@@ -1,6 +1,7 @@
import { test, expect } from '@playwright/test';
import { Workspaces } from '../../workspaces/index.js';
import { LocalProvider } from './local.js';
import { createBlocksuiteWorkspace } from '../../utils/index.js';
import 'fake-indexeddb/auto';
test.describe.serial('local provider', () => {
@@ -13,11 +14,16 @@ test.describe.serial('local provider', () => {
let workspaceId: string | undefined;
test('create workspace', async () => {
const w = await provider.createWorkspace({
const workspaceInfo = await provider.createWorkspaceInfo({
name: workspaceName,
avatar: 'avatar-url-test',
});
workspaceId = workspaceInfo.id;
const blocksuiteWorkspace = createBlocksuiteWorkspace(workspaceId);
await provider.createWorkspace(blocksuiteWorkspace, {
name: workspaceName,
avatar: 'avatar-url-test',
});
workspaceId = w?.room;
expect(workspaces.workspaces.length).toEqual(1);
expect(workspaces.workspaces[0].name).toEqual(workspaceName);
@@ -5,7 +5,7 @@ import { WorkspaceInfo, WorkspaceMeta } from '../../types';
import { Workspace as BlocksuiteWorkspace, uuidv4 } from '@blocksuite/store';
import { IndexedDBProvider } from './indexeddb.js';
import assert from 'assert';
import { getDefaultHeadImgBlob } from '../../utils/index.js';
import { setDefaultAvatar } from '../utils.js';
const WORKSPACE_KEY = 'workspaces';
@@ -76,12 +76,9 @@ export class LocalProvider extends BaseProvider {
this._storeWorkspaces(this._workspaces.list());
}
public override async createWorkspace(
public override async createWorkspaceInfo(
meta: WorkspaceMeta
): Promise<BlocksuiteWorkspace | undefined> {
assert(meta.name, 'Workspace name is required');
this._logger('Creating affine workspace');
): Promise<WorkspaceInfo> {
const workspaceInfo: WorkspaceInfo = {
name: meta.name,
id: uuidv4(),
@@ -92,27 +89,41 @@ export class LocalProvider extends BaseProvider {
memberCount: 1,
provider: 'local',
};
return Promise.resolve(workspaceInfo);
}
public override async createWorkspace(
blocksuiteWorkspace: BlocksuiteWorkspace,
meta: WorkspaceMeta
): Promise<BlocksuiteWorkspace | undefined> {
const workspaceId = blocksuiteWorkspace.room;
assert(workspaceId, 'Blocksuite Workspace without room(workspaceId).');
assert(meta.name, 'Workspace name is required');
this._logger('Creating affine workspace');
const workspaceInfo: WorkspaceInfo = {
name: meta.name,
id: workspaceId,
isPublish: false,
avatar: '',
owner: undefined,
isLocal: true,
memberCount: 1,
provider: 'local',
};
this.linkLocal(blocksuiteWorkspace);
blocksuiteWorkspace.meta.setName(meta.name);
const workspace = new BlocksuiteWorkspace({ room: workspaceInfo.id });
await this.linkLocal(workspace);
workspace.meta.setName(meta.name);
if (!meta.avatar) {
// set default avatar
const blob = await getDefaultHeadImgBlob(meta.name);
const blobStorage = await workspace.blobs;
assert(blobStorage, 'No blob storage');
const blobId = await blobStorage.set(blob);
const avatar = await blobStorage.get(blobId);
if (avatar) {
workspace.meta.setAvatar(avatar);
workspaceInfo.avatar = avatar;
}
await setDefaultAvatar(blocksuiteWorkspace);
workspaceInfo.avatar = blocksuiteWorkspace.meta.avatar;
}
this._workspaces.add(workspaceInfo);
this._storeWorkspaces(this._workspaces.list());
return workspace;
return blocksuiteWorkspace;
}
public override async clear(): Promise<void> {