ARUP.IssueTracker.Classes.JiraUploader.worker_DoWork C# (CSharp) Метод

worker_DoWork() приватный Метод

private worker_DoWork ( object sender, DoWorkEventArgs e ) : void
sender object
e System.ComponentModel.DoWorkEventArgs
Результат void
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;

            XmlSerializer serializerV = new XmlSerializer(typeof(VisualizationInfo));

            for (int i = 0; i < issues.Count(); i++)
            {
                try
                {
                    IssueBCF issue = issues[i];
                    worker.ReportProgress((100 * i + 1) / issues.Count(), getProgressString(i + 1));// HAS TO BE OUT OF THE DISPATCHER!
                    // check status on each step
                    if (worker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return; // abort work, if it's cancelled
                    }

                    //CHECK IF ALREADY EXISTING
                    // could use the expression: cf[11600] ~ "aaaa"
                    // = operator not supported
                    string fields = " AND  GUID~" + issue.guid.ToString() + "&fields=key,comment";
                    string query = "search?jql=project=" + projectKey + fields;

                    var request4 = new RestRequest(query, Method.GET);
                    request4.AddHeader("Content-Type", "application/json");
                    request4.RequestFormat = RestSharp.DataFormat.Json;
                    var response4 = JiraClient.Client.Execute<Issues>(request4);

                    if (!RestCallback.Check(response4))
                        break;

                    //DOESN'T exist already
                    if (!response4.Data.issues.Any())
                    {

                        string snapshot = Path.Combine(path, issue.guid.ToString(), "snapshot.png");
                        string viewpoint = Path.Combine(path, issue.guid.ToString(), "viewpoint.bcfv");
                        string key = "";


                        //update view - it might be a new issue
                        // Serialize the object, and close the TextWriter
                        Stream writerV = new FileStream(viewpoint, FileMode.Create);
                        serializerV.Serialize(writerV, issue.viewpoint);
                        writerV.Close();


                        var request = new RestRequest("issue", Method.POST);
                        request.AddHeader("Content-Type", "application/json");
                        request.RequestFormat = RestSharp.DataFormat.Json;


                        var newissue =
                            new
                            {

                                fields = new Dictionary<string, object>()
    
                            };
                        newissue.fields.Add("project", new { key = projectKey });
                        newissue.fields.Add("summary", (string.IsNullOrWhiteSpace(issue.markup.Topic.Title)) ? "no title" : issue.markup.Topic.Title);
                        newissue.fields.Add("issuetype", new { id = issuesJira[i].fields.issuetype.id });
                        newissue.fields.Add(MySettings.Get("guidfield"), issue.guid.ToString());

                        if (issuesJira[i].fields.assignee != null)
                            newissue.fields.Add("assignee", new { name = issuesJira[i].fields.assignee.name });

                        if (issuesJira[i].fields.priority != null)
                            newissue.fields.Add("priority", new { id = issuesJira[i].fields.priority.id });

                        if (issuesJira[i].fields.components != null && issuesJira[i].fields.components.Any())
                            newissue.fields.Add("components",  issuesJira[i].fields.components );


                        request.AddBody(newissue);
                        var response = JiraClient.Client.Execute(request);

                        var responseIssue = new Issue();
                        if (RestCallback.Check(response))
                        {
                            responseIssue = RestSharp.SimpleJson.DeserializeObject<Issue>(response.Content);
                            key = responseIssue.key;//attach and comment sent to the new issue
                        }
                        else
                        {
                            uploadErrors++;
                            break;
                        }

                        //upload viewpoint and snapshot
                        var request2 = new RestRequest("issue/" + key + "/attachments", Method.POST);
                        request2.AddHeader("X-Atlassian-Token", "nocheck");
                        request2.RequestFormat = RestSharp.DataFormat.Json;
                        request2.AddFile("file", File.ReadAllBytes(snapshot), "snapshot.png");
                        request2.AddFile("file", File.ReadAllBytes(viewpoint), "viewpoint.bcfv");
                        var response2 = JiraClient.Client.Execute(request2);
                        RestCallback.Check(response2);

                        //ADD COMMENTS
                        if (issue.markup.Comment.Any())
                        {
                            issue.markup.Comment = new System.Collections.ObjectModel.ObservableCollection<CommentBCF>(issue.markup.Comment.Reverse());
                            foreach (var c in issue.markup.Comment)
                            {
                                var request3 = new RestRequest("issue/" + key + "/comment", Method.POST);
                                request3.AddHeader("Content-Type", "application/json");
                                request3.RequestFormat = RestSharp.DataFormat.Json;
                                var newcomment = new { body = c.Comment1 };
                                request3.AddBody(newcomment);
                                var response3 = JiraClient.Client.Execute<Comment2>(request3);
                                if(!RestCallback.Check(response3))
                                    break;
                            }
                        }
                        if (i == issues.Count() - 1)
                        {
                            worker.ReportProgress(100, getProgressString(i + 1));
                        }
                    }
                    else //UPDATE ISSUE
                    {
                        var oldIssue = response4.Data.issues.First();
                        if (issue.markup.Comment.Any())
                        {
                            issue.markup.Comment = new System.Collections.ObjectModel.ObservableCollection<CommentBCF>(issue.markup.Comment.Reverse());
                            foreach (var c in issue.markup.Comment)
                            {
                                string normalized1 = Regex.Replace(c.Comment1, @"\s", "");
                                if (oldIssue.fields.comment.comments.Any(o => Regex.Replace(o.body, @"\s", "").Equals(normalized1,StringComparison.OrdinalIgnoreCase)))
                                    continue;

                                var request3 = new RestRequest("issue/" + oldIssue.key + "/comment", Method.POST);
                                request3.AddHeader("Content-Type", "application/json");
                                request3.RequestFormat = RestSharp.DataFormat.Json;
                                var newcomment = new { body = c.Comment1 };
                                request3.AddBody(newcomment);
                                var response3 = JiraClient.Client.Execute<Comment2>(request3);
                                if (!RestCallback.Check(response3))
                                    break;
                            }
                        }
                    }

                } // END TRY


                catch (System.Exception ex1)
                {
                    MessageBox.Show("exception: " + ex1);
                }


            }// END LOOP
        }
        private string getProgressString(int i)