fix: adapt latest blocksuite

This commit is contained in:
linonetwo
2023-02-09 18:31:12 +08:00
parent 5d40c93db7
commit 42f8247599
2 changed files with 41 additions and 29 deletions

View File

@@ -1,21 +1,40 @@
import {
BlobId,
BlobProvider,
BlobURL,
} from '@blocksuite/store/dist/blob/types';
import { BlobSyncState } from '@blocksuite/store';
import * as ipcMethods from '../ipc/methods.js';
import { Signal } from '@blocksuite/store';
import { BlobOptionsGetter, Signal } from '@blocksuite/store';
import type {
BlobProvider,
BlobSyncStateChangeEvent,
BlobId,
BlobURL,
} from '@blocksuite/store/dist/persistence/blob/types.js';
// @staticImplements<BlobProviderStatic>()
export class IPCBlobProvider implements BlobProvider {
#ipc = ipcMethods;
readonly blobs: Set<string> = new Set();
#workspace: string;
readonly signals = {
blobAdded: new Signal<BlobId>(),
blobDeleted: new Signal<BlobId>(),
onBlobSyncStateChange: new Signal<BlobSyncStateChangeEvent>(),
};
private constructor(workspace: string) {
this.#workspace = workspace;
}
static async init(workspace: string): Promise<IPCBlobProvider> {
const provider = new IPCBlobProvider(workspace);
return provider;
}
get uploading() {
return false;
}
get blobs() {
// TODO: implement blob list in Octobase
return Promise.resolve([]) as Promise<string[]>;
}
async get(id: BlobId): Promise<BlobURL | null> {
const blobArray = await this.#ipc.getBlob({
id,
@@ -23,8 +42,10 @@ export class IPCBlobProvider implements BlobProvider {
// Make a Blob from the bytes
const blob = new Blob([new Uint8Array(blobArray)], { type: 'image/bmp' });
if (blob) {
this.signals.blobAdded.emit(id);
this.blobs.add(id);
this.signals.onBlobSyncStateChange.emit({
id,
state: BlobSyncState.Success,
});
}
return window.URL.createObjectURL(blob);
}
@@ -34,29 +55,18 @@ export class IPCBlobProvider implements BlobProvider {
const blobID = await this.#ipc.putBlob({
blob: Array.from(new Uint8Array(await blob.arrayBuffer())),
});
this.signals.blobAdded.emit(blobID);
this.signals.onBlobSyncStateChange.emit({
id: blobID,
state: BlobSyncState.Success,
});
return blobID;
}
// TODO: implement getAllKeys in Octobase
// private async _initBlobs() {
// const entries = await this._database.keys();
// for (const key of entries) {
// const blobId = key as BlobId;
// this.signals.blobAdded.emit(blobId);
// this.blobs.add(blobId);
// }
// }
async delete(id: BlobId): Promise<void> {
// TODO: implement blob delete in Octobase
this.signals.blobDeleted.emit(id);
this.blobs.delete(id);
}
async clear(): Promise<void> {
// TODO: implement blob clear in Octobase, need workspace id
// await this._database.clear();
this.blobs.clear();
// TODO: implement blob clear in Octobase, use workspace id #workspace
}
}

View File

@@ -99,7 +99,9 @@ export class TauriIPCProvider extends LocalProvider {
const { room } = blocksuiteWorkspace;
assert(room);
(await blocksuiteWorkspace.blobs)?.addProvider(new IPCBlobProvider());
(await blocksuiteWorkspace.blobs)?.setProvider(
await IPCBlobProvider.init(room)
);
await this.#initDocFromIPC(room, blocksuiteWorkspace);
await this.#connectDocToIPC(room, blocksuiteWorkspace);