From e6abe486a73928b8ec5bf01acd475d23aec722e0 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 9 Aug 2015 13:04:01 +0200 Subject: added some (currently unused) functionality to dump the list of file mappings from real to virtual location --- src/mainwindow.cpp | 44 +++++++++++++++++--------------------------- src/organizercore.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/organizercore.h | 6 ++++++ 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a209f00b..5ecebb1e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3451,36 +3451,26 @@ void MainWindow::languageChange(const QString &newLanguage) void MainWindow::writeDataToFile(QFile &file, const QString &directory, const DirectoryEntry &directoryEntry) { - { // list files -// std::set::const_iterator current, end; -// directoryEntry.getFiles(current, end); -// for (; current != end; ++current) { - - std::vector files = directoryEntry.getFiles(); - for (auto iter = files.begin(); iter != files.end(); ++iter) { - FileEntry::Ptr current = *iter; - bool isArchive = false; - int origin = current->getOrigin(isArchive); - if (isArchive) { - // TODO: don't list files from archives. maybe make this an option? - continue; - } - QString fullName = directory; - fullName.append("\\").append(ToQString(current->getName())); - file.write(fullName.toUtf8()); - - file.write("\t("); - file.write(ToQString(m_OrganizerCore.directoryStructure()->getOriginByID(origin).getName()).toUtf8()); - file.write(")\r\n"); + for (FileEntry::Ptr current : directoryEntry.getFiles()) { + bool isArchive = false; + int origin = current->getOrigin(isArchive); + if (isArchive) { + // TODO: don't list files from archives. maybe make this an option? + continue; } + QString fullName = directory + "\\" + ToQString(current->getName()); + file.write(fullName.toUtf8()); + + file.write("\t("); + file.write(ToQString(m_OrganizerCore.directoryStructure()->getOriginByID(origin).getName()).toUtf8()); + file.write(")\r\n"); } - { // recurse into subdirectories - std::vector::const_iterator current, end; - directoryEntry.getSubDirectories(current, end); - for (; current != end; ++current) { - writeDataToFile(file, directory.mid(0).append("\\").append(ToQString((*current)->getName())), **current); - } + // recurse into subdirectories + std::vector::const_iterator current, end; + directoryEntry.getSubDirectories(current, end); + for (; current != end; ++current) { + writeDataToFile(file, directory + "\\" + ToQString((*current)->getName()), **current); } } diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 50c95f0c..46065937 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -1570,3 +1570,43 @@ void OrganizerCore::prepareStart() { storeSettings(); } +std::vector> OrganizerCore::fileMapping() +{ + IPluginGame *game = qApp->property("managed_game").value(); + return fileMapping(game->dataDirectory().absolutePath(), + directoryStructure(), + directoryStructure()); +} + + +std::vector> OrganizerCore::fileMapping( + const QString &dataPath, + const DirectoryEntry *base, + const DirectoryEntry *directoryEntry) +{ + std::vector> result; + + for (FileEntry::Ptr current : directoryEntry->getFiles()) { + bool isArchive = false; + int origin = current->getOrigin(isArchive); + if (isArchive || (origin == 0)) { + continue; + } + + QString fileName = ToQString(current->getRelativePath()); + QString source = ToQString(base->getOriginByID(origin).getPath()) + fileName; + QString target = QDir::toNativeSeparators(dataPath) + fileName; + result.push_back(std::make_pair(source, target)); + } + + // recurse into subdirectories + std::vector::const_iterator current, end; + directoryEntry->getSubDirectories(current, end); + for (; current != end; ++current) { + std::vector> subRes = fileMapping(dataPath, base, *current); + result.insert(result.end(), subRes.begin(), subRes.end()); + } + return result; +} + + diff --git a/src/organizercore.h b/src/organizercore.h index 014a4ab8..85f0e0c4 100644 --- a/src/organizercore.h +++ b/src/organizercore.h @@ -157,6 +157,8 @@ public: bool onFinishedRun(const std::function &func); void refreshModList(bool saveChanges = true); + std::vector > fileMapping(); + public: // IPluginDiagnose interface virtual std::vector activeProblems() const; @@ -208,6 +210,10 @@ private: bool testForSteam(); + std::vector> fileMapping(const QString &dataPath, + const MOShared::DirectoryEntry *base, + const MOShared::DirectoryEntry *directoryEntry); + private slots: void directory_refreshed(); -- cgit v1.3.1