@@ -54,10 +54,17 @@ export class InteractiveRequestModel implements IInteractiveRequestModel {
54
54
return this . _id ;
55
55
}
56
56
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
+
57
65
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 ) {
61
68
this . _id = 'request_' + InteractiveRequestModel . nextId ++ ;
62
69
}
63
70
}
@@ -105,11 +112,17 @@ export class InteractiveResponseModel extends Disposable implements IInteractive
105
112
return this . _session . providerId ;
106
113
}
107
114
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
+
108
123
constructor (
109
124
private _response : IMarkdownString ,
110
125
private readonly _session : InteractiveSessionModel ,
111
- public readonly username : string ,
112
- public readonly avatarIconUri ?: URI ,
113
126
private _isComplete : boolean = false ,
114
127
private _isCanceled = false ,
115
128
private _vote ?: InteractiveSessionVoteDirection ,
@@ -193,7 +206,7 @@ export interface ISerializableInteractiveSessionData {
193
206
providerState : any ;
194
207
}
195
208
196
- export type IInteractiveSessionChangeEvent = IInteractiveSessionAddRequestEvent | IInteractiveSessionAddResponseEvent | IInteractiveSessionClearEvent ;
209
+ export type IInteractiveSessionChangeEvent = IInteractiveSessionAddRequestEvent | IInteractiveSessionAddResponseEvent | IInteractiveSessionInitEvent ;
197
210
198
211
export interface IInteractiveSessionAddRequestEvent {
199
212
kind : 'addRequest' ;
@@ -205,8 +218,8 @@ export interface IInteractiveSessionAddResponseEvent {
205
218
response : IInteractiveResponseModel ;
206
219
}
207
220
208
- export interface IInteractiveSessionClearEvent {
209
- kind : 'clear ' ;
221
+ export interface IInteractiveSessionInitEvent {
222
+ kind : 'initialize ' ;
210
223
}
211
224
212
225
export class InteractiveSessionModel extends Disposable implements IInteractiveSessionModel {
@@ -255,16 +268,37 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
255
268
return this . _creationDate ;
256
269
}
257
270
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
+
258
289
constructor (
259
290
public readonly providerId : string ,
260
- initialData : ISerializableInteractiveSessionData | undefined ,
291
+ private readonly initialData : ISerializableInteractiveSessionData | undefined ,
261
292
@ILogService private readonly logService : ILogService
262
293
) {
263
294
super ( ) ;
264
295
this . _sessionId = initialData ? initialData . sessionId : generateUuid ( ) ;
265
296
this . _requests = initialData ? this . _deserialize ( initialData ) : [ ] ;
266
297
this . _providerState = initialData ? initialData . providerState : undefined ;
267
298
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 ) ;
268
302
}
269
303
270
304
private _deserialize ( obj : ISerializableInteractiveSessionData ) : InteractiveRequestModel [ ] {
@@ -280,9 +314,9 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
280
314
}
281
315
282
316
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 ) ;
284
318
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 ) ;
286
320
}
287
321
return request ;
288
322
} ) ;
@@ -307,18 +341,13 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
307
341
this . logService . trace ( 'InteractiveSessionModel#acceptNewSessionState' ) ;
308
342
} ) ) ;
309
343
}
344
+ this . _onDidChange . fire ( { kind : 'initialize' } ) ;
310
345
}
311
346
312
347
waitForInitialization ( ) : Promise < void > {
313
348
return this . _isInitializedDeferred . p ;
314
349
}
315
350
316
- clear ( ) : void {
317
- this . _requests . forEach ( r => r . response ?. dispose ( ) ) ;
318
- this . _requests = [ ] ;
319
- this . _onDidChange . fire ( { kind : 'clear' } ) ;
320
- }
321
-
322
351
getRequests ( ) : InteractiveRequestModel [ ] {
323
352
return this . _requests ;
324
353
}
@@ -328,8 +357,8 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
328
357
throw new Error ( 'addRequest: No session' ) ;
329
358
}
330
359
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 ) ;
333
362
334
363
this . _requests . push ( request ) ;
335
364
this . _onDidChange . fire ( { kind : 'addRequest' , request } ) ;
@@ -342,7 +371,7 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
342
371
}
343
372
344
373
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 ) ;
346
375
}
347
376
348
377
if ( request . response . isComplete ) {
@@ -368,7 +397,7 @@ export class InteractiveSessionModel extends Disposable implements IInteractiveS
368
397
}
369
398
370
399
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 ) ;
372
401
}
373
402
374
403
request . response . complete ( rawResponse . errorDetails ) ;
0 commit comments