private void SaveJsonForProject(IVsHierarchy project) { if (!cmdPackage.IsVcsSupportEnabled || project == null) { return; } var guid = project.GetGuid(); var vm = cmdPackage.ToolWindowViewModel.TreeViewModel.Projects.GetValueOrDefault(guid); string filePath = FullFilenameForProjectJsonFileFromProject(project); FileSystemWatcher fsWatcher = projectFsWatchers.GetValueOrDefault(guid); if (vm != null && vm.Items.Any()) { using (fsWatcher?.TemporarilyDisable()) { // Tell VS that we're about to change this file // This matters if the user has TFVC with server workpace (see #57) if (!vsHelper.CanEditFile(filePath)) { Logger.Error($"VS or the user did no let us edit our file :/"); } else { try { using (Stream fileStream = File.Open(filePath, FileMode.Create, FileAccess.Write)) { ProjectDataSerializer.Serialize(vm, fileStream); } } catch (Exception e) { Logger.Warn($"Failed to write to file '{filePath}' with error '{e}'."); } } } } else if (File.Exists(filePath)) { Logger.Info("Deleting json file because command list is empty but json-file exists."); try { File.Delete(filePath); } catch (Exception e) { Logger.Warn($"Failed to delete file '{filePath}' with error '{e}'."); } } }
private static SuoDataJson ParseOldJsonFormat(JObject obj, VisualStudioHelper vsHelper) { var result = new SuoDataJson(); foreach (var prop in obj.Properties()) { var projectState = ProjectDataSerializer.ParseOldJsonFormat(prop.Value); var projectName = prop.Name; var projectGuid = vsHelper.ProjectGuidForProjetName(projectName); var enabledItems = from item in projectState.Items where item.Enabled select item.Id; result.ProjectArguments.Add(projectGuid, projectState); result.CheckedArguments.AddRange(enabledItems); } return(result); }