mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-02 18:09:58 +08:00
feat(nbstore): add blob sync frontend (#9084)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { difference } from 'lodash-es';
|
||||
|
||||
import type { BlobStorage } from '../../storage';
|
||||
import type { BlobRecord, BlobStorage } from '../../storage';
|
||||
import { MANUALLY_STOP, throwIfAborted } from '../../utils/throw-if-aborted';
|
||||
|
||||
export class BlobSyncEngine {
|
||||
@@ -11,6 +11,29 @@ export class BlobSyncEngine {
|
||||
readonly remotes: BlobStorage[]
|
||||
) {}
|
||||
|
||||
async downloadBlob(blobId: string, signal?: AbortSignal) {
|
||||
const localBlob = await this.local.get(blobId, signal);
|
||||
if (localBlob) {
|
||||
return localBlob;
|
||||
}
|
||||
|
||||
for (const storage of this.remotes) {
|
||||
const data = await storage.get(blobId, signal);
|
||||
if (data) {
|
||||
await this.local.set(data, signal);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async uploadBlob(blob: BlobRecord, signal?: AbortSignal) {
|
||||
await this.local.set(blob);
|
||||
await Promise.allSettled(
|
||||
this.remotes.map(remote => remote.set(blob, signal))
|
||||
);
|
||||
}
|
||||
|
||||
private async sync(signal?: AbortSignal) {
|
||||
throwIfAborted(signal);
|
||||
|
||||
@@ -94,4 +117,9 @@ export class BlobSyncEngine {
|
||||
this.abort?.abort();
|
||||
this.abort = null;
|
||||
}
|
||||
|
||||
addPriority(_id: string, _priority: number): () => void {
|
||||
// TODO: implement
|
||||
return () => {};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user