mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-01 09:30:01 +08:00
Merge remote-tracking branch 'origin/feat/cloud-sync-saika' into feat/client-app
This commit is contained in:
@@ -18,7 +18,6 @@ import { TauriIPCProvider } from './provider/tauri-ipc';
|
|||||||
export class DataCenter {
|
export class DataCenter {
|
||||||
private readonly _workspaces = new Workspaces();
|
private readonly _workspaces = new Workspaces();
|
||||||
private readonly _logger = getLogger('dc');
|
private readonly _logger = getLogger('dc');
|
||||||
private readonly _blobStorage: BlobStorage = new BlobStorage();
|
|
||||||
/**
|
/**
|
||||||
* A mainProvider must exist as the only data trustworthy source.
|
* A mainProvider must exist as the only data trustworthy source.
|
||||||
*/
|
*/
|
||||||
@@ -36,14 +35,12 @@ export class DataCenter {
|
|||||||
new LocalProvider({
|
new LocalProvider({
|
||||||
logger: dc._logger,
|
logger: dc._logger,
|
||||||
workspaces: dc._workspaces.createScope(),
|
workspaces: dc._workspaces.createScope(),
|
||||||
blobs: dc._blobStorage,
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
dc.registerProvider(
|
dc.registerProvider(
|
||||||
new AffineProvider({
|
new AffineProvider({
|
||||||
logger: dc._logger,
|
logger: dc._logger,
|
||||||
workspaces: dc._workspaces.createScope(),
|
workspaces: dc._workspaces.createScope(),
|
||||||
blobs: dc._blobStorage,
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
if (typeof window !== 'undefined' && window.CLIENT_APP) {
|
if (typeof window !== 'undefined' && window.CLIENT_APP) {
|
||||||
@@ -345,21 +342,21 @@ export class DataCenter {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* get blob url by workspaces id
|
// * get blob url by workspaces id
|
||||||
* @param id
|
// * @param id
|
||||||
* @returns {Promise<string | null>} blob url
|
// * @returns {Promise<string | null>} blob url
|
||||||
*/
|
// */
|
||||||
async getBlob(id: string): Promise<string | null> {
|
// async getBlob(id: string): Promise<string | null> {
|
||||||
return await this._blobStorage.get(id);
|
// return await this._blobStorage.get(id);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* up load blob and get a blob url
|
// * up load blob and get a blob url
|
||||||
* @param id
|
// * @param id
|
||||||
* @returns {Promise<string | null>} blob url
|
// * @returns {Promise<string | null>} blob url
|
||||||
*/
|
// */
|
||||||
async setBlob(blob: Blob): Promise<string> {
|
// async setBlob(blob: Blob): Promise<string> {
|
||||||
return await this._blobStorage.set(blob);
|
// return await this._blobStorage.set(blob);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,19 +246,12 @@ export class AffineProvider extends BaseProvider {
|
|||||||
meta: WorkspaceMeta
|
meta: WorkspaceMeta
|
||||||
): Promise<Workspace | undefined> {
|
): Promise<Workspace | undefined> {
|
||||||
assert(meta.name, 'Workspace name is required');
|
assert(meta.name, 'Workspace name is required');
|
||||||
if (!meta.avatar) {
|
|
||||||
// set default avatar
|
|
||||||
const blob = await getDefaultHeadImgBlob(meta.name);
|
|
||||||
const blobId = await this.setBlob(blob);
|
|
||||||
meta.avatar = (await this.getBlob(blobId)) || '';
|
|
||||||
}
|
|
||||||
const { id } = await createWorkspace(meta as Required<WorkspaceMeta>);
|
const { id } = await createWorkspace(meta as Required<WorkspaceMeta>);
|
||||||
this._logger('Creating affine workspace');
|
this._logger('Creating affine workspace');
|
||||||
const nw = new Workspace({
|
const nw = new Workspace({
|
||||||
room: id,
|
room: id,
|
||||||
}).register(BlockSchema);
|
}).register(BlockSchema);
|
||||||
nw.meta.setName(meta.name);
|
nw.meta.setName(meta.name);
|
||||||
nw.meta.setAvatar(meta.avatar);
|
|
||||||
this._initWorkspaceDb(nw);
|
this._initWorkspaceDb(nw);
|
||||||
|
|
||||||
const workspaceInfo: WS = {
|
const workspaceInfo: WS = {
|
||||||
@@ -272,6 +265,18 @@ export class AffineProvider extends BaseProvider {
|
|||||||
provider: 'local',
|
provider: 'local',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!meta.avatar) {
|
||||||
|
// set default avatar
|
||||||
|
const blob = await getDefaultHeadImgBlob(meta.name);
|
||||||
|
const blobStorage = await nw.blobs;
|
||||||
|
assert(blobStorage, 'No blob storage');
|
||||||
|
const blobId = await blobStorage.set(blob);
|
||||||
|
const avatar = await blobStorage.get(blobId);
|
||||||
|
if (avatar) {
|
||||||
|
nw.meta.setAvatar(avatar);
|
||||||
|
workspaceInfo.avatar = avatar;
|
||||||
|
}
|
||||||
|
}
|
||||||
this._workspaces.add(workspaceInfo);
|
this._workspaces.add(workspaceInfo);
|
||||||
return nw;
|
return nw;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,19 +9,16 @@ const defaultLogger = () => {
|
|||||||
export interface ProviderConstructorParams {
|
export interface ProviderConstructorParams {
|
||||||
logger?: Logger;
|
logger?: Logger;
|
||||||
workspaces: WorkspacesScope;
|
workspaces: WorkspacesScope;
|
||||||
blobs: BlobStorage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BaseProvider {
|
export class BaseProvider {
|
||||||
public readonly id: string = 'base';
|
public readonly id: string = 'base';
|
||||||
protected _workspaces!: WorkspacesScope;
|
protected _workspaces!: WorkspacesScope;
|
||||||
protected _logger!: Logger;
|
protected _logger!: Logger;
|
||||||
protected _blobs!: BlobStorage;
|
|
||||||
|
|
||||||
public constructor({ logger, workspaces, blobs }: ProviderConstructorParams) {
|
public constructor({ logger, workspaces }: ProviderConstructorParams) {
|
||||||
this._logger = (logger || defaultLogger) as Logger;
|
this._logger = (logger || defaultLogger) as Logger;
|
||||||
this._workspaces = workspaces;
|
this._workspaces = workspaces;
|
||||||
this._blobs = blobs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,19 +66,19 @@ export class BaseProvider {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getBlob(id: string): Promise<string | null> {
|
// async getBlob(id: string): Promise<string | null> {
|
||||||
return await this._blobs.get(id);
|
// return await this._blobs.get(id);
|
||||||
}
|
// }
|
||||||
|
|
||||||
async setBlob(blob: Blob): Promise<string> {
|
// async setBlob(blob: Blob): Promise<string> {
|
||||||
return await this._blobs.set(blob);
|
// return await this._blobs.set(blob);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clear all local data in provider
|
* clear all local data in provider
|
||||||
*/
|
*/
|
||||||
async clear() {
|
async clear() {
|
||||||
this._blobs.clear();
|
// this._blobs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -79,12 +79,6 @@ export class LocalProvider extends BaseProvider {
|
|||||||
meta: WorkspaceMeta
|
meta: WorkspaceMeta
|
||||||
): Promise<Workspace | undefined> {
|
): Promise<Workspace | undefined> {
|
||||||
assert(meta.name, 'Workspace name is required');
|
assert(meta.name, 'Workspace name is required');
|
||||||
if (!meta.avatar) {
|
|
||||||
// set default avatar
|
|
||||||
const blob = await getDefaultHeadImgBlob(meta.name);
|
|
||||||
const blobId = await this.setBlob(blob);
|
|
||||||
meta.avatar = (await this.getBlob(blobId)) || '';
|
|
||||||
}
|
|
||||||
this._logger('Creating affine workspace');
|
this._logger('Creating affine workspace');
|
||||||
|
|
||||||
const workspaceInfo: WS = {
|
const workspaceInfo: WS = {
|
||||||
@@ -101,7 +95,18 @@ export class LocalProvider extends BaseProvider {
|
|||||||
const workspace = new Workspace({ room: workspaceInfo.id });
|
const workspace = new Workspace({ room: workspaceInfo.id });
|
||||||
this._initWorkspaceDb(workspace);
|
this._initWorkspaceDb(workspace);
|
||||||
workspace.meta.setName(meta.name);
|
workspace.meta.setName(meta.name);
|
||||||
workspace.meta.setAvatar(meta.avatar);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this._workspaces.add(workspaceInfo);
|
this._workspaces.add(workspaceInfo);
|
||||||
this._storeWorkspaces(this._workspaces.list());
|
this._storeWorkspaces(this._workspaces.list());
|
||||||
|
|||||||
Reference in New Issue
Block a user