Skip to content

Commit 7110b46

Browse files
committed
feat: watch create and delete events
1 parent cd44b14 commit 7110b46

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

src/indexer/IndexManager.ts

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class IndexManager {
4545

4646
protected indexers: IndexerInstance[] = [];
4747
protected indexStorage: IndexStorage;
48-
protected fileWatchers: Record<IndexerKey, FileSystemWatcher> = {};
48+
protected fileWatchers: Record<string, Record<IndexerKey, FileSystemWatcher>> = {};
4949

5050
public constructor() {
5151
this.indexers = [
@@ -58,10 +58,6 @@ class IndexManager {
5858
new CronIndexer(),
5959
];
6060
this.indexStorage = new IndexStorage();
61-
62-
if (Common.getActiveWorkspaceFolder()) {
63-
this.watchFiles(Common.getActiveWorkspaceFolder()!);
64-
}
6561
}
6662

6763
public getIndexers(): IndexerInstance[] {
@@ -232,23 +228,57 @@ class IndexManager {
232228
clear([indexer.getId()]);
233229
}
234230

231+
protected async removeFileFromIndex(
232+
workspaceFolder: WorkspaceFolder,
233+
file: Uri,
234+
indexer: Indexer
235+
) {
236+
const indexData = this.getIndexStorageData(indexer.getId()) || new Map();
237+
indexData.delete(file.fsPath);
238+
this.indexStorage.set(workspaceFolder, indexer.getId(), indexData);
239+
await this.indexStorage.saveIndex(workspaceFolder, indexer.getId(), indexer.getVersion());
240+
}
241+
235242
protected shouldIndex(workspaceFolder: WorkspaceFolder, index: IndexerInstance): boolean {
236243
return !this.indexStorage.hasIndex(workspaceFolder, index.getId());
237244
}
238245

239-
protected watchFiles(workspaceFolder: WorkspaceFolder) {
246+
public watchFiles(workspaceFolder: WorkspaceFolder) {
247+
Logger.logWithTime('Watching files for workspace', workspaceFolder.uri.fsPath);
248+
249+
if (!this.fileWatchers[workspaceFolder.uri.fsPath]) {
250+
this.fileWatchers[workspaceFolder.uri.fsPath] = {};
251+
}
252+
240253
for (const indexer of this.indexers) {
241254
const pattern = indexer.getPattern(workspaceFolder.uri);
242255
const patternString = typeof pattern === 'string' ? pattern : pattern.pattern;
243256

244-
if (this.fileWatchers[indexer.getId()]) {
245-
this.fileWatchers[indexer.getId()].dispose();
257+
let watcher: FileSystemWatcher | undefined =
258+
this.fileWatchers[workspaceFolder.uri.fsPath][indexer.getId()];
259+
260+
if (watcher) {
261+
watcher.dispose();
246262
}
247263

248-
this.fileWatchers[indexer.getId()] = workspace.createFileSystemWatcher(patternString);
264+
watcher = workspace.createFileSystemWatcher(patternString, false, false, false);
265+
266+
watcher.onDidChange(file => {
267+
this.indexFileInner(workspaceFolder, file, indexer);
268+
269+
Logger.logWithTime('File changed', file.fsPath);
270+
});
249271

250-
this.fileWatchers[indexer.getId()].onDidChange(file => {
272+
watcher.onDidCreate(file => {
251273
this.indexFileInner(workspaceFolder, file, indexer);
274+
275+
Logger.logWithTime('File created', file.fsPath);
276+
});
277+
278+
watcher.onDidDelete(file => {
279+
this.removeFileFromIndex(workspaceFolder, file, indexer);
280+
281+
Logger.logWithTime('File deleted', file.fsPath);
252282
});
253283
}
254284
}

src/indexer/IndexRunner.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class IndexRunner {
1717
},
1818
async progress => {
1919
await IndexManager.indexWorkspace(workspaceFolder, progress, force);
20+
IndexManager.watchFiles(workspaceFolder);
2021
}
2122
);
2223
}

0 commit comments

Comments
 (0)