2189
2190
syncPendingRequestsFromRemote(sessionResource: URI, requests: readonly IRemotePendingRequest[]): void {
2191
>
const model = this._sessionModels.get(sessionResource) as ChatModel | undefined;
chatServiceImpl.ts
2192
>
if (!model) {
2193
return;
2194
}
2196
>
const existing = model.getPendingRequests();
2197
>
const existingById = new Map(existing.map(request => [request.request.id, request]));
2198
>
const reconciled: IChatPendingRequest[] = requests.map(remote => {
2199
>
const variableData = remote.variableData ?? { variables: [] };
2200
>
const local = existingById.get(remote.id);
2201
>
if (local && local.request.message.text === remote.message && equals(local.request.variableData, variableData)) {
2202
>
return local.kind === remote.kind ? local : { ...local, kind: remote.kind };
2203
>
}
2204
>
const parsedRequest = this.parseChatRequest(sessionResource, remote.message, model.initialLocation, undefined);
2205
>
const requestModel = new ChatRequestModel({
2206
>
session: model,
2207
>
message: parsedRequest,
2208
>
variableData,
2209
>
timestamp: remote.timestamp,
2210
>
attachedContext: variableData.variables.slice(),
2211
>
restoredId: remote.id,
2212
>
});
2213
>
return { request: requestModel, kind: remote.kind, sendOptions: local?.sendOptions ?? {} };
2214
>
});
2215
>
2216
>
if (existing.length === reconciled.length && reconciled.every((request, index) => existing[index] === request)) {
2217
return;
2218
}
2220
>
const reconciledIds = new Set(reconciled.map(request => request.request.id));
2221
>
model.replacePendingRequests(reconciled);
2222
>
2223
>
for (const local of existing) {
2224
>
if (reconciledIds.has(local.request.id)) {
2225
>
continue;
2226
>
}
2227
const deferred = this._queuedRequestDeferreds.get(local.request.id);
2228
if (deferred) {