public List <FileComponent> Search(string keyword, FileFilter filter) { List <FileComponent> list = new List <FileComponent>(); List <string> keywords = new List <string>(); // Keywords if (keyword.StartsWith("\"")) { int offset = keyword.EndsWith("\"") ? 2 : 1; keywords.Add(keyword.Substring(1, keyword.Length - offset)); } else { keywords.AddRange(keyword.Split(' ')); } // Filters FileFormatHandler handler = FileFormat.GetHandler(filter); // Files IEnumerator <string> it = keywords.GetEnumerator(); while (it.MoveNext()) { keyword = (string)it.Current; lock (Map) { foreach (string id in Map.Keys) { FileComponent file = Get(id); if (handler(file.Extension)) { string filename = file.Name.ToLower(); if (filename.Contains(keyword)) { list.Add(file); } } } } } return(list); }
public Dictionary <string, FileData> SearchFiles(string keyword, FileFilter filter) { Dictionary <string, FileData> files = new Dictionary <string, FileData>(); List <string> items = new List <string>(); // Keywords if (keyword.StartsWith("\"")) { int offset = keyword.EndsWith("\"") ? 2 : 1; items.Add(keyword.Substring(1, keyword.Length - offset)); } else { items.AddRange(keyword.Split(' ')); } // Filters FileFormatHandler handler = FileFormat.GetHandler(filter); // Files foreach (string item in items) { lock (FileMap) { foreach (string key in FileMap.Keys) { FileData data = FileMap[key]; if (handler(data.Extension)) { string filename = data.Name.ToLower(); if (filename.Contains(item) && !files.ContainsKey(key)) { files.Add(key, data); } } } } } return(files); }