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; } } }