public Form1() { InitializeComponent(); DataLoader.LoadAvailableProjectsFromCsv(); viewModel = new NewProjectViewModel(); viewModel.OpenSlnFolderAfterCreation = true; SetInitialProjectLocation(); //RemoteFileManager.Initialize(); ProcessCommandLineArguments(); UseDifferentNamespaceCheckBoxChanged(null, null); ((System.Windows.Controls.Control)WpfHost.Child).DataContext = viewModel; }
public NewProjectViewModel ToViewModel() { NewProjectViewModel toReturn = new NewProjectViewModel(); toReturn.ProjectName = this.ProjectNameTextBox.Text; toReturn.UseDifferentNamespace = DifferentNamespaceCheckbox.Checked; toReturn.DifferentNamespace = DifferentNamespaceTextbox.Text; toReturn.CheckForNewVersions = CheckForNewVersionCheckBox.Checked; toReturn.ProjectType = ProjectTypeListBox.SelectedItem as PlatformProjectInfo; // todo - the logic for this is in Form1.cs and it should be in the VM toReturn.ProjectLocation = ProjectLocationTextBox.Text; toReturn.CreateProjectDirectory = CreateProjectDirectoryCheckBox.Checked; return toReturn; }
public static bool MakeNewProject(NewProjectViewModel viewModel) { string stringToReplace; string zipToUnpack; GetDefaultZipLocationAndStringToReplace(viewModel.ProjectType, out zipToUnpack, out stringToReplace); string fileToDownload = GetFileToDownload(viewModel); bool succeeded = true; #if !MAC if (NewProjectCreator.Managers.CommandLineManager.Self.OpenedBy != null && NewProjectCreator.Managers.CommandLineManager.Self.OpenedBy.ToLower() == "glue") { PlatformProjectInfo ppi = viewModel.ProjectType; if (!ppi.SupportedInGlue) { succeeded = false; MessageBox.Show("This project type is not supported in Glue. You must launch the New Project Creator manually"); } } #endif if (succeeded) { string unpackDirectory = viewModel.ProjectLocation; bool isFileNameValid = GetIfFileNameIsValid(viewModel, ref unpackDirectory); if(!isFileNameValid) { succeeded = false; } else { bool hasUserCancelled = false; bool shouldTryDownloading; zipToUnpack = GetZipToUnpack(viewModel, fileToDownload, ref hasUserCancelled, out shouldTryDownloading); if(shouldTryDownloading) { // Checks for a newer version and downloads it if necessary bool downloadSucceeded = DownloadFileSync(viewModel, zipToUnpack, fileToDownload); if (!downloadSucceeded) { ShowErrorMessageBox(ref hasUserCancelled, ref zipToUnpack, "Error downloading the file. What would you like to do?"); } } if (!hasUserCancelled) { try { Directory.CreateDirectory(unpackDirectory); } catch (UnauthorizedAccessException) { MessageBox.Show("The program does not have permission to create a directory at\n\n" + unpackDirectory + "\n\nPlease run as administrator mode"); succeeded = false; } if (succeeded) { if (!File.Exists(zipToUnpack)) { System.Windows.Forms.MessageBox.Show("Could not find the template file:\n" + zipToUnpack); } succeeded = UnzipManager.UnzipFile(zipToUnpack, unpackDirectory); } if (succeeded) { RenameEverything(viewModel, stringToReplace, unpackDirectory); CreateGuidInAssemblyInfo(unpackDirectory); if (viewModel.OpenSlnFolderAfterCreation) { Process.Start(unpackDirectory); } System.Console.Out.WriteLine(unpackDirectory); } } } } return succeeded; }
private static string GetFileToDownload(NewProjectViewModel viewModel) { PlatformProjectInfo foundInstance = viewModel.ProjectType; if (foundInstance == null) { throw new NotImplementedException("You must first select a template"); } else { return foundInstance.Url; } }
private static bool DownloadFileSync(NewProjectViewModel viewModel, string zipToUnpack, string fileToDownoad) { EmbeddedExecutableExtractor eee = EmbeddedExecutableExtractor.Self; eee.ExtractFile("FlatRedBall.Tools.dll"); eee.ExtractFile("Ionic.Zip.dll"); eee.ExtractFile("Ionic.Zlib.dll"); string resultingLocation = eee.ExtractFile("FRBDKUpdater.exe"); UpdaterRuntimeSettings urs = new UpdaterRuntimeSettings(); urs.FileToDownload = fileToDownoad; urs.FormTitle = "Downloading " + viewModel.ProjectType.FriendlyName; if (string.IsNullOrEmpty(zipToUnpack)) { throw new Exception("The zipToUnpack argument is null - it shouldn't be"); } urs.LocationToSaveFile = zipToUnpack; string whereToSaveSettings = FileManager.UserApplicationDataForThisApplication + "DownloadInformation." + UpdaterRuntimeSettings.RuntimeSettingsExtension; urs.Save(whereToSaveSettings); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = resultingLocation; // The username for the user may have a space in it // so we need to have quotes around the path psi.Arguments = "\"" + whereToSaveSettings + "\""; Process process = Process.Start(psi); while (!process.HasExited) { System.Threading.Thread.Sleep(200); } bool succeeded = process.ExitCode == 0; return succeeded; }
private static bool GetIfFileNameIsValid(NewProjectViewModel viewModel, ref string unpackDirectory) { bool isFileNameValid = true; #region Check for spaces if creating a directory for the project if (viewModel.CreateProjectDirectory) { if (viewModel.ProjectName.Contains(" ")) { System.Windows.Forms.MessageBox.Show("Project names cannot contain spaces."); isFileNameValid = false; } unpackDirectory = viewModel.CombinedProjectDirectory; } #endregion if (Directory.Exists(unpackDirectory)) { MessageBox.Show("The directory " + unpackDirectory + " already exists"); isFileNameValid = false; } return isFileNameValid; }
private static string GetZipToUnpack(NewProjectViewModel viewModel, string fileToDownload, ref bool hasUserCancelled, out bool shouldTryDownloading) { bool checkOnline = viewModel.CheckForNewVersions; string zipToUnpack = null; shouldTryDownloading = false; if (!string.IsNullOrEmpty(fileToDownload)) { zipToUnpack = FileManager.UserApplicationDataForThisApplication + FileManager.RemovePath(fileToDownload); } if (zipToUnpack == null) { string message = "There is no zip file online for this template. What would you like to do?"; ShowErrorMessageBox(ref hasUserCancelled, ref zipToUnpack, message); checkOnline = false; } if (checkOnline) { if (string.IsNullOrEmpty(fileToDownload)) { string message = "Couldn't find this project online. What would you like to do?"; ShowErrorMessageBox(ref hasUserCancelled, ref zipToUnpack, message); } else { shouldTryDownloading = true; } } return zipToUnpack; }
private static void RenameEverything(NewProjectViewModel viewModel, string stringToReplace, string unpackDirectory) { RenameFiles(unpackDirectory, stringToReplace, viewModel.ProjectName); UpdateSolutionContents(unpackDirectory, stringToReplace, viewModel.ProjectName); // UpdateProjects does a simple "Replace" call, which should // happen before we do the stricter UpdateNamespace call below. // Otherwise, if the user changes the project name to something that contains // the original name (like "StarBlaster"), then UpdateProject will result in the // namespace being incorrect. UpdateProjects(unpackDirectory, stringToReplace, viewModel.DifferentNamespace); UpdateNamespaces(unpackDirectory, stringToReplace, viewModel.DifferentNamespace); }