mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 20:38:52 +00:00
refactor: replace with data source (#4447)
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user