bool BaseFileManager::registerPackages() { debugC(kWintermuteDebugFileAccess | kWintermuteDebugLog, "Scanning packages"); // Register without using SearchMan, as otherwise the FSNode-based lookup in openPackage will fail // and that has to be like that to support the detection-scheme. Common::FSList files; for (Common::FSList::iterator it = _packagePaths.begin(); it != _packagePaths.end(); ++it) { debugC(kWintermuteDebugFileAccess, "Should register folder: %s %s", (*it).getPath().c_str(), (*it).getName().c_str()); if (!(*it).getChildren(files, Common::FSNode::kListFilesOnly)) { warning("getChildren() failed for path: %s", (*it).getDisplayName().c_str()); } for (Common::FSList::iterator fileIt = files.begin(); fileIt != files.end(); ++fileIt) { if (!fileIt->getName().hasSuffix(".dcp")) { continue; } // Avoid registering all the language files // TODO: Select based on the gameDesc. if (_language != Common::UNK_LANG && fileIt->getParent().getName() == "language") { Common::String parentName = fileIt->getParent().getName(); Common::String dcpName = fileIt->getName(); if (_language == Common::EN_ANY && fileIt->getName() != "english.dcp") { continue; } else if (_language == Common::CZ_CZE && fileIt->getName() != "czech.dcp") { continue; } else if (_language == Common::IT_ITA && fileIt->getName() != "italian.dcp") { continue; } else if (_language == Common::PL_POL && fileIt->getName() != "polish.dcp") { continue; } else if (_language == Common::RU_RUS && fileIt->getName() != "russian.dcp") { continue; } } debugC(kWintermuteDebugFileAccess, "Registering %s %s", (*fileIt).getPath().c_str(), (*fileIt).getName().c_str()); registerPackage((*fileIt)); } } // debugC(kWintermuteDebugFileAccess | kWintermuteDebugLog, " Registered %d files in %d package(s)", _files.size(), _packages.size()); return STATUS_OK; }