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); } }
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)); }
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); }