public void BeforeOpeningFile(ProjectItem projectItem) { projectItem.ContainingProject.Save(); string projectPath = projectItem.ContainingProject.Properties.Item("FullPath").Value.ToString(); string fullItemPath = Path.Combine(projectPath, finalProjectItemName); var existingGeneratedCode = File.ReadAllLines(fullItemPath).Join(Environment.NewLine); string baseUrl; if (!currentNativeTypesHandle.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { throw new WizardBackoutException("Failed to read from template base url"); } try { string updatedCode = currentNativeTypesHandle.GetUpdatedCode(baseUrl, null); using (var streamWriter = File.CreateText(fullItemPath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } } catch (Exception ex) { OutputWindowWriter.WriterWindow.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + ex.Message); } projectItem.Open(); projectItem.Save(); }
private static void HandleDtoUpdate(Document document, INativeTypesHandler typesHandler, OutputWindowWriter outputWindowWriter) { string fullPath = document.ProjectItem.GetFullPath(); outputWindowWriter.ShowOutputPane(document.DTE); outputWindowWriter.Show(); outputWindowWriter.WriteLine( "--- Updating ServiceStack Reference '" + fullPath.Substring(fullPath.LastIndexOf("\\", StringComparison.Ordinal) + 1) + "' ---"); var existingGeneratedCode = File.ReadAllLines(fullPath).Join(Environment.NewLine); string baseUrl; if (!typesHandler.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { outputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unabled to find BaseUrl"); return; } try { var options = typesHandler.ParseComments(existingGeneratedCode); string updatedCode = typesHandler.GetUpdatedCode(baseUrl, options); //Can't work out another way that ensures UI is updated. //Overwriting the file inconsistently prompts the user that file has changed. //Sometimes old code persists even though file has changed. document.Close(); using (var streamWriter = File.CreateText(fullPath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } try { bool optOutOfStats = Dte.GetOptOutStatsSetting(); if (!optOutOfStats) { var langName = typesHandler.RelativeTypesUrl.Substring(6); Analytics.SubmitAnonymousUpdateReferenceUsage(langName); } } catch (Exception) { // Ignore errors } //HACK to ensure new file is loaded Task.Run(() => { document.DTE.ItemOperations.OpenFile(fullPath); }); } catch (Exception e) { outputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + e.Message); } outputWindowWriter.WriteLine("--- Update ServiceStack Reference Complete ---"); }
private void UpdateGeneratedDtos(ProjectItem projectItem, INativeTypesHandler typesHandler) { OutputWindowWriter.Show(); OutputWindowWriter.ShowOutputPane(dte); OutputWindowWriter.WriteLine("--- Updating ServiceStack Reference '" + projectItem.Name + "' ---"); string projectItemPath = projectItem.GetFullPath(); var selectedFiles = projectItem.DTE.SelectedItems.Cast <SelectedItem>().ToList(); bool isDtoSelected = selectedFiles.Any(item => item.Name.ToLowerInvariant().EndsWith(typesHandler.CodeFileExtension)); if (isDtoSelected) { string filePath = projectItemPath; var existingGeneratedCode = File.ReadAllLines(filePath).Join(Environment.NewLine); string baseUrl; if (!typesHandler.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { OutputWindowWriter.WriteLine("Unable to read URL from DTO file. Please ensure the file was generated correctly from a ServiceStack server."); return; } try { var options = typesHandler.ParseComments(existingGeneratedCode); string updatedCode = typesHandler.GetUpdatedCode(baseUrl, options); using (var streamWriter = File.CreateText(filePath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } } catch (Exception e) { OutputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + e.Message); } OutputWindowWriter.WriteLine("--- Update ServiceStack Reference Complete ---"); } else { OutputWindowWriter.WriteLine("--- Valid file not found ServiceStack Reference '" + projectItem.Name + "' ---"); } }
private void UpdateGeneratedDtos(ProjectItem projectItem, INativeTypesHandler typesHandler) { OutputWindowWriter.WriterWindow.Show(); OutputWindowWriter.WriterWindow.ShowOutputPane(dte); OutputWindowWriter.WriterWindow.WriteLine("--- Updating ServiceStack Reference '" + projectItem.Name + "' ---"); string projectItemPath = projectItem.GetFullPath(); var selectedFiles = projectItem.DTE.SelectedItems.Cast <SelectedItem>().ToList(); bool isDtoSelected = false; isDtoSelected = selectedFiles .Any(item => typesHandler.IsHandledFileType(item.Name)); //Handle FSharp file extension name change for DTO files, eg .dto.fs to .dtos.fs if (!isDtoSelected && typesHandler is FSharpNativeTypesHandler) { isDtoSelected = selectedFiles .Any(item => item.Name.ToLowerInvariant() .EndsWith(".dto.fs")); } if (isDtoSelected) { string filePath = projectItemPath; var existingGeneratedCode = File.ReadAllLines(filePath).Join(Environment.NewLine); string baseUrl; if (!typesHandler.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { OutputWindowWriter.WriterWindow.WriteLine("Unable to read URL from DTO file. Please ensure the file was generated correctly from a ServiceStack server."); return; } try { var options = typesHandler.ParseComments(existingGeneratedCode); bool setSslValidationCallback = false; //Don't set validation callback if one has already been set for VS. if (ServicePointManager.ServerCertificateValidationCallback == null) { //Temp set validation callback to return true to avoid common dev server ssl certificate validation issues. setSslValidationCallback = true; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; } string updatedCode = typesHandler.GetUpdatedCode(baseUrl, options); if (setSslValidationCallback) { //If callback was set to return true, reset back to null. ServicePointManager.ServerCertificateValidationCallback = null; } using (var streamWriter = File.CreateText(filePath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } try { bool optOutOfStats = dte.GetOptOutStatsSetting(); if (!optOutOfStats) { var langName = typesHandler.RelativeTypesUrl.Substring(6); Analytics.SubmitAnonymousUpdateReferenceUsage(langName); } } catch (Exception) { // Ignore errors } } catch (Exception e) { OutputWindowWriter.WriterWindow.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + e.Message); } OutputWindowWriter.WriterWindow.WriteLine("--- Update ServiceStack Reference Complete ---"); } else { OutputWindowWriter.WriterWindow.WriteLine("--- Valid file not found ServiceStack Reference '" + projectItem.Name + "' ---"); } }
private void UpdateGeneratedDtos(ProjectItem projectItem, INativeTypesHandler typesHandler) { OutputWindowWriter.Show(); OutputWindowWriter.ShowOutputPane(dte); OutputWindowWriter.WriteLine("--- Updating ServiceStack Reference '" + projectItem.Name + "' ---"); string projectItemPath = projectItem.GetFullPath(); var selectedFiles = projectItem.DTE.SelectedItems.Cast<SelectedItem>().ToList(); bool isDtoSelected = false; isDtoSelected = selectedFiles .Any(item => item.Name.ToLowerInvariant() .EndsWith(typesHandler.CodeFileExtension)); //Handle FSharp file extension name change for DTO files, eg .dto.fs to .dtos.fs if (!isDtoSelected && typesHandler is FSharpNativeTypesHandler) { isDtoSelected = selectedFiles .Any(item => item.Name.ToLowerInvariant() .EndsWith(".dto.fs")); } if (isDtoSelected) { string filePath = projectItemPath; var existingGeneratedCode = File.ReadAllLines(filePath).Join(Environment.NewLine); string baseUrl; if (!typesHandler.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { OutputWindowWriter.WriteLine("Unable to read URL from DTO file. Please ensure the file was generated correctly from a ServiceStack server."); return; } try { var options = typesHandler.ParseComments(existingGeneratedCode); bool setSslValidationCallback = false; //Don't set validation callback if one has already been set for VS. if (ServicePointManager.ServerCertificateValidationCallback == null) { //Temp set validation callback to return true to avoid common dev server ssl certificate validation issues. setSslValidationCallback = true; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; } string updatedCode = typesHandler.GetUpdatedCode(baseUrl, options); if (setSslValidationCallback) { //If callback was set to return true, reset back to null. ServicePointManager.ServerCertificateValidationCallback = null; } using (var streamWriter = File.CreateText(filePath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } } catch (Exception e) { OutputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + e.Message); } OutputWindowWriter.WriteLine("--- Update ServiceStack Reference Complete ---"); } else { OutputWindowWriter.WriteLine("--- Valid file not found ServiceStack Reference '" + projectItem.Name + "' ---"); } }
private static void HandleDtoUpdate(Document document, INativeTypesHandler typesHandler, OutputWindowWriter outputWindowWriter) { string fullPath = document.ProjectItem.GetFullPath(); outputWindowWriter.ShowOutputPane(document.DTE); outputWindowWriter.Show(); outputWindowWriter.WriteLine( "--- Updating ServiceStack Reference '" + fullPath.Substring(fullPath.LastIndexOf("\\", StringComparison.Ordinal) + 1) + "' ---"); var existingGeneratedCode = File.ReadAllLines(fullPath).Join(Environment.NewLine); string baseUrl; if (!typesHandler.TryExtractBaseUrl(existingGeneratedCode, out baseUrl)) { outputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unabled to find BaseUrl"); return; } try { var options = typesHandler.ParseComments(existingGeneratedCode); string updatedCode = typesHandler.GetUpdatedCode(baseUrl, options); //Can't work out another way that ensures UI is updated. //Overwriting the file inconsistently prompts the user that file has changed. //Sometimes old code persists even though file has changed. document.Close(); using (var streamWriter = File.CreateText(fullPath)) { streamWriter.Write(updatedCode); streamWriter.Flush(); } //HACK to ensure new file is loaded Task.Run(() => { document.DTE.ItemOperations.OpenFile(fullPath); }); } catch (Exception e) { outputWindowWriter.WriteLine("Failed to update ServiceStack Reference: Unhandled error - " + e.Message); } outputWindowWriter.WriteLine("--- Update ServiceStack Reference Complete ---"); }