@@ -462,6 +462,16 @@ void OrganizerCore::createDefaultProfile()
462462 }
463463}
464464
465+ void OrganizerCore::createOverwriteDirectories ()
466+ {
467+ QString overwritePath = settings ().paths ().overwrite ();
468+ for (auto modDirectory : managedGame ()->getModMappings ().keys ()) {
469+ if (!modDirectory.isEmpty ()) {
470+ QDir (overwritePath).mkdir (modDirectory);
471+ }
472+ }
473+ }
474+
465475void OrganizerCore::prepareVFS ()
466476{
467477 m_USVFS.updateMapping (fileMapping (m_CurrentProfile->name (), QString ()));
@@ -1396,8 +1406,11 @@ void OrganizerCore::updateModsInDirectoryStructure(
13961406 std::vector<DirectoryRefresher::EntryInfo> entries;
13971407
13981408 for (auto idx : modInfo.keys ()) {
1409+ QString path = modInfo[idx]->absolutePath ();
1410+ QString modDataDir = managedGame ()->modDataDirectory ();
1411+ path = modDataDir.isEmpty () ? path : path + " /" + modDataDir;
13991412 entries.push_back ({modInfo[idx]->name (),
1400- modInfo[idx]-> absolutePath () ,
1413+ path ,
14011414 modInfo[idx]->stealFiles (),
14021415 {},
14031416 m_CurrentProfile->getModPriority (idx)});
@@ -1426,10 +1439,12 @@ void OrganizerCore::updateModsInDirectoryStructure(
14261439
14271440 // finally also add files from bsas to the directory structure
14281441 for (auto idx : modInfo.keys ()) {
1442+ QString path = modInfo[idx]->absolutePath ();
1443+ QString modDataDir = managedGame ()->modDataDirectory ();
1444+ path = modDataDir.isEmpty () ? path : path + " /" + modDataDir;
14291445 m_DirectoryRefresher->addModBSAToStructure (
14301446 m_DirectoryStructure, modInfo[idx]->name (),
1431- m_CurrentProfile->getModPriority (idx), modInfo[idx]->absolutePath (),
1432- modInfo[idx]->archives ());
1447+ m_CurrentProfile->getModPriority (idx), path, modInfo[idx]->archives ());
14331448 }
14341449}
14351450
@@ -2034,12 +2049,7 @@ std::vector<Mapping> OrganizerCore::fileMapping(const QString& profileName,
20342049
20352050 MappingType result;
20362051
2037- QStringList dataPaths;
2038- dataPaths.append (QDir::toNativeSeparators (game->dataDirectory ().absolutePath ()));
2039-
2040- for (auto directory : game->secondaryDataDirectories ()) {
2041- dataPaths.append (directory.absolutePath ());
2042- }
2052+ auto dataMaps = game->getModMappings ();
20432053
20442054 bool overwriteActive = false ;
20452055
@@ -2052,13 +2062,19 @@ std::vector<Mapping> OrganizerCore::fileMapping(const QString& profileName,
20522062 ModInfo::Ptr modPtr = ModInfo::getByIndex (modIndex);
20532063
20542064 bool createTarget = customOverwrite == std::get<0 >(mod);
2065+ QDir modDir = QDir (std::get<1 >(mod));
20552066
20562067 overwriteActive |= createTarget;
20572068
20582069 if (modPtr->isRegular ()) {
2059- for (auto dataPath : dataPaths) {
2060- result.insert (result.end (), {QDir::toNativeSeparators (std::get<1 >(mod)),
2061- dataPath, true , createTarget});
2070+ for (auto dataMap : dataMaps.asKeyValueRange ()) {
2071+ auto mapDir = QDir (modDir.absoluteFilePath (dataMap.first ));
2072+ if (mapDir.exists ()) {
2073+ for (auto dir : dataMap.second ) {
2074+ result.insert (result.end (),
2075+ {mapDir.absolutePath (), dir, true , createTarget});
2076+ }
2077+ }
20622078 }
20632079 }
20642080 }
@@ -2080,10 +2096,15 @@ std::vector<Mapping> OrganizerCore::fileMapping(const QString& profileName,
20802096 }
20812097 }
20822098
2083- for (auto dataPath : dataPaths) {
2084- result.insert (result.end (),
2085- {QDir::toNativeSeparators (m_Settings.paths ().overwrite ()), dataPath,
2086- true , customOverwrite.isEmpty ()});
2099+ QDir overwriteDir (m_Settings.paths ().overwrite ());
2100+ for (auto dataMap : dataMaps.asKeyValueRange ()) {
2101+ auto overwriteSubpath = overwriteDir.absoluteFilePath (dataMap.first );
2102+ if (QDir (overwriteSubpath).exists ()) {
2103+ for (auto dir : dataMap.second ) {
2104+ result.insert (result.end (),
2105+ {overwriteSubpath, dir, true , customOverwrite.isEmpty ()});
2106+ }
2107+ }
20872108 }
20882109
20892110 for (MOBase::IPluginFileMapper* mapper :
0 commit comments