Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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;
        }