diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index 64730bcd7d..d0bffbb503 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -163,6 +163,7 @@ bool ModuleList::tryToAddModuleFromFolder (const File& path) if (m.isValid()) { + getPreviousModuleDirectories().addIfNotAlreadyThere (path.getParentDirectory()); modules.add (new ModuleDescription (m)); return true; } @@ -174,23 +175,27 @@ void ModuleList::addAllModulesInFolder (const File& path) { if (! tryToAddModuleFromFolder (path)) { - int subfolders = 3; - addAllModulesInSubfoldersRecursively (path, subfolders); + for (DirectoryIterator iter (path, false, "*", File::findDirectories); iter.next();) + tryToAddModuleFromFolder (iter.getFile().getLinkedTarget()); } } -void ModuleList::addAllModulesInSubfoldersRecursively (const File& path, int depth) +Array& ModuleList::getPreviousModuleDirectories() { - if (depth > 0) - { - for (DirectoryIterator iter (path, false, "*", File::findDirectories); iter.next();) - { - auto childPath = iter.getFile().getLinkedTarget(); + static Array previous; + return previous; +} - if (! tryToAddModuleFromFolder (childPath)) - addAllModulesInSubfoldersRecursively (childPath, depth - 1); - } +File ModuleList::tryToFindModulePathFromPrevious (const String& id) +{ + for (auto& f : getPreviousModuleDirectories()) + { + auto modulePath = f.getChildFile (id); + if (ModuleDescription (modulePath).isValid()) + return modulePath; } + + return {}; } //============================================================================== @@ -683,6 +688,13 @@ File EnabledModuleList::findFolderForModule (const String& moduleID) if (isJUCEModule (moduleID)) return File (getAppSettings().getStoredPath (Ids::defaultJuceModulePath).toString()).getChildFile (moduleID); + { + auto previous = ModuleList::tryToFindModulePathFromPrevious (moduleID); + + if (previous != File()) + return previous; + } + ModuleList list; list.scanGlobalUserModulePath(); diff --git a/extras/Projucer/Source/Project/jucer_Module.h b/extras/Projucer/Source/Project/jucer_Module.h index ec79d36cec..c798d20f84 100644 --- a/extras/Projucer/Source/Project/jucer_Module.h +++ b/extras/Projucer/Source/Project/jucer_Module.h @@ -78,7 +78,9 @@ struct ModuleList bool tryToAddModuleFromFolder (const File&); void addAllModulesInFolder (const File&); - void addAllModulesInSubfoldersRecursively (const File&, int depth); + + static Array& getPreviousModuleDirectories(); + static File tryToFindModulePathFromPrevious (const String&); void scanProjectExporterModulePaths (Project&); void scanGlobalJuceModulePath();