Skip to content

Commit b204c07

Browse files
committed
More sync edge case fixes
1 parent d1570a6 commit b204c07

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

client/spaces/evented_space_primitives.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,16 @@ export class EventedSpacePrimitives implements SpacePrimitives {
7878
// Some other operation (read, write, list, meta) is already going on
7979
// this will likely trigger events, so let's not worry about any of that and avoid race condition and inconsistent data.
8080
console.info(
81-
"alreadyFetching is on, skipping even triggering for fetchFileList.",
81+
"operationInProgress, deferring event processing for fetchFileList.",
8282
);
83-
return this.wrapped.fetchFileList();
83+
const result = await this.wrapped.fetchFileList();
84+
// Schedule a retry after current operation completes
85+
setTimeout(() => {
86+
if (!this.operationInProgress) {
87+
void this.fetchFileList();
88+
}
89+
}, 50);
90+
return result;
8491
}
8592
if (!this.enabled) {
8693
return this.wrapped.fetchFileList();

plugs/sync/sync.plug.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ functions:
1515
path: "./sync.ts:spaceSyncComplete"
1616
events:
1717
- "service-worker:space-sync-complete"
18+
fileSyncComplete:
19+
path: "./sync.ts:fileSyncComplete"
20+
events:
21+
- "service-worker:file-sync-complete"
1822
updateSyncStatus:
1923
path: "./sync.ts:updateSyncStatus"
2024
events:

plugs/sync/sync.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ export async function spaceSyncComplete(message: { operations: number }) {
2626
void index.ensureFullIndex();
2727
}
2828

29+
export async function fileSyncComplete(
30+
message: { path: string; operations: number },
31+
) {
32+
if (message.operations > 0) {
33+
// Re-read the specific file's metadata to trigger file:changed event
34+
await space.getFileMeta(message.path);
35+
}
36+
}
37+
2938
export async function updateSyncStatus(event: {
3039
status: {
3140
filesProcessed: number;

0 commit comments

Comments
 (0)