diff options
| author | Tom Tanner <thosrtanner2@users.sourceforge.net> | 2015-08-02 16:25:32 +0100 |
|---|---|---|
| committer | Tom Tanner <thosrtanner2@users.sourceforge.net> | 2015-08-02 16:25:32 +0100 |
| commit | eaaa1b312dfd8ab0fed677dd9eb368c84c03a758 (patch) | |
| tree | 24e9baecc3e1f90cb85a20265765f63e8dc18976 /src/installationmanager.cpp | |
| parent | 48fae44566356eebbe222c7cc9592b8f2a1b3c8d (diff) | |
Extract multiple copies of file from archive
Had to rewrite the archive handling a bit. First pass, some tidyups required.
Diffstat (limited to 'src/installationmanager.cpp')
| -rw-r--r-- | src/installationmanager.cpp | 60 |
1 files changed, 21 insertions, 39 deletions
diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp index c036a373..71b38139 100644 --- a/src/installationmanager.cpp +++ b/src/installationmanager.cpp @@ -124,23 +124,16 @@ void InstallationManager::mapToArchive(const DirectoryTree::Node *node, std::wst }
for (DirectoryTree::const_leaf_iterator iter = node->leafsBegin(); iter != node->leafsEnd(); ++iter) {
- if (! data[iter->getIndex()]->getSkip()) {
- std::wstring newp((path + iter->getName().toStdWString()));
- std::wstring oldp(data[iter->getIndex()]->getOutputFileName());
- qDebug() << "outputting to " << QString::fromStdWString(newp) << " but already outputting to " << QString::fromStdWString(oldp);
- }
- data[iter->getIndex()]->setSkip(false);
std::wstring temp = path + iter->getName().toStdWString();
- data[iter->getIndex()]->setOutputFileName(temp.c_str());
+ 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]->setSkip(false);
- std::wstring temp = path + (*iter)->getData().name.toStdWString();
- data[(*iter)->getData().index]->setOutputFileName(temp.c_str());
+ data[(*iter)->getData().index]->addOutputFileName(temp.c_str());
}
- mapToArchive(*iter, path + (*iter)->getData().name.toStdWString(), data);
+ mapToArchive(*iter, temp, data);
}
}
@@ -151,11 +144,6 @@ void InstallationManager::mapToArchive(const DirectoryTree::Node *baseNode) size_t size;
m_CurrentArchive->getFileList(data, size);
- // first disable all files + folders, we will re-enable those present in baseNode
- for (size_t i = 0; i < size; ++i) {
- data[i]->setSkip(true);
- }
-
std::wstring currentPath;
mapToArchive(baseNode, currentPath, data);
@@ -174,32 +162,29 @@ bool InstallationManager::unpackSingleFile(const QString &fileName) for (size_t i = 0; i < size; ++i) {
if (_wcsicmp(data[i]->getFileName(), ToWString(fileName).c_str()) == 0) {
available = true;
- data[i]->setSkip(false);
- data[i]->setOutputFileName(ToWString(baseName).c_str());
+ data[i]->addOutputFileName(ToWString(baseName).c_str());
m_TempFilesToDelete.insert(baseName);
- } else {
- data[i]->setSkip(true);
}
}
- if (available) {
- m_InstallationProgress.setWindowTitle(tr("Extracting files"));
- m_InstallationProgress.setLabelText(QString());
- m_InstallationProgress.setValue(0);
- m_InstallationProgress.setWindowModality(Qt::WindowModal);
- m_InstallationProgress.show();
+ if (!available) {
+ return false;
+ }
- bool res = m_CurrentArchive->extract(ToWString(QDir::toNativeSeparators(QDir::tempPath())).c_str(),
- new MethodCallback<InstallationManager, void, float>(this, &InstallationManager::updateProgress),
- new MethodCallback<InstallationManager, void, LPCWSTR>(this, &InstallationManager::dummyProgressFile),
- new MethodCallback<InstallationManager, void, LPCWSTR>(this, &InstallationManager::report7ZipError));
+ m_InstallationProgress.setWindowTitle(tr("Extracting files"));
+ m_InstallationProgress.setLabelText(QString());
+ m_InstallationProgress.setValue(0);
+ m_InstallationProgress.setWindowModality(Qt::WindowModal);
+ m_InstallationProgress.show();
- m_InstallationProgress.hide();
+ bool res = m_CurrentArchive->extract(ToWString(QDir::toNativeSeparators(QDir::tempPath())).c_str(),
+ new MethodCallback<InstallationManager, void, float>(this, &InstallationManager::updateProgress),
+ new MethodCallback<InstallationManager, void, LPCWSTR>(this, &InstallationManager::dummyProgressFile),
+ new MethodCallback<InstallationManager, void, LPCWSTR>(this, &InstallationManager::report7ZipError));
- return res;
- } else {
- return false;
- }
+ m_InstallationProgress.hide();
+
+ return res;
}
@@ -256,14 +241,11 @@ QStringList InstallationManager::extractFiles(const QStringList &filesOrig, bool ++targetFile;
}
}
- data[i]->setOutputFileName(targetFile);
+ data[i]->addOutputFileName(targetFile);
result.append(QDir::tempPath().append("/").append(ToQString(targetFile)));
- data[i]->setSkip(false);
m_TempFilesToDelete.insert(ToQString(targetFile));
- } else {
- data[i]->setSkip(true);
}
}
|
