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;