Stop watching for sqlproj updates after the file is closed (#12311)

* stop watching for sqlproj updates after the file is closed

* remove watcher if project is closed
This commit is contained in:
Kim Santiago
2020-09-15 17:28:04 -07:00
committed by GitHub
parent 47e86e6133
commit eaaaae0a83

View File

@@ -39,6 +39,7 @@ export class ProjectsController {
private buildHelper: BuildHelper;
projects: Project[] = [];
projFileWatchers = new Map<string, vscode.FileSystemWatcher>();
constructor(projTreeViewProvider: SqlDatabaseProjectTreeViewProvider) {
this.projectTreeViewProvider = projTreeViewProvider;
@@ -166,6 +167,12 @@ export class ProjectsController {
public closeProject(treeNode: BaseProjectTreeItem) {
const project = this.getProjectFromContext(treeNode);
this.projects = this.projects.filter((e) => { return e !== project; });
if (this.projFileWatchers.has(project.projectFilePath)) {
this.projFileWatchers.get(project.projectFilePath)!.dispose();
this.projFileWatchers.delete(project.projectFilePath);
}
this.refreshProjectsTree();
}
@@ -442,6 +449,7 @@ export class ProjectsController {
try {
await vscode.commands.executeCommand(constants.vscodeOpenCommand, vscode.Uri.file(project.projectFilePath));
const projFileWatcher: vscode.FileSystemWatcher = vscode.workspace.createFileSystemWatcher(project.projectFilePath);
this.projFileWatchers.set(project.projectFilePath, projFileWatcher);
projFileWatcher.onDidChange(async (projectFileUri: vscode.Uri) => {
const result = await vscode.window.showInformationMessage(constants.reloadProject, constants.yesString, constants.noString);
@@ -450,6 +458,15 @@ export class ProjectsController {
this.reloadProject(projectFileUri);
}
});
// stop watching for changes to the sqlproj after it's closed
const closeSqlproj = vscode.workspace.onDidCloseTextDocument((d) => {
if (this.projFileWatchers.has(d.uri.fsPath)) {
this.projFileWatchers.get(d.uri.fsPath)!.dispose();
this.projFileWatchers.delete(d.uri.fsPath);
closeSqlproj.dispose();
}
});
} catch (err) {
vscode.window.showErrorMessage(utils.getErrorMessage(err));
}