protected override IEnumerable <FacetMoniker> EnumerateIndexImpl()
        {
            var userItems = Directory.EnumerateFileSystemEntries(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu),
                                                                 "*.lnk", SearchOption.AllDirectories);
            var commonItems = Directory.EnumerateFileSystemEntries(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu),
                                                                   "*.lnk", SearchOption.AllDirectories);

            foreach (var path in userItems.Concat(commonItems))
            {
                //Icon icon;
                //string displayName;

                var moniker = new FacetMoniker(GetType(),
                                               typeof(FileSystemItemFacet), path, Path.GetFileNameWithoutExtension(path),
                                               sourceName: "Start Menu", extraData: FacetExtraData.BeginWith(typeof(IFileSystemItemFacet), "Type", "Program"), iconPath: null);

                yield return(moniker);
            }
        }
Beispiel #2
0
        ParseResult CreateParseResult(ParseInput input, ParseRange range, bool isSuggestion, string path, double relevance, bool isDirectory)
        {
            var type = "Folder";

            if (!isDirectory)
            {
                switch (Path.GetExtension(path).ToLower())
                {
                case ".lnk":
                case ".exe":
                    type = "Program";
                    break;

                default:
                    type = "File";
                    break;
                }
            }

            var moniker = new FacetMoniker(GetType(), typeof(FileSystemItemFacet), path,
                                           path, extraData: FacetExtraData.BeginWith(typeof(IFileSystemItemFacet), "Type", type), iconPath: null);

            return(new ParseResult(input, range, moniker, relevance, isSuggestion));
        }
Beispiel #3
0
        protected override IEnumerable <ParseResult> ParseImpl(ParseInput input, ParseMode mode, IList <Type> facetTypes)
        {
            var builder = new DateTimeBuilder();

            ParseInputTerm termMin     = null;
            ParseInputTerm termMax     = null;
            ParseInputTerm termCurrent = null;

            Func <bool> updateTermIndexes =
                () =>
            {
                if (termMin == null)
                {
                    termMin = termCurrent;
                }

                if (termMax != null && termMax != termCurrent && termMax.Ordinal != termCurrent.Ordinal - 1)
                {
                    return(false);
                }

                termMax = termCurrent;

                return(true);
            };

            Func <Group, Action <string>, bool> parseGroup =
                (grp, parse) =>
            {
                if (grp.Success)
                {
                    if (!updateTermIndexes())
                    {
                        return(false);
                    }

                    parse(grp.Value);
                }

                return(true);
            };

            var gotAmPm = false;

            foreach (var t in input.Terms)
            {
                termCurrent = t;

                foreach (var match in
                         from r in s_regexes
                         let m = r.Match(termCurrent.Text)
                                 where m.Success
                                 select m)
                {
                    if (!builder.Hour.HasValue && !parseGroup(match.Groups["hour"], val => builder.Hour = int.Parse(val)))
                    {
                        break;
                    }

                    if (!builder.Minute.HasValue && !parseGroup(match.Groups["minute"], val => builder.Minute = int.Parse(val)))
                    {
                        break;
                    }

                    if (!gotAmPm && !parseGroup(match.Groups["ampm"],
                                                val =>
                    {
                        gotAmPm = true;
                        builder.Hour += char.ToLower(val[0]) == 'p' ? 12 : 0;
                    }))
                    {
                        break;
                    }

                    //var hourminute = match.Groups["hourminute"];

                    //if (hourminute.Success)
                    //{}

                    if (!parseGroup(match.Groups["relativeday"],
                                    val =>
                    {
                        switch (val)
                        {
                        case "yesterday":
                            builder.SetDayFrom(DateTime.Today.AddDays(-1));
                            break;

                        case "today":
                            builder.SetDayFrom(DateTime.Today);
                            break;

                        case "tomorrow":
                            builder.SetDayFrom(DateTime.Today.AddDays(1));
                            break;
                        }
                    }))
                    {
                        break;
                    }
                }
            }

            if (builder.Type != 0)
            {
                var moniker = new FacetMoniker(GetType(), typeof(DateTimeFacet), builder.ToXml(),
                                               builder.ToString(), extraData: FacetExtraData.BeginWith(typeof(IDateTimeFacet), "Type", builder.Type.ToString()), iconPath: null);
                var parseResult = new ParseResult(input, input.GetTermsRange(termMin, termMax), moniker, 1.0);

                return(new[] { parseResult });
            }

            return(null);
        }