| 497 | return last.time.completed ? "idle" : "working" |
| 498 | }, |
| 499 | async sync(sessionID: string) { |
| 500 | if (fullSyncedSessions.has(sessionID)) return |
| 501 | const [session, messages, todo, diff] = await Promise.all([ |
| 502 | sdk.client.session.get({ sessionID }, { throwOnError: true }), |
| 503 | sdk.client.session.messages({ sessionID, limit: 100 }), |
| 504 | sdk.client.session.todo({ sessionID }), |
| 505 | sdk.client.session.diff({ sessionID }), |
| 506 | ]) |
| 507 | setStore( |
| 508 | produce((draft) => { |
| 509 | const match = Binary.search(draft.session, sessionID, (s) => s.id) |
| 510 | if (match.found) draft.session[match.index] = session.data! |
| 511 | if (!match.found) draft.session.splice(match.index, 0, session.data!) |
| 512 | draft.todo[sessionID] = todo.data ?? [] |
| 513 | draft.message[sessionID] = (messages.data ?? []).map((x) => x.info) |
| 514 | for (const message of messages.data ?? []) { |
| 515 | draft.part[message.info.id] = message.parts |
| 516 | } |
| 517 | draft.session_diff[sessionID] = diff.data ?? [] |
| 518 | }), |
| 519 | ) |
| 520 | fullSyncedSessions.add(sessionID) |
| 521 | }, |
| 522 | }, |
| 523 | bootstrap, |
| 524 | } |