From 8f1d37a72ec9830c44b94a50198177edc4cf60f6 Mon Sep 17 00:00:00 2001 From: stefan Date: Thu, 6 Oct 2016 18:37:43 +0200 Subject: [PATCH] Fix addAllModulesInFolder to scan only 2 subfolder levels Other existing behavior remains: * check whether the folder itself is a valid module * always return Result::ok() * may contain duplicate modules --- .../Projucer/Source/Project/jucer_Module.cpp | 29 +++++++++++++++---- extras/Projucer/Source/Project/jucer_Module.h | 3 ++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index 307c52db20..307e458aa9 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -168,22 +168,39 @@ StringArray ModuleList::getIDs() const return results; } -Result ModuleList::addAllModulesInFolder (const File& path) +Result ModuleList::tryToAddModuleFromFolder (const File& path) { ModuleDescription m (path); - if (m.isValid()) { modules.add (new ModuleDescription (m)); + return Result::ok(); } - else + + return Result::fail (path.getFullPathName() + " is not a valid module"); +} + +Result ModuleList::addAllModulesInFolder (const File& path) +{ + if (! tryToAddModuleFromFolder (path)) + { + const int subfolders = 2; + return addAllModulesInSubfoldersRecursively (path, subfolders); + } + + return Result::ok(); +} + +Result ModuleList::addAllModulesInSubfoldersRecursively (const File& path, int depth) +{ + if (depth > 0) { for (DirectoryIterator iter (path, false, "*", File::findDirectories); iter.next();) { - Result r = addAllModulesInFolder (iter.getFile().getLinkedTarget()); + const File& childPath = iter.getFile().getLinkedTarget(); - if (r.failed()) - return r; + if (! tryToAddModuleFromFolder (childPath)) + addAllModulesInSubfoldersRecursively (childPath, depth - 1); } } diff --git a/extras/Projucer/Source/Project/jucer_Module.h b/extras/Projucer/Source/Project/jucer_Module.h index 3c6c524a83..adc424584b 100644 --- a/extras/Projucer/Source/Project/jucer_Module.h +++ b/extras/Projucer/Source/Project/jucer_Module.h @@ -74,7 +74,10 @@ struct ModuleList StringArray getIDs() const; void sort(); + Result tryToAddModuleFromFolder (const File&); + Result addAllModulesInFolder (const File&); + Result addAllModulesInSubfoldersRecursively (const File&, int depth); Result scanAllKnownFolders (Project&); OwnedArray modules;