Example #1
0
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            if (MetadataSpecified && metadataVersion > metadataSaveVersion)
            {
                var result = MessageBox.Show(
                    this, Resources.SavePackageMetadata, Text,
                    MessageBoxButtons.YesNoCancel,
                    MessageBoxIcon.Warning);
                if (result == DialogResult.Cancel ||
                    result == DialogResult.Yes && !SaveMetadata())
                {
                    DialogResult = DialogResult.None;
                    e.Cancel     = true;
                }
            }

            if (DialogResult == DialogResult.OK)
            {
                var packageFileName =
                    packageBuilder.Id + "." +
                    packageBuilder.Version + NuGetConstants.PackageExtension;
                saveFileDialog.FileName = packageFileName;
                if (entryPoint != null)
                {
                    RenamePackageFile(entryPoint, packageBuilder.Id);
                    if (entryPointLayout != null)
                    {
                        RenamePackageFile(entryPointLayout, packageBuilder.Id);
                    }
                }

                EnsureDirectory(saveFileDialog.InitialDirectory);
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    using (var dialog = new PackageOperationDialog())
                    {
                        ILogger logger = new EventLogger();
                        dialog.Text = Resources.ExportOperationLabel;
                        dialog.RegisterEventLogger((EventLogger)logger);
                        logger.Log(LogLevel.Information, $"Creating package '{packageBuilder.Id} {packageBuilder.Version}'.");
                        var dialogClosed = Observable.FromEventPattern <FormClosedEventHandler, FormClosedEventArgs>(
                            handler => dialog.FormClosed += handler,
                            handler => dialog.FormClosed -= handler);
                        var operation = Observable.Using(
                            () => Stream.Synchronized(File.Open(saveFileDialog.FileName, FileMode.Create)),
                            stream => Observable.Start(() => packageBuilder.Save(stream)).TakeUntil(dialogClosed));
                        using (var subscription = operation.ObserveOn(this).Subscribe(
                                   xs => dialog.Complete(),
                                   ex => logger.Log(LogLevel.Error, ex.Message)))
                        {
                            if (dialog.ShowDialog() != DialogResult.OK)
                            {
                                e.Cancel = true;
                            }
                            else
                            {
                                SystemSounds.Asterisk.Play();
                                var message = string.Format(Resources.PackageExported, packageBuilder.Id, packageBuilder.Version);
                                MessageBox.Show(this, message, Text, MessageBoxButtons.OK, MessageBoxIcon.None);
                            }
                        }
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }

            base.OnFormClosing(e);
        }
        public void RunPackageOperation(IEnumerable <IPackageSearchMetadata> packages, bool handleDependencies)
        {
            using (var dialog = new PackageOperationDialog())
            {
                var logger = PackageManager.Logger;
                dialog.RegisterEventLogger((EventLogger)logger);

                IObservable <Unit> operation;
                var uninstallOperation = SelectedRepository == PackageManager.LocalRepository;
                var update             = packageView.OperationText == Resources.UpdateOperationName;
                if (uninstallOperation)
                {
                    operation = Observable.FromAsync(async token =>
                    {
                        foreach (var package in packages)
                        {
                            await PackageManager.UninstallPackageAsync(package.Identity, ProjectFramework, handleDependencies, token);
                        }
                    });
                    dialog.Text = Resources.UninstallOperationLabel;
                }
                else
                {
                    var allowPrereleaseVersions = AllowPrereleaseVersions;
                    dialog.Text = update ? Resources.UpdateOperationLabel : Resources.InstallOperationLabel;

                    operation = Observable.FromAsync(async token =>
                    {
                        foreach (var package in packages)
                        {
                            await PackageManager.InstallPackageAsync(package.Identity, ProjectFramework, !handleDependencies, token);
                        }
                    });
                }

                operationDialog = dialog;
                try
                {
                    dialog.Shown += delegate
                    {
                        operation.ObserveOn(control).Subscribe(
                            xs => { },
                            ex => logger.LogError(ex.Message),
                            dialog.Complete);
                    };

                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        if (uninstallOperation || update)
                        {
                            UpdatePackageQuery();
                        }
                        else
                        {
                            UpdatePackagePage(packagePageSelector.SelectedPage);
                        }
                    }
                }
                finally { operationDialog = null; }
            }
        }