Transcript Incremental Projection
Nucleic-Session: 0FFD007B-0696-4517-9429-129C7B0FD5AC Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
@@ -584,6 +584,12 @@ final class HostConnection {
|
|||||||
// Session-transfer replies (mesh P5) only reach a *source* Mac; a phone is never one.
|
// Session-transfer replies (mesh P5) only reach a *source* Mac; a phone is never one.
|
||||||
break
|
break
|
||||||
case .transcriptChunk(let chunk):
|
case .transcriptChunk(let chunk):
|
||||||
|
// A slice of a *background prefetch*: accumulate it whole — it never touches the
|
||||||
|
// open transcript's cursor/dedup state, which belongs to the on-screen session.
|
||||||
|
if chunk.requestID == prefetchRequestID {
|
||||||
|
if chunk.sessionID == prefetchSessionID { prefetchEvents.append(contentsOf: chunk.events) }
|
||||||
|
break
|
||||||
|
}
|
||||||
// One ordered slice of the full-history fetch we started on open. Match on request id so
|
// One ordered slice of the full-history fetch we started on open. Match on request id so
|
||||||
// a stale batch from a previous open (session switched underneath us) is ignored.
|
// a stale batch from a previous open (session switched underneath us) is ignored.
|
||||||
guard chunk.requestID == transcriptFetchRequestID, chunk.sessionID == openSessionID else { break }
|
guard chunk.requestID == transcriptFetchRequestID, chunk.sessionID == openSessionID else { break }
|
||||||
@@ -595,10 +601,12 @@ final class HostConnection {
|
|||||||
if let maxSeq = chunk.events.map(\.seq).max() { openMaxSeq = max(openMaxSeq ?? 0, maxSeq) }
|
if let maxSeq = chunk.events.map(\.seq).max() { openMaxSeq = max(openMaxSeq ?? 0, maxSeq) }
|
||||||
if !fresh.isEmpty { callbacks.openBackfill(EventBatch(sessionID: chunk.sessionID, events: fresh)) }
|
if !fresh.isEmpty { callbacks.openBackfill(EventBatch(sessionID: chunk.sessionID, events: fresh)) }
|
||||||
case .transcriptFetchComplete(let done):
|
case .transcriptFetchComplete(let done):
|
||||||
|
if done.requestID == prefetchRequestID { finishPrefetch(delivering: true); break }
|
||||||
// Terminal success — every batch shipped. Clear the in-flight id; the cursor/dedup state
|
// Terminal success — every batch shipped. Clear the in-flight id; the cursor/dedup state
|
||||||
// is already advanced by the chunks above.
|
// is already advanced by the chunks above.
|
||||||
if done.requestID == transcriptFetchRequestID { transcriptFetchRequestID = nil }
|
if done.requestID == transcriptFetchRequestID { transcriptFetchRequestID = nil }
|
||||||
case .transcriptUnavailable(let un):
|
case .transcriptUnavailable(let un):
|
||||||
|
if un.requestID == prefetchRequestID { finishPrefetch(delivering: false); break }
|
||||||
// The host holds no transcript for this session (or can't serve the format). The cold tail
|
// The host holds no transcript for this session (or can't serve the format). The cold tail
|
||||||
// still shows; there's just no deeper history to add. Clear the in-flight id.
|
// still shows; there's just no deeper history to add. Clear the in-flight id.
|
||||||
if un.requestID == transcriptFetchRequestID { transcriptFetchRequestID = nil }
|
if un.requestID == transcriptFetchRequestID { transcriptFetchRequestID = nil }
|
||||||
|
|||||||
Reference in New Issue
Block a user