private void GeneratedItem(object sender, ProgressChangedEventArgs e) { object[] gen = e.UserState as object[]; SuperVar sv = gen[0] as SuperVar; if (gen[1] is string file) { ListViewItem i = new ListViewItem(""); i.SubItems.Add(file); FileList.Items.Add(i); } if (ProgStatus.Maximum != sv.Total) { ProgStatus.Value = 0; ProgStatus.Maximum = sv.Total; } ProgStatus.Value = sv.Count; }
private void Generate(object sender, DoWorkEventArgs e) { SuperVar sv = e.Argument as SuperVar; sv.Stage = SuperVar.Stages.Generating; string fp = sv.FilePattern; List <string[]> matrix = new List <string[]>(); string[] parts = fp.Split('{'); sv.Count = 0; sv.Total = parts.Length; foreach (string part in parts) { sv.Status = "Generating group possibilities..."; sv.Count++; Generator.ReportProgress(0, new object[] { sv, null }); if (part.Contains("}")) { string pattern = part.Split('}')[0]; string thing = part.Split('}')[1]; List <string> possibility = new List <string>(); if (pattern.Contains("|")) { possibility.AddRange(pattern.Split('|')); } else if (pattern.Contains("-")) { int start, end; string[] range = pattern.Split('-'); if (range.Length != 2) { e.Result = false; MessageBox.Show("Too many dashes in pattern.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else if (range[0].Length == 0 || range[1].Length == 0) { e.Result = false; MessageBox.Show("A range must have both a start and an end.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else if (range[0].Length == 1 && range[1].Length == 1) { start = range[0][0]; end = range[1][0]; if (!(start >= 32 && end <= 126)) { e.Result = false; MessageBox.Show("Invalid character range. Please make sure your characters are between ASCII codes 32 and 126.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } foreach (int ch in IntRange(start, end)) { possibility.Add(Convert.ToChar(ch).ToString()); } } else { try { end = int.Parse(range[1]); int pad = 0; if (range[0].StartsWith("p")) { start = int.Parse(range[0].Substring(1)); pad = (start < end) ? end.ToString().Length : start.ToString().Length; } else { start = int.Parse(range[0]); } foreach (int num in IntRange(start, end)) { string p = num.ToString(); while (p.Length < pad) { p = "0" + p; } possibility.Add(p); } } catch { e.Result = false; MessageBox.Show("Unable to parse range.", "Parsing Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } matrix.Add(possibility.ToArray()); if (thing != "" && thing != null) { matrix.Add(new string[] { thing }); } possibility.Clear(); } else { if (part != "" && part != null) { matrix.Add(new string[] { part }); } } } sv.Total = 1; foreach (string[] arr in matrix) { sv.Total = sv.Total * arr.Length; } sv.Count = 0; sv.Status = "Generating possibilities..."; foreach (string[] possibility in (new MatrixWalker <string>(matrix.ToArray())).Get()) { sv.Count++; sv.Possibilities.Add(string.Join("", possibility)); Generator.ReportProgress(0, new object[] { sv, sv.Possibilities.Last() }); } sv.Status = "Finished"; e.Result = sv; }