|
@@ -144,7 +144,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
|
|
|
}
|
|
}
|
|
|
break
|
|
break
|
|
|
}
|
|
}
|
|
|
- case "session.updated":
|
|
|
|
|
|
|
+ case "session.updated": {
|
|
|
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id)
|
|
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id)
|
|
|
if (result.found) {
|
|
if (result.found) {
|
|
|
setStore("session", result.index, reconcile(event.properties.info))
|
|
setStore("session", result.index, reconcile(event.properties.info))
|
|
@@ -157,6 +157,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
|
|
|
}),
|
|
}),
|
|
|
)
|
|
)
|
|
|
break
|
|
break
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
case "session.status": {
|
|
case "session.status": {
|
|
|
setStore("session_status", event.properties.sessionID, event.properties.status)
|
|
setStore("session_status", event.properties.sessionID, event.properties.status)
|
|
@@ -288,6 +289,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
|
|
|
bootstrap()
|
|
bootstrap()
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+ const fullSyncedSessions = new Set<string>()
|
|
|
const result = {
|
|
const result = {
|
|
|
data: store,
|
|
data: store,
|
|
|
set: setStore,
|
|
set: setStore,
|
|
@@ -314,16 +316,13 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
|
|
|
return last.time.completed ? "idle" : "working"
|
|
return last.time.completed ? "idle" : "working"
|
|
|
},
|
|
},
|
|
|
async sync(sessionID: string) {
|
|
async sync(sessionID: string) {
|
|
|
- if (store.message[sessionID]) return
|
|
|
|
|
- const now = Date.now()
|
|
|
|
|
- console.log("syncing", sessionID)
|
|
|
|
|
|
|
+ if (fullSyncedSessions.has(sessionID)) return
|
|
|
const [session, messages, todo, diff] = await Promise.all([
|
|
const [session, messages, todo, diff] = await Promise.all([
|
|
|
sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }),
|
|
sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }),
|
|
|
sdk.client.session.messages({ path: { id: sessionID }, query: { limit: 100 } }),
|
|
sdk.client.session.messages({ path: { id: sessionID }, query: { limit: 100 } }),
|
|
|
sdk.client.session.todo({ path: { id: sessionID } }),
|
|
sdk.client.session.todo({ path: { id: sessionID } }),
|
|
|
sdk.client.session.diff({ path: { id: sessionID } }),
|
|
sdk.client.session.diff({ path: { id: sessionID } }),
|
|
|
])
|
|
])
|
|
|
- console.log("fetched in " + (Date.now() - now), sessionID)
|
|
|
|
|
setStore(
|
|
setStore(
|
|
|
produce((draft) => {
|
|
produce((draft) => {
|
|
|
const match = Binary.search(draft.session, sessionID, (s) => s.id)
|
|
const match = Binary.search(draft.session, sessionID, (s) => s.id)
|
|
@@ -337,7 +336,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
|
|
|
draft.session_diff[sessionID] = diff.data ?? []
|
|
draft.session_diff[sessionID] = diff.data ?? []
|
|
|
}),
|
|
}),
|
|
|
)
|
|
)
|
|
|
- console.log("synced in " + (Date.now() - now), sessionID)
|
|
|
|
|
|
|
+ fullSyncedSessions.add(sessionID)
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
bootstrap,
|
|
bootstrap,
|