public static AggregateManager?TryCreate(FindCommandOptions Options) { ModifyOptions modifyOptions = Options.ModifyOptions; bool shouldCreate = modifyOptions.HasFunction(ModifyFunctions.Except_Intersect_Group) || (modifyOptions.Aggregate && (modifyOptions.Modifier != null || modifyOptions.HasFunction(ModifyFunctions.Enumerable))); if (!shouldCreate) { return(null); } var storage = new ListResultStorage(); List <StorageSection>?sections = null; if (modifyOptions.HasFunction(ModifyFunctions.Except_Intersect)) { sections = new List <StorageSection>(); } else if ((Options.ContentFilter != null || Options.NameFilter != null) && modifyOptions.HasFunction(ModifyFunctions.Group)) { sections = new List <StorageSection>(); } return(new AggregateManager(storage, sections, Options)); }
public void WriteAggregatedValues(CancellationToken cancellationToken) { int count = 0; IEnumerable <string> values = Storage.Values; if (Sections?.Count > 1 && (ModifyOptions.HasFunction(ModifyFunctions.Except_Intersect))) { if (ModifyOptions.HasFunction(ModifyFunctions.Except)) { values = ExceptOrIntersect(Storage.Values, (x, y, c) => x.Except(y, c)); } else if (ModifyOptions.HasFunction(ModifyFunctions.Intersect)) { values = ExceptOrIntersect(Storage.Values, (x, y, c) => x.Intersect(y, c)); } } Dictionary <string, List <StorageSection> >?valuesMap = null; if (Sections?.Count > 0 && ModifyOptions.HasFunction(ModifyFunctions.Group)) { if (Options.ContentFilter != null) { valuesMap = GroupByValues(Storage.Values); } else { valuesMap = Storage.Values .Zip(Sections) .GroupBy(f => f.First) .ToDictionary(f => f.Key, f => f.Select(f => f.Second).ToList()); } values = valuesMap .Select(f => f.Key) .Modify(ModifyOptions, filter: ModifyFunctions.Enumerable & ~ModifyFunctions.Distinct); } else { values = values.Modify(ModifyOptions, filter: ModifyFunctions.Enumerable); } using (IEnumerator <string> en = values.GetEnumerator()) { if (en.MoveNext()) { OutputSymbols symbols = OutputSymbols.Create(Options.HighlightOptions); ConsoleColors colors = ((Options.HighlightOptions & HighlightOptions.Match) != 0) ? Colors.Match : default; ConsoleColors boundaryColors = (Options.HighlightBoundary) ? Colors.MatchBoundary : default; var valueWriter = new ValueWriter(new ContentTextWriter(Verbosity.Minimal), includeEndingIndent: false); if (!Options.AggregateOnly) { ConsoleOut.WriteLineIf(ShouldWriteLine(ConsoleOut.Verbosity)); Out?.WriteLineIf(ShouldWriteLine(Out.Verbosity)); } do { cancellationToken.ThrowIfCancellationRequested(); valueWriter.Write(en.Current, symbols, colors, boundaryColors); if (valuesMap != null && ShouldLog(Verbosity.Detailed)) { int groupCount = valuesMap[en.Current].Count; Write(" ", Colors.Message_OK, Verbosity.Detailed); Write(groupCount.ToString("n0"), Colors.Message_OK, Verbosity.Detailed); } WriteLine(Verbosity.Minimal); if (valuesMap != null) { WriteGroup(valuesMap[en.Current], cancellationToken); } count++; } while (en.MoveNext()); if (Options.IncludeSummary || ShouldLog(Verbosity.Detailed)) { Verbosity verbosity = (Options.IncludeSummary) ? Verbosity.Minimal : Verbosity.Detailed; if (valuesMap != null) { count = valuesMap.Sum(f => f.Value.Count); } WriteLine(verbosity); if (valuesMap != null) { WriteCount("Groups", valuesMap.Count, verbosity: verbosity); Write(" ", verbosity); } WriteCount("Values", count, verbosity: verbosity); WriteLine(verbosity); } } } bool ShouldWriteLine(Verbosity verbosity) { if (verbosity > Verbosity.Minimal) { return(true); } return(verbosity == Verbosity.Minimal && (Options.PathDisplayStyle != PathDisplayStyle.Omit || Options.IncludeSummary)); } }