コード例 #1
0
ファイル: AggregateManager.cs プロジェクト: JosefPihrt/Orang
        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));
        }
コード例 #2
0
ファイル: AggregateManager.cs プロジェクト: JosefPihrt/Orang
        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));
            }
        }