mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-07 09:21:24 +08:00
fix: adapt latest blocksuite
This commit is contained in:
@@ -1,21 +1,40 @@
|
|||||||
import {
|
import { BlobSyncState } from '@blocksuite/store';
|
||||||
BlobId,
|
|
||||||
BlobProvider,
|
|
||||||
BlobURL,
|
|
||||||
} from '@blocksuite/store/dist/blob/types';
|
|
||||||
import * as ipcMethods from '../ipc/methods.js';
|
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 {
|
export class IPCBlobProvider implements BlobProvider {
|
||||||
#ipc = ipcMethods;
|
#ipc = ipcMethods;
|
||||||
|
|
||||||
readonly blobs: Set<string> = new Set();
|
#workspace: string;
|
||||||
|
|
||||||
readonly signals = {
|
readonly signals = {
|
||||||
blobAdded: new Signal<BlobId>(),
|
onBlobSyncStateChange: new Signal<BlobSyncStateChangeEvent>(),
|
||||||
blobDeleted: new Signal<BlobId>(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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> {
|
async get(id: BlobId): Promise<BlobURL | null> {
|
||||||
const blobArray = await this.#ipc.getBlob({
|
const blobArray = await this.#ipc.getBlob({
|
||||||
id,
|
id,
|
||||||
@@ -23,8 +42,10 @@ export class IPCBlobProvider implements BlobProvider {
|
|||||||
// Make a Blob from the bytes
|
// Make a Blob from the bytes
|
||||||
const blob = new Blob([new Uint8Array(blobArray)], { type: 'image/bmp' });
|
const blob = new Blob([new Uint8Array(blobArray)], { type: 'image/bmp' });
|
||||||
if (blob) {
|
if (blob) {
|
||||||
this.signals.blobAdded.emit(id);
|
this.signals.onBlobSyncStateChange.emit({
|
||||||
this.blobs.add(id);
|
id,
|
||||||
|
state: BlobSyncState.Success,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return window.URL.createObjectURL(blob);
|
return window.URL.createObjectURL(blob);
|
||||||
}
|
}
|
||||||
@@ -34,29 +55,18 @@ export class IPCBlobProvider implements BlobProvider {
|
|||||||
const blobID = await this.#ipc.putBlob({
|
const blobID = await this.#ipc.putBlob({
|
||||||
blob: Array.from(new Uint8Array(await blob.arrayBuffer())),
|
blob: Array.from(new Uint8Array(await blob.arrayBuffer())),
|
||||||
});
|
});
|
||||||
this.signals.blobAdded.emit(blobID);
|
this.signals.onBlobSyncStateChange.emit({
|
||||||
|
id: blobID,
|
||||||
|
state: BlobSyncState.Success,
|
||||||
|
});
|
||||||
return blobID;
|
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> {
|
async delete(id: BlobId): Promise<void> {
|
||||||
// TODO: implement blob delete in Octobase
|
// TODO: implement blob delete in Octobase
|
||||||
this.signals.blobDeleted.emit(id);
|
|
||||||
this.blobs.delete(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async clear(): Promise<void> {
|
async clear(): Promise<void> {
|
||||||
// TODO: implement blob clear in Octobase, need workspace id
|
// TODO: implement blob clear in Octobase, use workspace id #workspace
|
||||||
// await this._database.clear();
|
|
||||||
this.blobs.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,9 @@ export class TauriIPCProvider extends LocalProvider {
|
|||||||
const { room } = blocksuiteWorkspace;
|
const { room } = blocksuiteWorkspace;
|
||||||
assert(room);
|
assert(room);
|
||||||
|
|
||||||
(await blocksuiteWorkspace.blobs)?.addProvider(new IPCBlobProvider());
|
(await blocksuiteWorkspace.blobs)?.setProvider(
|
||||||
|
await IPCBlobProvider.init(room)
|
||||||
|
);
|
||||||
await this.#initDocFromIPC(room, blocksuiteWorkspace);
|
await this.#initDocFromIPC(room, blocksuiteWorkspace);
|
||||||
await this.#connectDocToIPC(room, blocksuiteWorkspace);
|
await this.#connectDocToIPC(room, blocksuiteWorkspace);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user