@@ -14,17 +14,22 @@ export class MainThreadConsoleService implements MainThreadConsoleServiceShape {
14
14
15
15
private readonly _disposables = new DisposableStore ( ) ;
16
16
17
- // Map of language `id` to console.
18
- // Assumes each language `id` maps to at most 1 console,
19
- // which may need to be relaxed in the future.
20
- // Kept in sync with consoles in `ExtHostConsoleService`.
21
- private readonly _mainThreadConsolesByLanguageId = new Map < string , MainThreadConsole > ( ) ;
17
+ /**
18
+ * A Map of session ids to the respective console.
19
+ * Each session id maps to a single console.
20
+ * Multiple sessions could map to the same console, this happens
21
+ * when a user power-cycles the session for a console instance
22
+ * (i.e. shutdown session for console instance, then start a session for console instance)
23
+ *
24
+ * Kept in sync with consoles in `ExtHostConsoleService`
25
+ */
26
+ private readonly _mainThreadConsolesBySessionId = new Map < string , MainThreadConsole > ( ) ;
22
27
23
28
private readonly _proxy : ExtHostConsoleServiceShape ;
24
29
25
30
constructor (
26
31
extHostContext : IExtHostContext ,
27
- @IPositronConsoleService private readonly _positronConsoleService : IPositronConsoleService ,
32
+ @IPositronConsoleService private readonly _positronConsoleService : IPositronConsoleService
28
33
) {
29
34
// Create the proxy for the extension host.
30
35
this . _proxy = extHostContext . getProxy ( ExtHostPositronContext . ExtHostConsoleService ) ;
@@ -37,17 +42,17 @@ export class MainThreadConsoleService implements MainThreadConsoleServiceShape {
37
42
this . _proxy . $onDidChangeConsoleWidth ( newWidth ) ;
38
43
} ) ) ;
39
44
40
- // Forward new positron console language id to the extension host, and then register it
45
+ // Forward new positron console session id to the extension host, and then register it
41
46
// in the main thread too
42
47
this . _disposables . add (
43
48
this . _positronConsoleService . onDidStartPositronConsoleInstance ( ( console ) => {
44
- const id = console . session . runtimeMetadata . languageId ;
49
+ const sessionId = console . session . sessionId ;
45
50
46
51
// First update ext host
47
- this . _proxy . $addConsole ( id ) ;
52
+ this . _proxy . $addConsole ( sessionId ) ;
48
53
49
54
// Then update main thread
50
- this . addConsole ( id , console ) ;
55
+ this . addConsole ( sessionId , console ) ;
51
56
} )
52
57
) ;
53
58
@@ -60,7 +65,7 @@ export class MainThreadConsoleService implements MainThreadConsoleServiceShape {
60
65
//
61
66
// this._disposables.add(
62
67
// this._positronConsoleService.onDidRemovePositronConsoleInstance((console) => {
63
- // const id = console.runtime.metadata.languageId ;
68
+ // const id = console.session.sessionId ;
64
69
//
65
70
// // First update ext host
66
71
// this._proxy.$removeConsole(id);
@@ -76,12 +81,13 @@ export class MainThreadConsoleService implements MainThreadConsoleServiceShape {
76
81
}
77
82
78
83
private getConsoleForLanguage ( id : string ) : MainThreadConsole | undefined {
79
- return this . _mainThreadConsolesByLanguageId . get ( id ) ;
84
+ return Array . from ( this . _mainThreadConsolesBySessionId . values ( ) )
85
+ . find ( console => console . getLanguageId ( ) === id ) ;
80
86
}
81
87
82
- private addConsole ( id : string , console : IPositronConsoleInstance ) {
88
+ private addConsole ( sessionId : string , console : IPositronConsoleInstance ) {
83
89
const mainThreadConsole = new MainThreadConsole ( console ) ;
84
- this . _mainThreadConsolesByLanguageId . set ( id , mainThreadConsole ) ;
90
+ this . _mainThreadConsolesBySessionId . set ( sessionId , mainThreadConsole ) ;
85
91
}
86
92
87
93
// TODO:
0 commit comments