///<summary>Reloads all data for form.</summary> private void RefreshData() { _listHashes = BugSubmissionHashes.GetMany(datePicker.GetDateTimeFrom(), datePicker.GetDateTimeTo()); _dictBugSubsByHashNum = BugSubmissions.GetForHashNums(_listHashes.Select(x => x.BugSubmissionHashNum).ToList()); _dictBugs = Bugs.GetMany(_listHashes.Select(x => x.BugId).Where(x => x != 0).ToList()).ToDictionary(key => key.BugId); _dictPatients = RegistrationKeys.GetPatientsByKeys(_dictBugSubsByHashNum.Values.SelectMany(x => x.Select(y => y.RegKey)).ToList()); }
///<summary>When grid is clicked, show bug submissions grouped by version in Hash Data grid.</summary> private void gridHashes_CellClick(object sender, UI.ODGridClickEventArgs e) { Dictionary <string, List <BugSubmission> > dictSubStackTraces; object gridTagObj = gridHashes.ListGridRows[e.Row].Tag; if (gridTagObj is BugSubmissionHash) //No Grouping { dictSubStackTraces = _dictBugSubsByHashNum[(gridTagObj as BugSubmissionHash).BugSubmissionHashNum] .GroupBy(x => x.ProgramVersion) .ToDictionary(x => x.Key, x => x.ToList()); } else if (gridTagObj is List <BugSubmissionHash> ) { dictSubStackTraces = new Dictionary <string, List <BugSubmission> >(); foreach (BugSubmissionHash hash in (gridTagObj as List <BugSubmissionHash>)) { _dictBugSubsByHashNum[hash.BugSubmissionHashNum] .GroupBy(x => x.ProgramVersion) .ForEach(x => { if (dictSubStackTraces.ContainsKey(x.Key)) { dictSubStackTraces[x.Key].AddRange(x.ToList()); } else { dictSubStackTraces.Add(x.Key, x.ToList()); } }); } } else { MsgBox.Show("Error loading Hash Details: Unknown Tag"); return; } gridHashData.BeginUpdate(); gridHashData.ListGridRows.Clear(); foreach (string key in dictSubStackTraces.Keys) { BugSubmission sub = dictSubStackTraces[key].OrderBy(x => new Version(x.ProgramVersion)).Last(); //Most recent version. BugSubmissionHashes.ProcessSubmission(sub , out long matchedBugId, out string matchedFixedVersions, out long matchedBugSubmissionHashNum , useConnectionStore: false ); string versionSubmitted = new Version(sub.ProgramVersion).ToString(); string countRegKeys = dictSubStackTraces[key].Select(x => x.RegKey).Distinct().Count().ToString(); string countTotalSubs = dictSubStackTraces[key].Count().ToString(); gridHashData.AddRow(tag: dictSubStackTraces[key], versionSubmitted, countRegKeys, countTotalSubs, (matchedFixedVersions ?? "")); } gridHashData.EndUpdate(); gridSubs.BeginUpdate(); gridSubs.ListGridRows.Clear(); gridSubs.EndUpdate(); }
///<summary></summary> private void gridSubs_RightClickHelper(object sender, EventArgs e) { int index = gridSubs.GetSelectedIndex(); if (index == -1) //Should not happen, menu item is only enabled when exactly 1 row is selected. { return; } List <BugSubmission> listSubs; switch (((MenuItem)sender).Index) { case 0: //Open Submission listSubs = (List <BugSubmission>)gridSubs.ListGridRows[index].Tag; FormBugSubmission formBugSub = new FormBugSubmission(listSubs[0], _jobCur); formBugSub.Show(); break; case 1: //Open Bug listSubs = (List <BugSubmission>)gridSubs.ListGridRows[index].Tag; OpenBug(listSubs[0]); break; case 2: //Hide or Unhide submission listSubs = gridSubs.SelectedTags <List <BugSubmission> >().SelectMany(x => x.ToList()).ToList(); bool isHidden = (!listSubs.First().IsHidden); //Flip all grouped submissions based on what the user selected/sees in the grid. listSubs.ForEach(x => x.IsHidden = isHidden); BugSubmissions.UpdateMany(listSubs, "IsHidden"); FillSubGrid(true); break; case 3: //Link or Unlink bug listSubs = gridSubs.SelectedTags <List <BugSubmission> >().SelectMany(x => x.ToList()).ToList(); if (listSubs.First().BugId == 0) //Not linked to existing bug, so link { FormBugSearch formBS = new FormBugSearch(new Job()); if (formBS.ShowDialog() != DialogResult.OK) { return; } listSubs.ForEach(x => x.BugId = formBS.BugCur.BugId); BugSubmissionHashes.UpdateBugIds(listSubs, formBS.BugCur.BugId); } else //Unlink { listSubs.ForEach(x => x.BugId = 0); BugSubmissionHashes.UpdateBugIds(listSubs, 0); } BugSubmissions.UpdateMany(listSubs, "BugId"); FillSubGrid(true); break; } }
///<summary>When clicked, allows user to past stacktrace and enter version to attempt to find hash and matched info.</summary> private void butCheckHash_Click(object sender, EventArgs e) { InputBox input = new InputBox("Please paste a stack trace", true); if (input.ShowDialog() != DialogResult.OK) { return; } BugSubmission sub = new BugSubmission() { ExceptionStackTrace = input.textResult.Text.Replace("\r\n", "\n"), }; input = new InputBox("Please enter a version like: 19.2.1.0"); if (input.ShowDialog() != DialogResult.OK || !Version.TryParse(input.textResult.Text, out Version version)) { return; } BugSubmissionHashes.ProcessSubmission(sub , out long matchedBugId, out string matchedFixedVersions, out long matchedBugSubmissionHashNum , version, false ); MsgBox.Show($"MatchedBugId: {matchedBugId}\r\nMatchedFixedVersions: {matchedFixedVersions}\r\nMatchedBugSubmissionHashNum: {matchedBugSubmissionHashNum}"); }