public List <RunItem> Search(string s, int nrOfHits = 10) { if (s == null) { s = ""; } s = s.Trim(); var fileList = new List <RunItem>(); var sw = new Stopwatch(); sw.Start(); ICollection <RunItem> generalResult = MatcherGeneral.Search(s.ToLower(), nrOfHits); GeneralSearchTime = (int)sw.ElapsedTicks; sw.Restart(); //Console.WriteLine($" "); ICollection <RunItem> prioResult = MatcherPrio.Search(s.ToLower()); //Get all results from indexing prioResult = prioResult.Concat(generalResult).ToList(); //put the rest of the results on the stack //foreach (var runItem in prioResult) //{ // Console.WriteLine($"{runItem.Name}, {runItem.RunNrOfTimes}"); //} prioResult = prioResult.GroupBy(x => x.Name + x.URI + x.Command) .Select(x => x.OrderByDescending(p => p.RunNrOfTimes).First()).ToList(); //remove potential duplicates prioResult = prioResult.ToList().OrderByDescending(p => p.RunNrOfTimes) .ToList(); //sort prioresults since they will always have at least one runtime PrioSearchTime = (int)sw.ElapsedTicks; TotalSearchTime = GeneralSearchTime + PrioSearchTime; return(prioResult.Take(10).ToList()); }
public void AddExecutedItem(RunItem exItem) { MatcherGeneral.Remove(exItem.Name.ToLower()); exItem.RunNrOfTimes++; MatcherPrio.Replace(exItem.Name, exItem); SaveTries(); }
public void ResetItemRunCounter(RunItem exItem) { exItem.RunNrOfTimes = 0; if (exItem.Type == ItemType.File || exItem.Type == ItemType.Directory ) //Move it back to general list. Settings and other stuff will always be in the priolist. { MatcherPrio.Remove(exItem.Name.ToLower()); MatcherGeneral.Insert(exItem.Name.ToLower(), exItem); } SaveTries(); }
public void RunIndexingOnSingleFolder(FolderSearch dir) { Task.Run(() => { try { if (IndexingIsRunning) { return; } IndexingIsRunning = true; var unorderedFiles = new HashSet <RunItem>(); LastIndexed = DateTime.Now; var tempBag = new HashSet <RunItem>(); ProcessDirectory(dir, tempBag); dir.NrOfFiles = tempBag.Count; foreach (var item in tempBag) { unorderedFiles.Add(item); } RunItem[] tempList = unorderedFiles.ToArray(); tempList = tempList.GroupBy(p => p.URI + p.Arguments + p.Command).Select(p => p.First()).ToArray(); for (int i = 0; i < tempList.Length; i++) { Progress = i / tempList.Length * 100; MatcherGeneral.Insert(tempList[i].Name.ToLower(), tempList[i]); //if (!string.IsNullOrEmpty(tempList[i].Group)) // TempMatcher.Insert(tempList[i].Group.ToLower(), tempList[i]); } NrOfPaths = MatcherGeneral.DataDictionary.Count + MatcherPrio.DataDictionary.Count; SaveTries(); IndexingIsRunning = false; } catch (Exception e) { Log.Error(e, $"Could not search folder {dir.Path}"); } }); }