From 959f85e1444364212ca4f4e807ae5da8af9b7987 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 25 Aug 2015 13:04:14 -0700 Subject: [PATCH] Made search work on file system folders (download) --- Library/Provider/LibraryProviderFileSystem.cs | 88 +++++++++++++------ 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/Library/Provider/LibraryProviderFileSystem.cs b/Library/Provider/LibraryProviderFileSystem.cs index d0a12d620..a0e379541 100644 --- a/Library/Provider/LibraryProviderFileSystem.cs +++ b/Library/Provider/LibraryProviderFileSystem.cs @@ -141,7 +141,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider if (keywordFilter != value) { keywordFilter = value; - GetFilesAndCollectionsInCurrentDirectory(); + GetFilesAndCollectionsInCurrentDirectory(keywordFilter.Trim() != ""); } } } @@ -315,45 +315,83 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider }); } - private void GetFilesAndCollectionsInCurrentDirectory() + private async void GetFilesAndCollectionsInCurrentDirectory(bool recursive = false) { - currentDirectoryDirectories.Clear(); - try + List newReadDirectoryDirectories = new List(); + List newReadDirectoryFiles = new List(); + + await Task.Run(() => { - string[] directories = Directory.GetDirectories(Path.Combine(rootPath, currentDirectory)); - foreach (string directoryName in directories) + try { - if (keywordFilter.Trim() == string.Empty - || Path.GetFileNameWithoutExtension(directoryName).Contains(keywordFilter)) + string[] directories = null; + if (recursive) + { + directories = Directory.GetDirectories(Path.Combine(rootPath, currentDirectory), "*.*", SearchOption.AllDirectories); + } + else + { + directories = Directory.GetDirectories(Path.Combine(rootPath, currentDirectory)); + } + foreach (string directoryName in directories) { string subPath = directoryName.Substring(rootPath.Length + 1); - currentDirectoryDirectories.Add(subPath); + newReadDirectoryDirectories.Add(subPath); } } - } - catch (Exception) - { - } - - currentDirectoryFiles.Clear(); - try - { - string[] files = Directory.GetFiles(Path.Combine(rootPath, currentDirectory)); - foreach (string filename in files) + catch (Exception) { - if (ApplicationSettings.LibraryFilterFileExtensions.Contains(Path.GetExtension(filename).ToLower())) + } + + try + { + string upperFilter = keywordFilter.ToUpper(); + string[] files = Directory.GetFiles(Path.Combine(rootPath, currentDirectory)); + foreach (string filename in files) { - if (keywordFilter.Trim() == string.Empty - || Path.GetFileNameWithoutExtension(filename).Contains(keywordFilter)) + if (ApplicationSettings.LibraryFilterFileExtensions.Contains(Path.GetExtension(filename).ToLower())) { - currentDirectoryFiles.Add(filename); + if (upperFilter.Trim() == string.Empty + || Path.GetFileNameWithoutExtension(filename.ToUpper()).Contains(upperFilter)) + { + newReadDirectoryFiles.Add(filename); + } + } + } + if (recursive) + { + foreach (string directory in newReadDirectoryDirectories) + { + string subDirectory = Path.Combine(rootPath, directory); + string[] subDirectoryFiles = Directory.GetFiles(Path.Combine(rootPath, currentDirectory)); + foreach (string filename in subDirectoryFiles) + { + if (ApplicationSettings.LibraryFilterFileExtensions.Contains(Path.GetExtension(filename).ToLower())) + { + if (keywordFilter.Trim() == string.Empty + || Path.GetFileNameWithoutExtension(filename.ToUpper()).Contains(upperFilter)) + { + newReadDirectoryFiles.Add(filename); + } + } + } } } } - } - catch (Exception) + catch (Exception) + { + } + }); + + if (recursive) { + currentDirectoryDirectories.Clear(); } + else + { + currentDirectoryDirectories = newReadDirectoryDirectories; + } + currentDirectoryFiles = newReadDirectoryFiles; OnDataReloaded(null); }