Skip to content

Commit 274671e

Browse files
authored
Merge pull request microsoft#250728 from microsoft/aeschli/quintessential-llama
Polish fileLocator.createFilesUpdatedEvent method
2 parents 4097467 + 76f0cc5 commit 274671e

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export class PromptsService extends Disposable implements IPromptsService {
9797
*/
9898
public get onDidChangeCustomChatModes(): Event<void> {
9999
if (!this.onDidChangeCustomChatModesEvent) {
100-
this.onDidChangeCustomChatModesEvent = this.fileLocator.getFilesUpdatedEvent(PromptsType.mode);
100+
this.onDidChangeCustomChatModesEvent = this._register(this.fileLocator.createFilesUpdatedEvent(PromptsType.mode)).event;
101101
}
102102
return this.onDidChangeCustomChatModesEvent;
103103
}

src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { isCancellationError } from '../../../../../../base/common/errors.js';
2121
import { TPromptsStorage } from '../service/types.js';
2222
import { IUserDataProfileService } from '../../../../../services/userDataProfile/common/userDataProfile.js';
2323
import { Emitter, Event } from '../../../../../../base/common/event.js';
24-
import { Disposable } from '../../../../../../base/common/lifecycle.js';
24+
import { Disposable, DisposableStore } from '../../../../../../base/common/lifecycle.js';
2525

2626
/**
2727
* Utility class to locate prompt files.
@@ -57,18 +57,21 @@ export class PromptFilesLocator extends Disposable {
5757
return files.filter(file => getPromptFileType(file) === type);
5858
}
5959

60-
public getFilesUpdatedEvent(type: PromptsType): Event<void> {
61-
const eventEmitter = this._register(new Emitter<void>());
60+
public createFilesUpdatedEvent(type: PromptsType): { readonly event: Event<void>; dispose: () => void } {
61+
const disoposables = new DisposableStore();
62+
const eventEmitter = disoposables.add(new Emitter<void>());
6263
const key = getPromptFileLocationsConfigKey(type);
64+
const userDataFolder = this.userDataService.currentProfile.promptsHome;
65+
6366
let parentFolders = this.getLocalParentFolders(type).map(folder => folder.parent);
64-
this._register(this.configService.onDidChangeConfiguration(e => {
67+
disoposables.add(this.configService.onDidChangeConfiguration(e => {
6568
if (e.affectsConfiguration(key)) {
6669
parentFolders = this.getLocalParentFolders(type).map(folder => folder.parent);
6770
eventEmitter.fire();
6871
}
6972
}));
70-
this._register(this.fileService.onDidFilesChange(e => {
71-
if (e.affects(this.userDataService.currentProfile.promptsHome)) {
73+
disoposables.add(this.fileService.onDidFilesChange(e => {
74+
if (e.contains(userDataFolder)) {
7275
eventEmitter.fire();
7376
return;
7477
}
@@ -77,7 +80,8 @@ export class PromptFilesLocator extends Disposable {
7780
return;
7881
}
7982
}));
80-
return eventEmitter.event;
83+
disoposables.add(this.fileService.watch(userDataFolder));
84+
return { event: eventEmitter.event, dispose: () => disoposables.dispose() };
8185
}
8286

8387
/**

0 commit comments

Comments
 (0)