Skip to content

Commit 9f86a45

Browse files
authored
Load chat username/icon from current session, not persisted data (microsoft#180981)
1 parent 0a778a5 commit 9f86a45

File tree

2 files changed

+51
-25
lines changed

2 files changed

+51
-25
lines changed

src/vs/workbench/contrib/interactiveSession/common/interactiveSessionModel.ts

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,17 @@ export class InteractiveRequestModel implements IInteractiveRequestModel {
5454
return this._id;
5555
}
5656

57+
public get username(): string {
58+
return this._session.requesterUsername;
59+
}
60+
61+
public get avatarIconUri(): URI | undefined {
62+
return this._session.requesterAvatarIconUri;
63+
}
64+
5765
constructor(
58-
public readonly message: string | IInteractiveSessionReplyFollowup,
59-
public readonly username: string,
60-
public readonly avatarIconUri?: URI) {
66+
private readonly _session: InteractiveSessionModel,
67+
public readonly message: string | IInteractiveSessionReplyFollowup) {
6168
this._id = 'request_' + InteractiveRequestModel.nextId++;
6269
}
6370
}
@@ -105,11 +112,17 @@ export class InteractiveResponseModel extends Disposable implements IInteractive
105112
return this._session.providerId;
106113
}
107114

115+
public get username(): string {
116+
return this._session.responderUsername;
117+
}
118+
119+
public get avatarIconUri(): URI | undefined {
120+
return this._session.responderAvatarIconUri;
121+
}
122+
108123
constructor(
109124
private _response: IMarkdownString,
110125
private readonly _session: InteractiveSessionModel,
111-
public readonly username: string,
112-
public readonly avatarIconUri?: URI,
113126
private _isComplete: boolean = false,
114127
private _isCanceled = false,
115128
private _vote?: InteractiveSessionVoteDirection,
@@ -193,7 +206,7 @@ export interface ISerializableInteractiveSessionData {
193206
providerState: any;
194207
}
195208

196-
export type IInteractiveSessionChangeEvent = IInteractiveSessionAddRequestEvent | IInteractiveSessionAddResponseEvent | IInteractiveSessionClearEvent;
209+
export type IInteractiveSessionChangeEvent = IInteractiveSessionAddRequestEvent | IInteractiveSessionAddResponseEvent | IInteractiveSessionInitEvent;
197210

198211
export interface IInteractiveSessionAddRequestEvent {
199212
kind: 'addRequest';
@@ -205,8 +218,8 @@ export interface IInteractiveSessionAddResponseEvent {
205218
response: IInteractiveResponseModel;
206219
}
207220

208-
export interface IInteractiveSessionClearEvent {
209-
kind: 'clear';
221+
export interface IInteractiveSessionInitEvent {
222+
kind: 'initialize';
210223
}
211224

212225
export class InteractiveSessionModel extends Disposable implements IInteractiveSessionModel {
@@ -255,16 +268,37 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
255268
return this._creationDate;
256269
}
257270

271+
get requesterUsername(): string {
272+
return this._session?.requesterUsername ?? this.initialData?.requesterUsername ?? '';
273+
}
274+
275+
get responderUsername(): string {
276+
return this._session?.responderUsername ?? this.initialData?.responderUsername ?? '';
277+
}
278+
279+
private readonly _initialRequesterAvatarIconUri: URI | undefined;
280+
get requesterAvatarIconUri(): URI | undefined {
281+
return this._session?.requesterAvatarIconUri ?? this._initialRequesterAvatarIconUri;
282+
}
283+
284+
private readonly _initialResponderAvatarIconUri: URI | undefined;
285+
get responderAvatarIconUri(): URI | undefined {
286+
return this._session?.responderAvatarIconUri ?? this._initialResponderAvatarIconUri;
287+
}
288+
258289
constructor(
259290
public readonly providerId: string,
260-
initialData: ISerializableInteractiveSessionData | undefined,
291+
private readonly initialData: ISerializableInteractiveSessionData | undefined,
261292
@ILogService private readonly logService: ILogService
262293
) {
263294
super();
264295
this._sessionId = initialData ? initialData.sessionId : generateUuid();
265296
this._requests = initialData ? this._deserialize(initialData) : [];
266297
this._providerState = initialData ? initialData.providerState : undefined;
267298
this._creationDate = initialData?.creationDate ?? Date.now();
299+
300+
this._initialRequesterAvatarIconUri = initialData?.requesterAvatarIconUri && URI.revive(initialData.requesterAvatarIconUri);
301+
this._initialResponderAvatarIconUri = initialData?.responderAvatarIconUri && URI.revive(initialData.responderAvatarIconUri);
268302
}
269303

270304
private _deserialize(obj: ISerializableInteractiveSessionData): InteractiveRequestModel[] {
@@ -280,9 +314,9 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
280314
}
281315

282316
return requests.map((raw: ISerializableInteractiveSessionRequestData) => {
283-
const request = new InteractiveRequestModel(raw.message, obj.requesterUsername, obj.requesterAvatarIconUri && URI.revive(obj.requesterAvatarIconUri));
317+
const request = new InteractiveRequestModel(this, raw.message);
284318
if (raw.response || raw.responseErrorDetails) {
285-
request.response = new InteractiveResponseModel(new MarkdownString(raw.response), this, obj.responderUsername, obj.responderAvatarIconUri && URI.revive(obj.responderAvatarIconUri), true, raw.isCanceled, raw.vote, raw.providerResponseId, raw.responseErrorDetails, raw.followups);
319+
request.response = new InteractiveResponseModel(new MarkdownString(raw.response), this, true, raw.isCanceled, raw.vote, raw.providerResponseId, raw.responseErrorDetails, raw.followups);
286320
}
287321
return request;
288322
});
@@ -307,18 +341,13 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
307341
this.logService.trace('InteractiveSessionModel#acceptNewSessionState');
308342
}));
309343
}
344+
this._onDidChange.fire({ kind: 'initialize' });
310345
}
311346

312347
waitForInitialization(): Promise<void> {
313348
return this._isInitializedDeferred.p;
314349
}
315350

316-
clear(): void {
317-
this._requests.forEach(r => r.response?.dispose());
318-
this._requests = [];
319-
this._onDidChange.fire({ kind: 'clear' });
320-
}
321-
322351
getRequests(): InteractiveRequestModel[] {
323352
return this._requests;
324353
}
@@ -328,8 +357,8 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
328357
throw new Error('addRequest: No session');
329358
}
330359

331-
const request = new InteractiveRequestModel(message, this._session.requesterUsername, this._session.requesterAvatarIconUri);
332-
request.response = new InteractiveResponseModel(new MarkdownString(''), this, this._session.responderUsername, this._session.responderAvatarIconUri);
360+
const request = new InteractiveRequestModel(this, message);
361+
request.response = new InteractiveResponseModel(new MarkdownString(''), this);
333362

334363
this._requests.push(request);
335364
this._onDidChange.fire({ kind: 'addRequest', request });
@@ -342,7 +371,7 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
342371
}
343372

344373
if (!request.response) {
345-
request.response = new InteractiveResponseModel(new MarkdownString(''), this, this._session.responderUsername, this._session.responderAvatarIconUri);
374+
request.response = new InteractiveResponseModel(new MarkdownString(''), this);
346375
}
347376

348377
if (request.response.isComplete) {
@@ -368,7 +397,7 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
368397
}
369398

370399
if (!request.response) {
371-
request.response = new InteractiveResponseModel(new MarkdownString(''), this, this._session.responderUsername, this._session.responderAvatarIconUri);
400+
request.response = new InteractiveResponseModel(new MarkdownString(''), this);
372401
}
373402

374403
request.response.complete(rawResponse.errorDetails);

src/vs/workbench/contrib/interactiveSession/common/interactiveSessionViewModel.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,7 @@ export class InteractiveSessionViewModel extends Disposable implements IInteract
119119

120120
this._register(_model.onDidDispose(() => this._onDidDisposeModel.fire()));
121121
this._register(_model.onDidChange(e => {
122-
if (e.kind === 'clear') {
123-
this._items.length = 0;
124-
this._onDidChange.fire();
125-
} else if (e.kind === 'addRequest') {
122+
if (e.kind === 'addRequest') {
126123
this._items.push(new InteractiveRequestViewModel(e.request));
127124
if (e.request.response) {
128125
this.onAddResponse(e.request.response);

0 commit comments

Comments
 (0)