Skip to content

Commit 86637ca

Browse files
authored
make progress signal scheduler generic (microsoft#210582)
1 parent 2372c8c commit 86637ca

File tree

2 files changed

+35
-26
lines changed

2 files changed

+35
-26
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { RunOnceScheduler } from 'vs/base/common/async';
7+
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
8+
import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService';
9+
10+
/**
11+
* Schedules a signal to play while progress is happening.
12+
*/
13+
export class AccessibilityProgressSignalScheduler extends Disposable {
14+
private _scheduler: RunOnceScheduler;
15+
private _signalLoop: IDisposable | undefined;
16+
constructor(msLoopTime: number, msDelayTime: number, @IAccessibilitySignalService private readonly _accessibilitySignalService: IAccessibilitySignalService) {
17+
super();
18+
this._scheduler = new RunOnceScheduler(() => {
19+
this._signalLoop = this._accessibilitySignalService.playSignalLoop(AccessibilitySignal.chatResponsePending, msLoopTime);
20+
}, msDelayTime);
21+
this._scheduler.schedule();
22+
}
23+
override dispose(): void {
24+
super.dispose();
25+
this._signalLoop?.dispose();
26+
this._scheduler.dispose();
27+
}
28+
}
29+

src/vs/workbench/contrib/chat/browser/chatAccessibilityService.ts

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { status } from 'vs/base/browser/ui/aria/aria';
7-
import { RunOnceScheduler } from 'vs/base/common/async';
8-
import { Disposable, DisposableMap, IDisposable } from 'vs/base/common/lifecycle';
7+
import { Disposable, DisposableMap } from 'vs/base/common/lifecycle';
98
import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService';
109
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
10+
import { AccessibilityProgressSignalScheduler } from 'vs/platform/accessibilitySignal/browser/progressAccessibilitySignalScheduler';
1111
import { IChatAccessibilityService } from 'vs/workbench/contrib/chat/browser/chat';
1212
import { IChatResponseViewModel } from 'vs/workbench/contrib/chat/common/chatViewModel';
1313

14+
const CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS = 5000;
15+
const CHAT_RESPONSE_PENDING_ALLOWANCE_MS = 4000;
1416
export class ChatAccessibilityService extends Disposable implements IChatAccessibilityService {
1517

1618
declare readonly _serviceBrand: undefined;
1719

18-
private _pendingSignalMap: DisposableMap<number, AccessibilitySignalScheduler> = this._register(new DisposableMap());
20+
private _pendingSignalMap: DisposableMap<number, AccessibilityProgressSignalScheduler> = this._register(new DisposableMap());
1921

2022
private _requestId: number = 0;
2123

@@ -25,7 +27,7 @@ export class ChatAccessibilityService extends Disposable implements IChatAccessi
2527
acceptRequest(): number {
2628
this._requestId++;
2729
this._accessibilitySignalService.playSignal(AccessibilitySignal.chatRequestSent, { allowManyInParallel: true });
28-
this._pendingSignalMap.set(this._requestId, this._instantiationService.createInstance(AccessibilitySignalScheduler));
30+
this._pendingSignalMap.set(this._requestId, this._instantiationService.createInstance(AccessibilityProgressSignalScheduler, CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS, CHAT_RESPONSE_PENDING_ALLOWANCE_MS));
2931
return this._requestId;
3032
}
3133
acceptResponse(response: IChatResponseViewModel | string | undefined, requestId: number): void {
@@ -41,25 +43,3 @@ export class ChatAccessibilityService extends Disposable implements IChatAccessi
4143
}
4244
}
4345

44-
const CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS = 5000;
45-
const CHAT_RESPONSE_PENDING_ALLOWANCE_MS = 4000;
46-
/**
47-
* Schedules an audio cue to play when a chat response is pending for too long.
48-
*/
49-
class AccessibilitySignalScheduler extends Disposable {
50-
private _scheduler: RunOnceScheduler;
51-
private _signalLoop: IDisposable | undefined;
52-
constructor(@IAccessibilitySignalService private readonly _accessibilitySignalService: IAccessibilitySignalService) {
53-
super();
54-
this._scheduler = new RunOnceScheduler(() => {
55-
this._signalLoop = this._accessibilitySignalService.playSignalLoop(AccessibilitySignal.chatResponsePending, CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS);
56-
}, CHAT_RESPONSE_PENDING_ALLOWANCE_MS);
57-
this._scheduler.schedule();
58-
}
59-
override dispose(): void {
60-
super.dispose();
61-
this._signalLoop?.dispose();
62-
this._scheduler.cancel();
63-
this._scheduler.dispose();
64-
}
65-
}

0 commit comments

Comments
 (0)