static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies) { ModuleDescription info (project.getModules().getModuleInfo (moduleID)); if (info.isValid()) { const var depsArray (info.moduleInfo ["dependencies"]); if (const Array<var>* const deps = depsArray.getArray()) { for (int i = 0; i < deps->size(); ++i) { const var& d = deps->getReference(i); String uid (d [Ids::ID].toString()); String version (d [Ids::version].toString()); if (! dependencies.contains (uid, true)) { dependencies.add (uid); getDependencies (project, uid, dependencies); } } } } }
void EnabledModuleList::addModule (const File& moduleManifestFile, bool copyLocally) { ModuleDescription info (moduleManifestFile); if (info.isValid()) { const String moduleID (info.getID()); if (! isModuleEnabled (moduleID)) { ValueTree module (Ids::MODULES); module.setProperty (Ids::ID, moduleID, nullptr); state.addChild (module, -1, getUndoManager()); sortAlphabetically(); shouldShowAllModuleFilesInProject (moduleID) = true; shouldCopyModuleFilesLocally (moduleID) = copyLocally; RelativePath path (moduleManifestFile.getParentDirectory().getParentDirectory(), project.getProjectFolder(), RelativePath::projectFolder); for (Project::ExporterIterator exporter (project); exporter.next();) exporter->getPathForModuleValue (moduleID) = path.toUnixStyle(); } } }
Result ModuleList::addAllModulesInFolder (const File& path) { const File moduleDef (path.getChildFile (ModuleDescription::getManifestFileName())); if (moduleDef.exists()) { ModuleDescription m (moduleDef); if (! m.isValid()) return Result::fail ("Failed to load module manifest: " + moduleDef.getFullPathName()); modules.add (new ModuleDescription (m)); } else { for (DirectoryIterator iter (path, false, "*", File::findDirectories); iter.next();) { Result r = addAllModulesInFolder (iter.getFile().getLinkedTarget()); if (r.failed()) return r; } } return Result::ok(); }
void EnabledModuleList::createRequiredModules (OwnedArray<LibraryModule>& modules) { for (int i = 0; i < getNumModules(); ++i) { ModuleDescription info (getModuleInfo (getModuleID (i))); if (info.isValid()) modules.add (new LibraryModule (info)); } }
const ModuleDescription* ModuleList::getModuleWithID (const String& moduleID) const { for (int i = 0; i < modules.size(); ++i) { ModuleDescription* m = modules.getUnchecked(i); if (m->getID() == moduleID) return m; } return nullptr; }
Result ModuleList::tryToAddModuleFromFolder (const File& path) { ModuleDescription m (path); if (m.isValid()) { modules.add (new ModuleDescription (m)); return Result::ok(); } return Result::fail (path.getFullPathName() + " is not a valid module"); }
static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies) { ModuleDescription info (project.getModules().getModuleInfo (moduleID)); for (auto uid : info.getDependencies()) { if (! dependencies.contains (uid, true)) { dependencies.add (uid); getDependencies (project, uid, dependencies); } } }
void EnabledModuleList::addModuleOfferingToCopy (const File& f) { ModuleDescription m (f); if (! m.isValid()) { AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "Add Module", "This wasn't a valid module folder!"); return; } if (isModuleEnabled (m.getID())) { AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, "Add Module", "The project already contains this module!"); return; } addModule (m.moduleFolder, areMostModulesCopiedLocally()); }
Result ModuleList::addAllModulesInFolder (const File& path) { ModuleDescription m (path); if (m.isValid()) { modules.add (new ModuleDescription (m)); } else { for (DirectoryIterator iter (path, false, "*", File::findDirectories); iter.next();) { Result r = addAllModulesInFolder (iter.getFile().getLinkedTarget()); if (r.failed()) return r; } } return Result::ok(); }
bool ModuleList::loadFromWebsite() { modules.clear(); URL baseURL ("http://www.juce.com/juce/modules"); URL url (baseURL.getChildURL ("modulelist.php")); const ScopedPointer<InputStream> in (url.createInputStream (false, nullptr, nullptr, String::empty, 4000)); if (in == nullptr) return false; var infoList (JSON::parse (in->readEntireStreamAsString())); if (! infoList.isArray()) return false; const Array<var>* moduleList = infoList.getArray(); for (int i = 0; i < moduleList->size(); ++i) { const var& m = moduleList->getReference(i); const String file (m [Ids::file].toString()); if (file.isNotEmpty()) { ModuleDescription lm (m [Ids::info]); if (lm.isValid()) { lm.url = baseURL.getChildURL (file); modules.add (new ModuleDescription (lm)); } } } sort(); return true; }