refactor: replace with data source (#4447)

This commit is contained in:
Alex Yang
2023-09-21 12:31:17 -05:00
committed by GitHub
parent 98f6b3e685
commit d09f6fb7cc
8 changed files with 33 additions and 31 deletions

View File

@@ -1,5 +1,5 @@
import { DebugLogger } from '@affine/debug';
import type { DatasourceDocAdapter } from '@affine/y-provider';
import type { DocDataSource } from '@affine/y-provider';
import type { Socket } from 'socket.io-client';
import { Manager } from 'socket.io-client';
import {
@@ -129,7 +129,7 @@ export const createAffineDataSource = (
socket.disconnect();
};
},
} satisfies DatasourceDocAdapter & { readonly socket: Socket };
} satisfies DocDataSource & { readonly socket: Socket };
};
function setupAffineAwareness(

View File

@@ -10,10 +10,10 @@ import type { DocProviderCreator } from '@blocksuite/store';
import { Workspace } from '@blocksuite/store';
import { createBroadcastChannelProvider } from '@blocksuite/store/providers/broadcast-channel';
import {
createIndexedDBDatasource,
createIndexedDBProvider as create,
downloadBinary,
} from '@toeverything/y-indexeddb';
import type { Doc } from 'yjs';
import { encodeStateVector } from 'yjs';
import { createAffineDataSource } from '../affine';
import {
@@ -87,18 +87,13 @@ const createIndexedDBDownloadProvider: DocProviderCreator = (
id,
doc
): LocalIndexedDBDownloadProvider => {
const datasource = createIndexedDBDatasource({});
let _resolve: () => void;
let _reject: (error: unknown) => void;
const promise = new Promise<void>((resolve, reject) => {
_resolve = resolve;
_reject = reject;
});
async function downloadAndApply(doc: Doc) {
const binary = await downloadBinary(doc.guid);
if (binary) {
Y.applyUpdate(doc, binary, indexedDBDownloadOrigin);
}
}
return {
flavour: 'local-indexeddb',
@@ -111,7 +106,17 @@ const createIndexedDBDownloadProvider: DocProviderCreator = (
},
sync: () => {
logger.info('sync indexeddb provider', id);
downloadAndApply(doc).then(_resolve).catch(_reject);
datasource
.queryDocState(doc.guid, {
stateVector: encodeStateVector(doc),
})
.then(docState => {
if (docState) {
Y.applyUpdate(doc, docState.missing, indexedDBDownloadOrigin);
}
_resolve();
})
.catch(_reject);
},
};
};

View File

@@ -2,10 +2,7 @@ import type {
SQLiteDBDownloadProvider,
SQLiteProvider,
} from '@affine/env/workspace';
import {
createLazyProvider,
type DatasourceDocAdapter,
} from '@affine/y-provider';
import { createLazyProvider, type DocDataSource } from '@affine/y-provider';
import { assertExists } from '@blocksuite/global/utils';
import type { DocProviderCreator } from '@blocksuite/store';
import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store';
@@ -17,7 +14,7 @@ const Y = BlockSuiteWorkspace.Y;
const sqliteOrigin = 'sqlite-provider-origin';
const createDatasource = (workspaceId: string): DatasourceDocAdapter => {
const createDatasource = (workspaceId: string): DocDataSource => {
if (!window.apis?.db) {
throw new Error('sqlite datasource is not available');
}