void InstallationManager::mapToArchive(const DirectoryTree::Node *node, std::wstring path, FileData * const *data) { if (path.length() > 0) { // when using a long windows path (starting with \\?\) we apparently can have redundant // . components in the path. This wasn't a problem with "regular" path names. if (path == L".") { path.clear(); } else { path.append(L"\\"); } } for (DirectoryTree::const_leaf_iterator iter = node->leafsBegin(); iter != node->leafsEnd(); ++iter) { std::wstring temp = path + iter->getName().toStdWString(); data[iter->getIndex()]->addOutputFileName(temp.c_str()); } for (DirectoryTree::const_node_iterator iter = node->nodesBegin(); iter != node->nodesEnd(); ++iter) { std::wstring temp = path + (*iter)->getData().name.toStdWString(); if ((*iter)->getData().index != -1) { data[(*iter)->getData().index]->addOutputFileName(temp.c_str()); } mapToArchive(*iter, temp, data); } }
bool InstallerFomod::isArchiveSupported(const DirectoryTree &tree) const { const DirectoryTree *fomodDir = findFomodDirectory(&tree); if (fomodDir != nullptr) { for (DirectoryTree::const_leaf_iterator fileIter = fomodDir->leafsBegin(); fileIter != fomodDir->leafsEnd(); ++fileIter) { if (fileIter->getName() == "ModuleConfig.xml") { return true; } } } return false; }
bool InstallationManager::isSimpleArchiveTopLayer(const DirectoryTree::Node *node, bool bainStyle) { // see if there is at least one directory that makes sense on the top level for (DirectoryTree::const_node_iterator iter = node->nodesBegin(); iter != node->nodesEnd(); ++iter) { if ((bainStyle && InstallationTester::isTopLevelDirectoryBain((*iter)->getData().name)) || (!bainStyle && InstallationTester::isTopLevelDirectory((*iter)->getData().name))) { qDebug("%s on the top level", (*iter)->getData().name.toUtf8().constData()); return true; } } // see if there is a file that makes sense on the top level for (DirectoryTree::const_leaf_iterator iter = node->leafsBegin(); iter != node->leafsEnd(); ++iter) { if (InstallationTester::isTopLevelSuffix(iter->getName())) { return true; } } return false; }