protected static void DoPostReview(FormSubmit form) { int reviewId = form.GetSelectedReviewId(); List<string> changes = form.GetCheckedFullPaths(); BackgroundWorker backgroundPostReview = new BackgroundWorker(); backgroundPostReview.WorkerReportsProgress = true; backgroundPostReview.WorkerSupportsCancellation = true; backgroundPostReview.DoWork += (s, e) => { string server = form.textBoxServer.Text; string username = form.textBoxUsername.Text; string password = form.textBoxPassword.Text; string submitAs = null; bool publish = false; PostReview.PostReviewOpen open = PostReview.PostReviewOpen.Internal; bool debug = false; e.Result = PostReview.Submit(backgroundPostReview, server, username, password, submitAs, reviewId, changes, publish, open, debug); if (backgroundPostReview.CancellationPending) { e.Cancel = true; } }; string label = String.Format("Uploading Code Review #{0} ({1} files)...", reviewId, changes.Count); FormProgress progress = new FormProgress("Uploading...", label, backgroundPostReview); progress.FormClosed += (s, e) => { bool close = true; PostReview.PostReviewException pre = (PostReview.PostReviewException)progress.Error; if (pre != null) { StringBuilder message = new StringBuilder(); message.AppendLine(pre.ToString()); message.AppendLine(); message.AppendLine("Click \"Retry\" to return to dialog, or \"Cancel\" to return to Visual Studio."); if (MessageBox.Show(form, message.ToString(), "ERROR", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry) { close = false; } } if (close) { form.Review = progress.Result as PostReview.ReviewInfo; form.DialogResult = DialogResult.OK; form.Close(); } }; progress.ShowDialog(form); }
private void ReviewBoardCommand(object caller, EventArgs args) { // TODO:(pv) Preselect most of the changed files according to the items selected in the Solution Explorer. // See below "GetCurrentSelection()" code. // I am holding off doing this because it is a little complicated trying to figure out what the user intended to submit. // Does selecting a folder mean to also submit all files in that folder? // What if a few files/subfolders of that folder are also selected? // Should none of the other items be selected? // For now, just check *all* visible solution items for changes... IVsOutputWindowPane owp = GetOutputWindowPaneGeneral(); if (owp != null) { owp.Activate(); } if (!solutionTracker.BackgroundInitialSolutionCrawl.IsBusy) { // The initial solution crawl is finished. // Just show the submit form as usual... ShowFormSubmit(); } else { // The initial solution crawl is still in progress. // Display a cancelable modal dialog until the solution crawl is finished. string message = "Waiting for initial solution crawl to complete..."; FormProgress progress = new FormProgress(message, message, solutionTracker.BackgroundInitialSolutionCrawl); DialogResult result = progress.ShowDialog(); if (result == DialogResult.OK) { ShowFormSubmit(); } } }