mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 13:25:12 +00:00
fix: adapt latest blocksuite
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user