public async Task <BackupResult> BackupProjectAsync(DefaultProjectData modProject, string OutputDirectory = "", BackupMode mode = BackupMode.Zip, int totalPercentageAmount = -1) { if (String.IsNullOrWhiteSpace(OutputDirectory)) { OutputDirectory = Path.Combine(Path.GetFullPath(Data.Settings.BackupRootDirectory), modProject.ProjectName); Directory.CreateDirectory(OutputDirectory); } else { OutputDirectory = Path.GetFullPath(OutputDirectory); } string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.Replace("/", "-"); //Log.Here().Important($"System date format: {sysFormat}"); string archiveName = modProject.ProjectName + "_" + DateTime.Now.ToString(sysFormat + "_HH-mm-ss") + ".zip"; string archivePath = Path.Combine(OutputDirectory, archiveName); string gitProjectDirectory = ""; /* * bool gitProjectDetected = false; * * if (!String.IsNullOrEmpty(Data.Settings.GitRootDirectory)) * { * gitProjectDirectory = Path.Combine(Data.Settings.GitRootDirectory, modProject.ProjectName); * if (Directory.Exists(gitProjectDirectory)) * { * gitProjectDirectory = Path.Combine(Data.Settings.GitRootDirectory, modProject.ProjectName); * gitProjectDetected = true; * AppController.Main.UpdateProgressLog("Git repository detected."); * } * } */ if (!modProject.GitGenerated) { AppController.Main.UpdateProgressLog("Creating zip archive from project folders..."); //Log.Here().Activity($"Git project not found. Archiving project {modProject.ProjectName} from project folders directly."); return(await BackupGenerator.CreateArchiveFromDirectory(modProject.Directory, archivePath, true).ConfigureAwait(false)); } else { gitProjectDirectory = Path.Combine(Data.Settings.GitRootDirectory, modProject.ProjectName); if (mode == BackupMode.GitArchive) { AppController.Main.UpdateProgressLog("Running git archive command..."); var success = await GitGenerator.Archive(gitProjectDirectory, archivePath).ConfigureAwait(false); return(success ? BackupResult.Success : BackupResult.Error); } else { AppController.Main.UpdateProgressLog("Creating zip archive..."); return(await BackupGenerator.CreateArchiveFromDirectory(modProject.Directory, archivePath, true).ConfigureAwait(false)); } //Seems to have a problem with junctions and long paths //return BackupGenerator.CreateArchiveFromRepo(gitProjectDirectory, archivePath); } }
public MainWindow() { InitializeComponent(); _instance = this; Start(); LogWindow = new LogWindow(this); AboutWindow = new AboutWindow(this); MarkdownConverterWindow = new MarkdownConverterWindow(); TextGeneratorWindow = new TextGenerator(); GitGenerationWindow = new GitGenerationWindow(); TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal; SubWindows = new List <Window>() { LogWindow, AboutWindow, MarkdownConverterWindow, TextGeneratorWindow, GitGenerationWindow, }; foreach (var window in SubWindows) { window.Hide(); } Controller = new AppController(this); this.WhenAnyValue(v => v.Controller.Data).Subscribe((vm) => { ViewModel = vm; DataContext = ViewModel; }); Controller.LoadAppSettings(); Controller.InitModules(); if (String.IsNullOrWhiteSpace(ViewModel.AppSettings.GitInstallPath)) { var gitPath = GitGenerator.GetGitInstallPath(); if (!String.IsNullOrEmpty(gitPath)) { ViewModel.AppSettings.GitInstallPath = gitPath; Log.Here().Important($"Git install location found at {gitPath}."); } else { Log.Here().Error($"Git install location not found."); } } AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent; AutoUpdater.HttpUserAgent = "SourceControlGeneratorUser"; this.WhenActivated((disposables) => { this.OneWayBind(ViewModel, vm => vm.ProgressValueTaskBar, v => v.TaskbarItemInfo.ProgressValue).DisposeWith(disposables); Controller.CheckForUpdates(); }); this.Loaded += MainWindow_Loaded; }
private async Task <bool> GenerateGitFilesAsync(DefaultProjectData modProject, GitGenerationSettings generationSettings, int endPercentage) { if (modProject == null) { return(false); } int percentageIncrement = endPercentage / 9; Log.Here().Activity($"[Progress] percentageIncrement is {percentageIncrement} / {endPercentage}"); if (!string.IsNullOrEmpty(Data.Settings.GitRootDirectory)) { string gitProjectRootDirectory = Path.Combine(Data.Settings.GitRootDirectory, modProject.ProjectName); AppController.Main.UpdateProgress(percentageIncrement, "Creating git project directory..."); var rootRepoDirectory = Directory.CreateDirectory(gitProjectRootDirectory); if (!Directory.Exists(gitProjectRootDirectory)) { Directory.CreateDirectory(gitProjectRootDirectory); } if (generationSettings.InitGit) { AppController.Main.UpdateProgress(percentageIncrement, "Initializing git repo..."); var result = await GitGenerator.InitRepository(gitProjectRootDirectory, Data.Settings.DefaultAuthor).ConfigureAwait(false); if (result) { Log.Here().Activity("Created git repository for project ({0}) at {1}", modProject.ProjectName, gitProjectRootDirectory); } else { Log.Here().Error("Error creating git repository for project {0}.", modProject.ProjectName); } } bool commitGit = false; string commitMessage = ""; if (generationSettings.TemplateSettings != null && generationSettings.TemplateSettings.Count > 0) { AppController.Main.UpdateProgress(percentageIncrement, "Generating templates..."); foreach (var templateSetting in generationSettings.TemplateSettings) { var templateData = Data.Templates.Where(t => t.Name == templateSetting.TemplateName).FirstOrDefault(); if (templateData != null) { if (templateSetting.Enabled) { string outputFilePath = Path.Combine(gitProjectRootDirectory, templateData.ExportPath); string outputText = await GitGenerator.ReplaceKeywords(templateData.EditorText, modProject, MainAppData, Data).ConfigureAwait(false); if (!FileCommands.WriteToFile(outputFilePath, outputText)) { Log.Here().Error("[{0}] Failed to create template file at {1}", modProject.ProjectName, templateData.ExportPath); } else { commitGit = true; commitMessage += (", added " + templateData.Name); } } else { Log.Here().Activity("[{0}] Skipping {1}", modProject.ProjectName, templateSetting.TemplateName); } } } } if (generationSettings.SelectedLicense != LicenseType.None) { AppController.Main.UpdateProgress(percentageIncrement, "Generating license..."); string outputText = ""; if (generationSettings.SelectedLicense == LicenseType.Custom) { var customLicenseTemplate = Data.Templates.Where(t => t.Name == "LICENSE").FirstOrDefault(); if (customLicenseTemplate != null) { outputText = customLicenseTemplate.EditorText; } } else { switch (generationSettings.SelectedLicense) { case LicenseType.MIT: outputText = Properties.Resources.License_MIT; break; case LicenseType.Apache: outputText = Properties.Resources.License_Apache; break; case LicenseType.GPL: outputText = Properties.Resources.License_GPL; break; } } if (!String.IsNullOrEmpty(outputText)) { outputText = await GitGenerator.ReplaceKeywords(outputText, modProject, MainAppData, Data).ConfigureAwait(false); } string licenseFile = Path.Combine(gitProjectRootDirectory, "LICENSE"); if (!FileCommands.WriteToFile(licenseFile, outputText)) { Log.Here().Error("[{0}] Failed to write license template file at {1}", modProject.ProjectName, licenseFile); } else { commitGit = true; commitMessage += ", added license"; } } if (generationSettings.InitGit && commitGit) { AppController.Main.UpdateProgress(percentageIncrement, "Committing new files..."); var result = await GitGenerator.Commit(gitProjectRootDirectory, commitMessage).ConfigureAwait(false); if (result) { AppController.Main.UpdateProgressLog($"Successfully commited git repo for project {modProject.DisplayName}."); } else { AppController.Main.UpdateProgressLog($"Git repo failed to commit for project {modProject.DisplayName}."); } } AppController.Main.UpdateProgress(percentageIncrement, "Generating source control data file..."); SourceControlData sourceControlData = new SourceControlData() { ProjectName = modProject.ProjectName, ProjectUUID = modProject.UUID }; modProject.GitData = sourceControlData; FileCommands.Save.SaveSourceControlData(sourceControlData, gitProjectRootDirectory); AppController.Main.UpdateProgress(percentageIncrement); return(true); } //} //catch(Exception ex) //{ // Log.Here().Error($"Error generating git files: {ex.ToString()}"); //} return(false); }