private async Task UpdateAssetFromSource() { if (updatingFromSource) { return; } updatingFromSource = true; var logger = new LoggerResult(); var workProgress = new WorkProgressViewModel(ServiceProvider, logger) { Title = "Update assets from source", KeepOpen = KeepOpen.OnWarningsOrErrors, IsIndeterminate = true, IsCancellable = false, }; workProgress.RegisterProgressStatus(logger, true); workProgress.ServiceProvider.Get <IEditorDialogService>().ShowProgressWindow(workProgress, 500); using (var transaction = asset.UndoRedoService.CreateTransaction()) { await UpdateAssetFromSource(logger); asset.UndoRedoService.SetName(transaction, $"Update [{asset.Url}] from its source(s)"); } await workProgress.NotifyWorkFinished(false, logger.HasErrors); updatingFromSource = false; }
private async Task UpdateAssetsFromSource(IEnumerable <AssetViewModel> assets) { var logger = new LoggerResult(); var workProgress = new WorkProgressViewModel(ServiceProvider, logger) { Title = "Update assets from source", KeepOpen = KeepOpen.OnWarningsOrErrors, IsIndeterminate = true, IsCancellable = false, }; workProgress.RegisterProgressStatus(logger, true); workProgress.ServiceProvider.Get <IEditorDialogService>().ShowProgressWindow(workProgress, 500); var undoRedo = ServiceProvider.Get <IUndoRedoService>(); using (var transaction = undoRedo.CreateTransaction()) { var tasks = new List <Task>(); foreach (var asset in assets) { logger.Verbose($"Updating {asset.Url}..."); var task = asset.Sources.UpdateAssetFromSource(logger); // Continuation might swallow exceptions, careful to keep the original task like this task.ContinueWith(x => logger.Verbose($"{asset.Url} updated")).Forget(); tasks.Add(task); } await Task.WhenAll(tasks); logger.Info("Update completed..."); undoRedo.SetName(transaction, $"Update {tasks.Count} asset(s) from their source(s)"); } await workProgress.NotifyWorkFinished(false, logger.HasErrors); }
public async Task AddExistingProject() { var fileDialog = ServiceProvider.Get <IEditorDialogService>().CreateFileOpenModalDialog(); fileDialog.Filters.Add(new FileDialogFilter("Visual Studio C# project", "csproj")); fileDialog.InitialDirectory = Session.SolutionPath; var result = await fileDialog.ShowModal(); var projectPath = fileDialog.FilePaths.FirstOrDefault(); if (result == DialogResult.Ok && projectPath != null) { var loggerResult = new LoggerResult(); var cancellationSource = new CancellationTokenSource(); var workProgress = new WorkProgressViewModel(ServiceProvider, loggerResult) { Title = "Importing package...", KeepOpen = KeepOpen.OnWarningsOrErrors, IsIndeterminate = true, IsCancellable = false }; using (var transaction = UndoRedoService.CreateTransaction()) { workProgress.RegisterProgressStatus(loggerResult, true); ServiceProvider.Get <IEditorDialogService>().ShowProgressWindow(workProgress, 500); await Task.Run(() => { try { Package.AddExistingProject(projectPath, loggerResult); } catch (Exception e) { loggerResult.Error("An exception occurred while importing the project", e); } }, cancellationSource.Token); RefreshPackageReferences(); UndoRedoService.SetName(transaction, $"Import project '{new UFile(projectPath).GetFileNameWithoutExtension()}'"); } // Notify that the task is finished await workProgress.NotifyWorkFinished(cancellationSource.IsCancellationRequested, loggerResult.HasErrors); } }
public async Task UpdatePackageTemplate(TemplateDescription template) { var loggerResult = new LoggerResult(); var workProgress = new WorkProgressViewModel(ServiceProvider, loggerResult) { Title = "Updating package...", KeepOpen = KeepOpen.OnWarningsOrErrors, IsIndeterminate = true, IsCancellable = false }; workProgress.RegisterProgressStatus(loggerResult, true); var parameters = new PackageTemplateGeneratorParameters { Name = Package.Meta.Name, OutputDirectory = Package.FullPath.GetFullDirectory(), Description = template, Package = Package, Logger = loggerResult, }; var generator = TemplateManager.FindTemplateGenerator(parameters); if (generator == null) { await ServiceProvider.Get <IDialogService>().MessageBox(Tr._p("Message", "Unable to retrieve template generator for the selected template. Aborting."), MessageBoxButton.OK, MessageBoxImage.Error); return; } // Errors might occur when generating the template. For the moment we consider them non-fatal and allow to open the project anyway. await TemplateGeneratorHelper.RunTemplateGeneratorSafe(generator, parameters, workProgress); RefreshProjects(); await workProgress.NotifyWorkFinished(false, loggerResult.HasErrors); Package.IsDirty = true; }